Skip to content

JWT + OAuth 2.0

  1. OAuth로 받은 사용자 정보를 검증 후 자체 JWT 토큰 발급
  2. Access Token (15분) + Refresh Token (7일) 구조로 보안 강화
  3. Refresh Token은 Redis에서 관리하여 탈취 시 무효화 가능
  4. Google, Kakao OAuth 연동으로 소셜 로그인 제공

상세 설계

  • Refresh Token Redis 관리: 서버에서 Refresh Token을 저장소에서 직접 관리하므로, 토큰 탈취가 의심될 때 해당 키를 즉시 삭제하여 무효화할 수 있습니다. JWT만으로는 발급 후 서버에서 강제로 만료시킬 수 없지만, Redis에 저장된 Refresh Token은 언제든 삭제 가능합니다.
  • Access Token 관리 방식: Access Token은 15분의 짧은 만료시간을 가지므로 별도 저장소 관리 없이 JWT 자체 만료에 의존합니다. 이를 통해 Redis 메모리 사용량을 줄이고 조회 성능을 향상시킵니다.

Redis

  1. JWT Refresh Token 저장 및 관리
  2. 실시간 채팅 메시지 Pub/Sub 처리
  3. 분산 락을 통한 예약 동시성 제어
  4. 자주 조회되는 업체 정보 캐싱
  5. 생성된 알림 자동 정리

상세 설계

  • 분산 락 동시성 제어: Spring 낙관적 락은 단일 서버에서만 동작하며 여러 Spring Boot 인스턴스 간 동기화가 불가능합니다. Redis 분산 락은 모든 서버가 동일한 Redis를 참조하므로 서버 간 동기화가 가능하고, DB 접근 전에 락으로 차단하여 성능을 향상시킬 수 있습니다. SET NX 명령어로 락을 획득한 사용자만 예약을 진행하며, 타임아웃 자동 처리로 락 획득 실패 시 즉시 응답합니다.
  • 채팅 Pub/Sub: Spring STOMP는 단일 서버 내 WebSocket 세션 간 통신만 가능하여, 사용자들이 서로 다른 서버에 연결되면 메시지 전달이 불가능합니다. Redis Pub/Sub은 여러 서버 간 메시지 브로드캐스팅이 가능하므로 어느 서버에 연결된 사용자든 메시지를 수신할 수 있어 확장성을 확보할 수 있습니다.
  • 생성된 알림 자동 정리 : 만약 notification 기능을 사용하게 된다면

Docker

  1. 모든 서비스를 컨테이너로 격리하여 안정성 확보
  2. Docker Compose로 개발 환경 일관성 유지
  3. 컨테이너별 리소스 제한 설정으로 메모리 효율 관리
  4. 개발/운영 환경 통일로 배포 오류 방지

상세 설계

  • Docker Compose 환경 일관성: docker-compose.yml 파일에 모든 서비스의 의존성, 포트, 환경변수를 정의하여 개발자마다 다른 환경 설정으로 인한 오류를 방지합니다. 새로운 개발자도 docker-compose up 명령어 하나로 동일한 개발 환경을 즉시 구성할 수 있습니다.
  • 메모리 효율 관리: t2.micro의 1GB RAM 제한을 고려하여 docker-compose.yml에서 각 컨테이너에 메모리 제한을 설정합니다. (예: Nginx 128MB, Spring Boot 각각 300MB, Redis 100MB, 총 828MB 사용) mem_limit과 mem_reservation 옵션을 통해 최대 사용량과 보장 메모리를 설정하여 메모리 부족으로 인한 서비스 중단을 방지하고 안정적인 멀티 서비스 운영이 가능합니다.

Nginx

  1. SSL 인증서 적용으로 HTTPS 통신 암호화
  2. 여러 Spring Boot 인스턴스에 로드 밸런싱 (8080, 8081 포트)
  3. 특정 경로 접근 제어 및 Rate Limiting 적용
  4. 정적 파일 서빙 및 리버스 프록시 설정

상세 설계

  • 접근 제어 및 Rate Limiting: nginx.conf 설정을 통해 완전히 커스터마이징 가능합니다. 예를 들어 /admin 경로는 특정 IP에서만 접근 가능하도록 제한하고, /api/auth/login은 분당 10회, 일반 API는 분당 100회로 요청 빈도를 차등 제한하여 DDoS 공격이나 과도한 요청으로부터 서버를 보호합니다. 경로별 접근 제어, IP 화이트리스트, 인증 헤더 검증 등 보안 정책을 유연하게 적용할 수 있습니다.
  • 리버스 프록시 설정: 클라이언트 요청을 받아 백엔드 Spring Boot 서버로 전달하면서, 실제 서버 IP와 포트를 숨겨 보안을 강화합니다. 또한 Nginx가 정적 파일 요청을 직접 처리하여 Spring Boot 서버의 부하를 줄입니다.

GitHub Actions

  1. 코드 푸시 시 자동 테스트, 빌드, 배포 실행
  2. Docker 이미지 자동 생성 및 레지스트리 푸시
  3. EC2 인스턴스에 무중단 배포 구현
  4. 배포 실패 시 자동 롤백 기능

Spring Batch

  1. 기한 만료된 JWT 토큰 자동 정리
  2. 시스템 , 예약 통계 로그 아카이빙

Prometheus + Grafana

  1. Spring Boot Actuator 메트릭 수집 및 모니터링
  2. API 응답시간 및 처리량 측정
  3. JMeter와 연동한 부하 테스트 진행
  4. 쿼리 최적화 전후 성능 비교 분석