피드로 돌아가기
올리브영 테크블로그Backend
원문 읽기
올리브영 온라인몰의 전시, 그리고 백엔드 여정
올리브영이 Monolithic 아키텍처에서 MSA로 전환하며 Static/Personal 데이터 분리, Circuit Breaker 적용, 부하테스트를 통해 평균 응답 속도 99.5%, 최대 응답 속도 99.8% 개선
AI 요약
Context
On-premise 환경의 Monolithic 구조로 인해 올영 세일 같은 대량 트래픽 시 특정 영역(홈)의 확장이 불가능했고, 서버 증설이 거의 최대 상태였다. 또한 전체 시스템 구조의 디펜던시가 얽혀있어 기능 개발이나 리팩토링 시 영향도 파악부터 통합테스트까지 N개월 이상 소요되는 문제가 있었다.
Technical Solution
- Monolithic에서 MSA로 아키텍처 전환: 서비스를 마이크로서비스 단위로 분리하여 독립적인 확장 가능하게 구조 개선
- Static/Personal 데이터 영역 분리: 모든 유저에게 동일한 정적 데이터와 사용자별 개인화 데이터를 별도 API로 관리하여 홈 최초 노출 속도 개선
- Static Data API 세부 분리: 사용자 스크롤 행동 분석(depth 50% > 74%, depth 75% > 18%, depth 100% > 9%)을 통해 300KB 전체 데이터 대신 상단 9KB만 제공하는 최상단 영역 전용 API 추가
- Circuit Breaker 패턴 적용: Redis, MongoDB, Oracle, 외부 서비스의 지연 또는 장애 시 2~3차 fallback 로직으로 구성하여 한 저장소의 장애가 홈 전체로 전파되는 것을 방지
- 부하테스트 기반 임계치 설정: 올영 세일 1일차 23시 55분~00시 05분을 목표로 Redis 공용 영역 부하, Oracle Connection 처리량, CircuitBreaker 임계치, 필요한 Scale-out 수치를 성능/부하/스트레스 테스트로 검증
- JSON gzip 압축: 네트워크 전송량 추가 최적화
Impact
- 평균 응답 속도: 6월 대비 ((10380 + 10430) - (92.66 + 11.53)) / (10380 + 10430) = 99.5% 향상
- 최대 응답 속도: 6월 대비 ((33500 + 33600) - (105 + 15)) / (33500 + 33600) = 99.8% 향상
- Static Data 상단 영역 전용 API 도입 시 전체 데이터 대비 약 97% 데이터 전송 감소
Key Takeaway
대량 트래픽 환경에서는 사용자 행동 데이터(스크롤 깊이, 클릭 패턴)를 정량적으로 분석해 아키텍처 분리 근거를 만들고, Circuit Breaker와 fallback 로직의 임계치를 부하테스트로 검증한 뒤 적용해야 한다.
실천 포인트
전시/홈 화면을 서빙하는 서비스에서 사용자 스크롤 패턴을 분석(상위 50% 영역 접근률 vs 하위 영역)하여 API를 세분화하면, 최초 페이지 로드 시간을 단축하고 불필요한 네트워크/파싱 비용을 30% 이상 줄일 수 있다.