
백엔드
이젠 보내줄 때가 되었다. 대규모 트래픽의 C++ 시스템 Java로 전환하기
두줄요약
C++로 운영하던 대규모 트래픽 서버를 Java와 Spring Boot로 전환한 과정을 정리했습니다. 성능 검증, Canary 배포, GC 개선까지 거쳐 안정적으로 이관했습니다.
문제 상황
- 배달 주소 기반 행정동·법정동 조회용 C++ 웹 서버의 운영 부담 증가
- 낮은 유지보수성, 사내 배포·모니터링 체계와의 비호환성, 메모리 오남용 위험
- 전사 핵심 API 특성상 전환 시 성능 저하와 장애 확산 우려
원인 분석
- 이벤트 루프 기반 싱글스레드 구조로 인한 확장성 한계와 유지보수 난이도
- Java 전환 후 힙 메모리에 대량 S2 데이터를 올릴 때 GC, 특히 major GC 부담 예상
- 램프업 중심 성능테스트로는 중간 트래픽 구간의 CPU spike를 놓칠 가능성
해결 방법
- Java 및 Spring Boot로 이관하고 멀티스레드 처리로 성능 확보
- 메모리 조회 구조는 유지하되 fastutil로 primitive 컬렉션 최적화
- Canary 배포와 ALB 트래픽 조절로 장애 범위를 줄이며 롤백 대비
