피드로 돌아가기
7,000줄 PL/SQL 프로시저와의 결별: 클레임 로직 Java 모듈 이관기
올리브영 테크블로그올리브영 테크블로그
Backend

7,000줄 PL/SQL 프로시저와의 결별: 클레임 로직 Java 모듈 이관기

올리브영이 7,000줄 PL/SQL 프로시저를 Strangler Pattern으로 Java 모듈로 단계적 전환하여 장애 원인 추적 시간 단축 및 모듈별 기능 확장 자유도 확보

2025년 11월 6일8intermediate

Context

7,000줄이 넘는 단일 PL/SQL 프로시저에 주문·취소·교환·반품·옵션 변경 로직이 모두 혼재되어 있었다. 반품 절차 수정만으로도 주문·교환 로직에 영향을 미치는 구조로 인해 작은 변경이 전사적 리스크가 되었으며, 개발자가 프로시저 내 오류를 추적할 수 없는 상태였다.

Technical Solution

  • Strangler Pattern 도입: 기존 프로시저는 유지한 채 Java 모듈을 프로시저 호출 구간 앞단에 배치하여 점진적 전환
  • 기능별 도메인 경계 재정의: 주문·교환·반품·옵션 변경을 독립적 도메인으로 분리하여 모듈화
  • Fallback 메커니즘 설계: 신규 모듈 장애 시 기존 프로시저 버전으로 즉시 원복 가능하도록 구현
  • Shadow 트래픽 검증: 신규 모듈과 기존 프로시저를 병행 처리하여 결과 비교 검증
  • 4단계 이관 프로세스 실행: Phase 0(사전 준비) → Phase 1(도메인 모델링) → Phase 2(모듈 이관) → Phase 3(레거시 해체)를 통한 1년간의 점진적 전환

Impact

장애 원인 파악 속도가 획기적으로 빨라졌다. 반품 접수에서 완료까지의 리드타임을 정확히 추적할 수 있게 되었으며, 반품 완료 단계의 오류를 실시간으로 식별 가능해졌다.

Key Takeaway

커머스 같은 고가용성 시스템에서 거대 레거시를 탈출할 때는 전면 재구성보다 Strangler Pattern으로 무중단 점진적 전환하고, 모듈별 경계를 도메인 중심으로 재설계하면서 Fallback 메커니즘을 갖춰야 한다. 이는 기술 부채 해결이 고객 신뢰와 비즈니스 성장으로 직결됨을 보여주는 사례다.


레거시 PL/SQL 프로시저를 Java로 이관하는 상황에서 Strangler Pattern + Shadow 트래픽 검증 + Fallback 로직을 조합하면 24시간 운영 중단이 불가능한 환경에서도 무중단으로 기능 단위 마이그레이션을 진행할 수 있으며, 동시에 도메인 경계를 명확히 하여 향후 모듈별 기능 확장과 장애 대응 속도를 크게 개선할 수 있다.

원문 읽기