[AWS] AWS SQS(Simple Queue Service) 이해하기
·
Programming/Cloud
AWS SQS란?Simple Queue Service로, AWS에서 서비스하는 메시지 큐이다.메시지 큐를 왜 사용할까?하나의 API 요청에 동시에 수행되는 후처리 작업들이 많은 경우 ⇒ 응답 지연 최소화 및 시스템 간 결합도 감소 가능문제 상황응답 지연 문제 : API 내부에서 동기로 처리한다면 응답 대기 시간이 증가함 → UX 저하장애 전파 위험 : 외부 API 호출이 포함되는 경우, 서비스 하나에 장애가 나도 전체 기능 장애로 이어질 가능성이 높음해결한 API는 관련 작업만 처리하고, 동반되어야 하는 각 작업을 메시지로 만들어 큐에 넣음각각의 작업을 담당하는 Consumer가 큐에서 메시지를 비동기적으로 소비하여 처리함효과고객의 응답 대기 시간 감소후처리 시스템에 장애가 나도 메인 작업 자체는 정상 ..
실시간 데이터 전송 기술 정리 | Polling, Long-Polling, SSE, WebSocket
·
Programming/ETC
최근 실시간 알림 기능을 구현하면서 공부했던 실시간 데이터 전송에 대표적인 기술들을 정리해본다.1. Polling주기적으로 서버에 요청을 보내 업데이트를 확인하는 방식클라이언트에서 서버로 계속해서 request를 전송한다.서버는 반복되는 request에 응답하면서, 전달할 이벤트가 있는 경우 전달한다.▶︎ 장점구현이 간단하다. (기본 HTTP만 지원되면 구현 가능)▶︎ 단점불필요한 요청이 많아지므로 서버 부하가 증가한다.새 이벤트가 발생하자마자 확인할 수는 없어 지연(Latency)이 존재한다.다수 클라이언트가 있을 경우 네트워크 오버헤드가 증가한다.매우매우 간단하게 실시간 (비슷한) 서비스를 구현해볼 수 있는 방식 2. Long Polling클라이언트가 서버에 요청을 보내고, 서버는 새로운 데이터가 있..
[Spring] DI와 IoC 이해하기
·
Programming/Spring
DI 적용 전 객체 사용 방식DI 개념을 적용하기 전에는 객체 사용 시 어떤 방식을 사용했을까?1. 직접 객체 생성사용하려는(=의존하려는) 객체를 ``new`` 생성자를 통해 직접 생성한다.public class CafeController { private StarbucksService starbucksService = new StarbucksService(); public void orderCoffee() { starbucksService.brew(); }}이러한 방법은 객체간 결합도가 강하다는 단점이 있다. 만일 스타벅스가 부도가 나서 서비스를 스타벅스가 아닌 팀홀튼으로 바꿔야 할 경우 (ㅎ) CafeController 내부의 코드를 직접 수정해야 한다.StarbucksService를 사용하고 있..
[SpringBoot] 파일 업로드를 위한 MultipartFile의 처리/동작 방식
·
Programming/Spring
Spring에서는 ``MultipartFile`` 인터페이스를 통해 파일 업로드 기능을 간편하게 구현할 수 있다.1. Multipart Upload란?이미지, 영상, 문서 등의 바이너리 데이터를 업로드하기 위한 HTTP 요청 방식이다.요청의 ``Content-Type``은 ``multipart/form-data``로 지정되며,데이터는 요청 본문(Body)에 다음과 같이 구성된다.Header : Content-Type, 필드 이름 등 메타데이터Body: 실제 데이터 (파일, 폼 필드 값 등)Multipart Upload 요청 예시POST /upload HTTP/1.1Content-Type: multipart/form-data; boundary=----WebKitFormBoundary------WebKitF..
[Network] HTTP 응답 상태 코드
·
Programming/Network
🌀 HTTP 응답 코드에 대해 설명해 주세요.클라이언트가 보낸 HTTP 요청이 성공적으로 완료되었는지 알려주는 코드이다.3자리 숫자로 이루어져 있으며, 100번대 ~ 500번대 까지 존재한다.코드의 첫 번째 자리에 따라 5개의 그룹으로 나뉜다.코드의미1xx정보 제공 응답, 요청 처리 중2xx성공, 요청 정상 처리3xx리디렉션, 요청 완료를 위해 추가 작업 필요4xx클라이언트 오류, 요청이 잘못됨5xx서버 오류, 서버측에서 오류 발생 💬 200(ok)와 201(created)의 차이에 대해 설명해 주세요.200(ok) : 요청이 정상 처리 되었을 때 범용적으로 사용201(created) : 요청이 정상 처리 되었으며, 그 결과 서버에서 새로운 리소스를 생성했을 때 사용일반적으로 POST 요청 성공 시 ..
Unique한 값이 필요할 때 사용하는 UUID, UUID란?
·
Programming/ETC
🏷️ UUID (Universally Unique Identifier)이름 그대로 UUID는 전세계적으로 고유한 식별자이다. 이론상으로 중복될 가능성이 거의 없기 때문에 데이터베이스에서 고유한 값을 보장하는 데 매우 유용하게 사용된다.128비트 길이의 값이다.보통 8-4-4-4-12 형태의 36자 문자열로 표현된다. (ex. ``550e8400-e29b-41d4-a716-446655440000``)▶︎ 장점데이터의 고유성을 보장한다.서버간 동기화 없이도 고유한 ID를 생성할 수 있으므로 분산 시스템에 적합하다. ▶︎ 단점길이가 길어 저장 공간을 많이 차지한다. (128비트 = 16바이트 = 문자열로 36자)DB에서 인덱싱 효율이 낮을 수 있다.UUID는 무작위성을 기반으로 생성되기 때문에 순차적인 값이..
[Network] HTTP Method와 멱등성
·
Programming/Network
🌀 HTTP가 뭔가요?HTTP stands for 'Hyper Text Transfer Protocol'어플리케이션 계층에서 데이터를 주고받기 위해 사용하는 프로토콜이다.전송 계층 프로토콜으로 TCP를 사용한다.🌀 HTTP Method에 대해 설명해 주세요.HTTP 요청이 주어진 리소스에 수행하길 원하는 행동을 나타낸다.주로 사용하는 메서드로는 ``GET``, ``POST``, ``PUT``, ``DELETE``, ``PATCH``가 있다.💬 GET과 POST의 차이는 무엇인가요?GET 요청은 데이터를 받기를 원하는 요청POST 요청은 데이터를 서버로 제출하는 요청💬 POST, PUT, PATCH의 차이는 무엇인가요?세 메서드 모두 데이터를 서버로 제출하는 요청 메서드이다.POST는 데이터의 제출..
[Network] 쿠키와 세션
·
Programming/Network
🌀 쿠키와 세션의 차이에 대해 설명해 주세요.두 기술 모두 웹 개발에서 사용자의 상태를 관리하는 기술이다.쿠키키-값 형태로 클라이언트의 웹 브라우저에 저장되는 데이터이다. 사용자가 직접 삭제하지 않는 한 만료 기간이 지나기 전까지 브라우저가 종료가 되어도 계속 유지된다.데이터 저장 위치 : 클라이언트 측의 웹 브라우저에 저장데이터 유지 시간 : 사용자가 직접 삭제하지 않는 한 만료 기간이 지나기 전까지 유지용량 : 일반적으로 한 사이트의 최대 쿠키 크기는 4KB이다.보안 : 클라이언트 측에 데이터에 저장되기 때문에 보안성이 낮다. 민감한 정보는 포함하지 않거나 암호화해야 한다. 속성 중 HttyOnly, Secure 속성을 사용하여 보안을 강화할 수 있다.세션일정 기간 동안 같은 사용자로부터 들어오는 ..
JWT 찐하게 이해하기 👀 | JWT 구성과 인증 원리
·
Programming/ETC
많이 듣고 많이 사용했던 JWT싹 다 정리해보고 이전 과제때부터 마주했던 JwtUtil 클래스도 좀 살펴보려고 한다. JWT와 Session을 통한 인증JWT와 Session 모두 웹 서비스에서 사용자의 인증 상태를 유지하는 방법이다.익숙한 말로는 로그인을 유지하는 방법이라고도 할 수 있겠다. HTTP의 stateless한 특성으로 인해 사용자의 인증 정보를 유지하는 기술이 필요하고, 이를 위해 Session 혹은 JWT를 이용할 수 있다.► Session 인증 방식세션 인증 방식을 순서 매기자면 다음과 같다.사용자 최초 로그인 시, 서버는 세션을 생성하여 인증 정보를 세션 저장소(별도 서버)에 저장한다.서버는 세션 생성 시 발급한 sessionId를 클라이언트에 Cookie에 포함하여 응답한다.클라이언..
[Spring] JPA Cascade에 대해 정리해보자 💭
·
Programming/Spring
JPA Cascade란?부모 엔티티가 수행하는 특정 영속성 작업(persist, merge, remove, refresh, detach)을 연관된 자식 엔티티에도 전파하는 기능이다.예를 들어 Order - OrderItem의 관계, Post - Comment의 관계를 생각하면 된다.Order가 삭제된다면 해당 OrderItem 데이터는 남아있을 필요가 없으므로 삭제되어야 한다.Post - Comment 역시 동일하다.@Entitypublic class Order { @Id @GeneratedValue private Long id; @OneToMany(mappedBy = "order") private List orderItems = new ArrayList(); public vo..
[Database] 트랜잭션과 ACID 원칙에 대해 정리해보자
·
Programming/Database
Transcation 개념  ▶︎ 정의사용자 관점에서 트랜잭션은, 데이터베이스에서 수행되는 작업의 논리적 단위이다. 예를 들어 ``내 계좌로의 입급``, ``다른 계좌로의 출금`` 등이 있겠다. 그렇다면 개발자 관점에서 트랜잭션은? 작업의 동시성 제어, 그리고 회복의 단위라고 말할 수 있다.여러 개의 쿼리문이 모여 하나의 트랜잭션을 이룬다.▶︎ 주요 명령어BEGIN, ROLLBACK, COMMIT 이 있다.☑️ BEGIN / START트랜잭션의 시작을 선언한다.☑️ ROLLBACK트랜잭션의 중단을 선언한다. 모든 변경 사항을 되돌려 원래 상태로 복구한다.트랜잭션이 시작(BEGIN)되기 전으로 데이터가 복구된다.✓ SAVEPOINT (선택적 롤백)트랜잭션 내에서 save point를 지정하여 특정 시점까지..
Redis에 대해 정리해보자
·
Programming/Database
Redis (Remote Dictionary Server)▶︎ 인메모리 데이터베이스인메모리란 말 그대로 컴퓨터의 메인 메모리(RAM)에 데이터를 올려서 사용하는 방법이다.MySQL, MongoDB 등 disk(SSD, HDD)에 데이터를 저장하는 데이터베이스에 접근하는 것보다 메모리에서 데이터를 가져오는 것이 훨씬 빠르므로 검색 속도 면에서 월등한 성능을 가진다.▶︎ 다양한 자료구조 지원기본적으로 Key-Value 구조로 저장한다. 하나의 Key에 Value 데이터를 저장하는 구조이다.Value에 저장할 수 있는 데이터로 다양한 자료구조를 지원한다.StringListSetSorted SetHashStream / Bitmap / Bitfield / Geospatial▶︎ 싱글 스레드Redis는 하나의 코어..