1) 세션/인증

  1. 세션 저장 위치: JSESSIONID 메모리 세션이면 깨짐 → Spring Session(JDBC/Redis) 또는 JWT로 외부화.
  2. 쿠키/서명 키 일관성: 쿠키 서명/암호화 키, JWT secret, SSO 관련 키가 모든 서버에서 동일해야 함(Secret Manager로 통합).
  3. SSO 콜백 경로: 콜백 URL은 LB로 들어오게 구성(특정 서버 고정 금지).

2) 스토리지/파일

  1. 업로드/첨부 파일 저장소: 로컬 디스크 저장 금지 → S3(오브젝트) 또는 EFS(공유)로 이동.
  2. 임시파일/리포트 생성 경로: /tmp, 로컬 폴더 의존 제거(서버별 불일치/유실).

3) 캐시/상태

  1. 로컬 캐시 사용 여부: Caffeine/Guava 등 로컬 캐시는 TTL 짧게 또는 외부 캐시(Redis)로 통일.
  2. 분산 락 필요 작업 식별: 중복 실행되면 사고나는 로직(정산 배치, 만료 처리, 상태 갱신) 체크.

4) 스케줄러/배치

  1. @Scheduled 중복 실행 방지: 2대면 2번 돈다 → ShedLock(DB/Redis), Leader Election, 또는 배치 전용 인스턴스로 분리.
  2. 메시지 컨슈머 중복 처리: Kafka/Rabbit consumer group 설정 확인 + 멱등 처리(중복 메시지 대비).

5) DB/커넥션

  1. DB 커넥션 풀 합산: maxPoolSize × 인스턴스 수가 DB max_connections 초과 안 하게 조정.
  2. 트랜잭션/락 전략: 예약/정산처럼 동시성 민감하면 DB 레벨에서 원자성 보장(비관락/낙관락/유니크키).
  3. 읽기/쓰기 분리 여부: 필요하면 Read Replica 적용(단, 정합성 요구 시 주의).

6) 배포/무중단

  1. 헬스체크 엔드포인트 분리: /actuator/health에 readiness/liveness 구분(준비 안 된 인스턴스는 LB에서 제외).
  2. 롤링 배포 시 호환성: 구버전/신버전이 동시에 뜨는 동안 API/DB 스키마 호환 유지(Expand→Migrate→Contract).
  3. 마이그레이션 실행 주체 단일화: Flyway/Liquibase가 모든 인스턴스에서 동시에 실행되지 않게(전용 job/1회 실행 전략).

빠른 결론(실무에서 제일 자주 터지는 Top 5)

  • @Scheduled 중복 실행
  • 로컬 파일 저장(업로드/첨부/리포트)
  • DB 커넥션 폭증
  • 세션/키 불일치
  • 롤링 배포 중 스키마/버전 비호환
LIST

+ Recent posts