Queue Service를 활용한 분산 어플리케이션 아키텍처
Queue Service를 활용한 분산 어플리케이션 아키텍처
개요
QS (Queue Service)는 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 분리하고 확장할 수 있는 완전 관리형 메시지 큐(대기열) 서비스입니다. 분산 시스템에서 안정적인 데이터 흐름은 애플리케이션의 신뢰성과 확장성을 결정짓는 핵심 요소입니다. QS를 통해 프로듀서와 컨슈머 간 메시지를 중계할 수 있으며, API를 이용해 메시지를 큐에 저장하고 검색하여 지연 없는 처리 흐름을 구현할 수 있습니다. QS에서 처리되는 메시지는 폴링(Polling) 기반으로 수신되며, 최대 14일 동안 큐에 보관됩니다. QS는 Point-to-Point 방식을 채택하여 한 메시지를 하나의 수신자만 처리하도록 보장하며, 수신자는 메시지를 수신, 처리 및 삭제할 수 있는 완전한 제어권을 가집니다.
아키텍처 다이어그램
Producer와 Consumer를 메시지 큐를 통해 분리하면, 각 컴포넌트가 독립적으로 동작하며 상호 의존성을 최소화할 수 있습니다. 이로 인해 프로듀서의 부하나 컨슈머의 장애가 전체 시스템에 파급되지 않고, 비동기적으로 안정적인 작업 처리를 보장합니다.
SQS 메시지 시스템을 구성하는 요소는 크게 3가지로 구분할 수 있습니다.
- Producer와 Consumer (분산 애플리케이션 서버)
- Queue (큐)
- 메시지
위의 구성요소는 아래와 같이 상호작용 합니다.
- Producer는 메시지를 생성하여 Queue로 전송합니다.
- Queue는 메시지를 일정 기간 보관합니다.
- Conumer는 큐를 주기적으로 폴링하여 새로운 메시지를 감지하고, 확인되면 즉시 처리합니다.
- Consumer는 메시지 처리가 끝나면 Queue로 수신확인(Ack)을 전송합니다.
- Queue는 메시지 아이디에 해당하는 수신확인(Ack)를 받으면 Queue에서 메시지를 제거합니다.
사용사례
Samsung Queue Service (QS)를 활용한 개발은 주로 시스템 간 결합도를 낮추고(Decoupling), 신뢰성 있는 비동기 통신을 구현하는 데 초점을 맞춥니다. QS는 마이크로서비스 아키텍처나 분산 시스템에서 안정적인 메시지 흐름을 보장하며, 프로듀서와 컨슈머의 독립성을 키울 수 있습니다.
각 사례는 QS의 핵심 강점인 비동기 처리, 확장성, 내결함성을 기반으로한 사용 사례입니다.
마이크로서비스 간 비동기 통신
가장 일반적인 사용 사례로, 복잡한 마이크로서비스 환경에서 서비스 간 느슨한 결합을 실현합니다.
느슨한 결합(Loose Coupling)
주문 서비스가 결제나 재고 관리 서비스에 직접 의존하지 않고, QS 큐에 메시지를 게시합니다. 각 서비스는 큐에서 메시지를 폴링하여 독립적으로 처리하므로, 변경 사항이 전체 시스템에 미치는 영향을 최소화합니다.
확장성 및 내결함성
트래픽 급증이나 개별 서비스 장애 시에도 메시지가 큐에 안전하게 보관되어 시스템 전체가 안정적으로 유지됩니다. 필요에 따라 서비스별로 독립 스케일링이 가능합니다.
백그라운드 작업 및 장기 실행 작업 처리
사용자에게 즉시 응답을 제공하면서, 시간이 오래 소요되는 작업을 비동기로 분리합니다.
미디어 처리:
사용자가 고화질 이미지를 업로드하면, 프론트엔드는 즉시 성공 응답을 반환하고 QS 큐에 처리 작업 메시지를 전송합니다.
별도의 워커(예: VS나 SCF 함수)가 큐를 폴링해 이미지 리사이징, 인코딩 등을 백그라운드에서 수행합니다.
대규모 데이터 처리:
복잡한 분석이나 리포트 생성 요청을 큐에 쌓아두고, 백그라운드에서 처리하여 사용자 대기 시간을 줄입니다.
트래픽 급증 대비 (스파이크 트래픽 처리)
갑작스러운 부하 증가 시 시스템 안정성을 유지합니다.
대형 이커머스 플랫폼처럼 트래픽 스파이크가 발생할 때, QS의 무제한 처리량(Standard Queue)과 메시지 보관(최대 14일)을 활용해 과부하를 완화합니다. 메시지가 큐에 버퍼링되어 컨슈머가 안정적으로 소화합니다.
선결 사항
Queue 대기열 선택
QS는 Standard 와 FIFO 대기열을 지원합니다. 각 대기열의 특징은 아래와 같습니다.
표준 대기열 (Standard Queue)
표준대기열은 무제한에 가까운 메시지 전송을 지원합니다. 최소 1회 전달(At-Least-Once-Delivery)을 보장합니다. 단, 상황에 따라 중복으로 메시지가 전송될 수 있으며, 메시지가 순서에 맞지 않은 경우가 있습니다. 하지만 표준 대기열은 최대한 순서를 보장하고자 합니다. (Best-Effort-Ordering)
따라서 표준대기열을 사용하여 개발할때에는 메시지를 두번 처리할 경우에도 부정적인 영향을 받지 않도록 어플리케이션을 설계해야합니다.
FIFO 대기열 (First In First Out Queue)
FIFO대기열은 메시지 순서를 보장합니다. 메시지는 1회 전송되며, 수신자는 1회만 수신합니다. (Exactly-Once Processing). 중복된 메시지는 허용되지 않습니다. 하지만 이러한 도착 순서를 보장하기 위해 표준대기열에 비해 제한된 트랜잭션을 가집니다.
대기열 선택 고려 요소
Message Ordering (메시지 순서)
순서가 필수적이라면 FIFO를 선택하세요. Standard는 유연하지만 완벽한 순서를 보장하지 않습니다.
Delivery (전달 방식)
중복 처리가 허용되는 환경이라면 Standard가 효율적입니다. 엄격한 1회 처리(Exactly-Once)가 필요하다면 FIFO를 사용하세요.
Throughput (처리량)
고부하 환경에서는 Standard의 무제한 처리량이 유리합니다. FIFO는 제한으로 인해 소규모 또는 순서 중심 작업에 적합합니다.
Use Cases (사용 사례)
Standard는 중복이나 순서 오류를 앱 레벨에서 처리할 수 있는 대부분의 시나리오에 적합합니다. (예: 로그 처리, 알림 시스템).
FIFO는 금융 거래, 주문 처리처럼 순서와 중복이 절대 허용되지 않는 민감한 환경에 적합합니다.
제약 사항
Quota 서비스를 참조하여 주십시오.
고려 사항
KMS (Key Management Service) 암호화 관련
KMS 암호화 키를 사용하기 위해서는 Key 관리자가 Master Key를 미리 생성하여야 합니다.
SSE로 SCP KMS의 Data Key 이용 시 재사용 시간 (기본 ***, **초~**분 설정가능)에 따라 SCP KMS의 비용이 추가로 발생합니다.
사용자 VPC의 워크로드에서 SQS 이용하기
Private Network에서 SQS를 풀링하기 위해서는, SCP VPC PrivateLink Endpoint 상품을 사용해야합니다.
VPN PrivateLink Endpoint를 생성한 후, 사용자 가이드에 따라 연결을 SR로 신청해주세요.
관련 서비스
본 가이드에서 설명하는 기능 또는 구성과 연결되는 Samsung Cloud Platform의 서비스 목록입니다. 서비스 선택 및 설계 시에 참고하세요.
| 서비스군 | 서비스 | 상세 설명 |
|---|---|---|
| Compute | Cloud Functions | 서버리스 컴퓨팅 환경에서 애플리케이션 코드를 실행하는 서비스 |
| Security | Key Management Service | 암호화 키를 간편하게 생성하고 안전하게 저장/관리하는 서비스 |
| Network | VPC Private Link Endpoint | 사용자 VPC를 인터넷에 노출하지 않고 VPC와 SCP 서비스간에 Private한 통신을 제공하는 서비스 |
