Message Queue 기반 알림 Push 시스템
본 프로젝트는 메시지 큐를 활용하여 내구성과 확장성을 확보한 Push 알림 전송 서버를 구축하는 개인 학습 프로젝트입니다.
분산 시스템: 사용자 세션을 분산하여 고가용성과 확장성을 갖춘 구조를 이해하고 설계합니다.비동기 메시지 처리: 메시지 큐를 활용한 비동기적이고 내구성 있는 메시지 처리 구조를 이해합니다.AWS 클라우드 환경 경험: AWS 클라우드 서비스(SQS, SNS)를 직접 경험합니다.
graph LR
subgraph Publisher
A[Linker] -->|메시지 발행| B[SNS Topic]
end
subgraph Fan-out 구조
B --> C2[SQS - ex_sms]
B --> C3[SQS - ex_mail]
B --> C1[SQS - Push]
end
subgraph Push Consumer
D1[Sender] -->|메시지 소비| C1
D1 --> E1[Session Manager]
end
E1 -->|gRpc Stream| F1["client (goCLi)"]
서비스 별 상세 기능은 아래 링크를 참고해 주세요.
- Linker: 메시지를 수집하고 AWS SNS 토픽에 발행하는 역할을 합니다. 알림 전송의 시작점이 되는 Publisher입니다.
- sender: AWS SQS로부터 메시지를 비동기적으로 소비하고, 이를 세션 매니저에게 전달하는 중간 처리 역할을 수행합니다.
- session-manager: 클라이언트(goCLi)와 gRPC 스트림을 통해 세션을 유지하며, 전달받은 메시지를 실시간으로 사용자에게 전송합니다.
-
환경변수 설정
.env.sample파일을 복사하여.env파일을 생성한 후 값을 기입해 주세요. -
docker 컨테이너 실행 및 인프라 설정
docker compose up -d로 Docker 컨테이너를 실행합니다
컨테이너 실행 후, 로컬 인프라(AWS LocalStack, DB)를 아래 명령어로 설정해 주세요:make aws # localstack aws 서비스 설정. make db-setup # 디비 스키마 적용
-
서비스 개별 실행
각 서비스를 아래 명령어로 실행할 수 있습니다:
go run linker/main.go # linker 서비스 실행 go run sessionmanager/main.go # session-manager 실행 go run sender/main.go # session-manager 실행