피드로 돌아가기
올리브영 테크블로그Backend
원문 읽기
10년 된 레거시를 현대화하다 - Part.3: 대고객 서비스로의 확장
올리브영이 10년 된 레거시 매장 도메인을 DDD와 멀티모듈 아키텍처로 재구축하고, External/Internal API를 분리해 대고객·내부 서비스 동시 제공
AI 요약
Context
올리브영의 매장 정보는 신규 혁신매점(올리브영N 성수)의 키오스크, 온라인 전시 서비스(올영매장), 내부 시스템 등 다양한 클라이언트에서 필요하지만, 대고객(external)과 내부(internal) 환경에서 요구하는 데이터 범위와 응답 크기가 상이했다.
Technical Solution
- External/Internal 환경별 API 분리: 고객용 매장 요약 정보 API(필수 컬럼만 제공)와 내부용 매장 기본 정보 API(전체 마스터 컬럼 포함) 구분
- 멀티모듈 아키텍처 구성: api(external/internal 패키지로 분리), service, domain 모듈로 계층화하여 Presentation 영역만 환경별 분리 가능하게 설계
- HTTP API 설계 기준 수립: 리소스(shops) 중심의 URL 설계, 멱등성을 고려한 HTTP 메서드(GET/POST/PUT/DELETE/PATCH) 규약 정의
- 비즈니스 로직 통합: 매장 운영 상태, 휴무일, 영업시간을 조합하여 실시간 영업 상태를 판단하는 컬럼 추가
- TeamCity & AWS ECS 기반 CI/CD: 초기 단일 서비스 구성에서 향후 external-api/internal-api 모듈 분리 시 Build 스크립트와 ECS 클러스터 내 별도 서비스 생성으로 확장 가능하게 구성
- Datadog 모니터링: CPU/메모리/JVM Heap/스레드, TPS/Latency/에러율 대시보드 구축 및 5xx 에러(즉시), 비정상 4xx 에러(임계값 초과 시), Latency 지연(기준 시간 초과 시) 알람 설정
Key Takeaway
외부 클라이언트와 내부 시스템이 동일 도메인 정보를 필요로 할 때, HTTP 응답 크기와 데이터 민감도를 기준으로 API 엔드포인트를 분리하고, 멀티모듈 아키텍처로 Presentation 영역만 분리하면 소스 중복 없이 배포 독립성을 확보할 수 있다.
실천 포인트
DDD 전략적 설계로 도메인을 식별하고 멀티모듈 아키텍처(api/service/domain)를 도입한 팀은, api 모듈 내 external/internal 패키지 분리와 TeamCity Build 스크립트를 활용해 AWS ECS의 별도 서비스로 배포하면, 코드 중복 없이 환경별 API 관리 포인트를 줄이면서 네트워크 응답 크기 최적화가 가능하다.