서비스별 주요 병목 구간을 식별하고, 비동기 처리, 캐싱, Non-blocking 전환을 통해 대규모 트래픽 환경에서도 안정적인 응답성을 확보하고자 개선한 부분들을 기록했습니다.
1. 이메일 인증 로직 응답 속도 개선
[BEFORE] 동기 처리 + 메모리 Map 저장
- 흐름: 사용자 요청 → 인증 코드 생성 → SMTP 발송(동기) → Map에 코드 보관 → 응답
- 문제점
- SMTP 전송 완료까지 Blocking → 사용자 체감 응답 지연 (약 13초)
- JVM 힙에 Map 저장 → 애플리케이션 재시작 시 코드 유실
- 다중 인스턴스 간 Map 데이터 불일치 발생
[AFTER] Spring Event를 통한 비동기 전환 + TTL 적용 Redis 사용
2. 상품 및 재고 조회 성능 개선
[BEFORE] DB 직접 조회
- 흐름: 클라이언트 요청 → RDBMS SELECT → 결과 반환
- 문제점
- 인기 상품 주문 시 RPS 급증 → DB Connection 포화
- 쿼리 지연으로 인한 전체 트랜잭션 병목
[AFTER] 상품 + 재고 Caching 도입
- 흐름: 클라이언트 요청 → Redis GET → MISS 시 DB 조회 + Redis SET → 결과 반환
- 구현 포인트
- TTL 설정 및 만료 후 재조회
- Look-aside 전략 채택 → 애플리케이션이 캐시 제어
- 효과
- 조회 응답 시간 180 ms → 14 ms (약 93% 단축, 약 13배 성능 향상)
- DB 부하 70 % 이상 경감 (피크 타임 기준)
- 트래픽 급증에도 안정적 처리