SideProject

Docker 기반 웹 푸시 알림 시스템 - 1

싹다배워 2026. 1. 14. 11:55
반응형

 

Docker (Spring Boot + PWA) 기반 웹 푸시 알림 시스템 설계 및 구현 개요

1. 프로젝트 개요

홈페이지나 기타 시스템들을 운영하다 보면 '공지사항을 올려도 사용자들이 잘 보지 않는다'는 문제가 반복적으로 발생한다.

이 프로젝트는 이러한 문제를 해결하기 위해

모바일 앱 없이도, 웹(PWA)만으로 실시간 알림을 제공하는 웹 푸시 시스템을 Docker 기반 구축하는 것을 목표로 한다.

 

아래와 같은 조건을 전제로 설계함.

  • Docker 기반 서비스 분리
  • Spring Boot 내장 WAS 사용
  • 1만명 이상 푸시 발송 가능
  • 운영 및 유지보수 고려

2. 프로젝트 목적

  • Docker 기반 서비스 구성
  • Spring Boot 내장 Tomcat 사용
  • 푸시 알림 + 큐 처리
  • 관리자 페이지에서 공지 작성 → 즉시 발송
  • 최소한의 인프라로 안정적인 대량 알림 처리

3. 전체 시스템 구조

[Internet]
    |
[Nginx (Docker)]
    |
 ├─ [Spring Boot API (Docker)]
 │     ├─ 푸시 구독/해지 API
 │     ├─ 관리자 공지 작성
 │     ├─ Push 발송 모듈
 │     └─ Scheduler / Async 처리
 │
 ├─ [Redis (Docker)]
 │     └─ Push Message Queue
 │
 └─ (추후 확장 가능)

아키텍처 설계 원칙

  • 컨테이너 1개 = 서비스 1개
  • 외부 트래픽은 Nginx만 노출
  • 컨테이너 간 통신은 Docker Network

4. Docker 기반 구성 이유

ⓐ 운영 안정성: 서비스별 장애 격리 가능

ⓑ 배포 단순화: 이미지 빌드

ⓒ 확장성 확보: 추후 서버 증설 시 동일 구조 재사용 가능

5. 주요 컨테이너 역할

#Nginx 컨테이너
HTTPS 처리 (웹 푸시는 HTTPS 필수)
Reverse Proxy
외부 유일 진입 지점

#Spring Boot 컨테이너
Push 구독/해지 API
관리자 공지 작성 페이지
푸시 발송 로직
Scheduler + 비동기 처리
web-push-java 라이브러리 사용
Tomcat은 내장 WAS 사용
별도 WAS 컨테이너 불필요

#Redis 컨테이너
Push 발송 대기 큐
대량 발송 시 안정적인 처리
서버 재기동 시 메시지 유실 방지
1만 명 규모에서는
In-memory Queue만으로도 충분하지만 운영 안정성을 고려해 Redis를 선택

 

반응형