
백엔드
이커머스 플랫폼의 주문 DB 마이그레이션 경험기
두줄요약
Oracle 주문 DB를 MySQL로 이관하면서 모델과 ID 채번 방식을 함께 재설계했습니다. 읽기·쓰기 성능을 개선하고 정합성과 동시성 문제를 단계적으로 해결했습니다.
문제 상황
- 주문 DB를 Oracle에서 MySQL로 이관해야 하는 상황
- 기존 모델은 조회 시 17개 테이블 조인으로 성능 저하와 서버 부하 발생
- 주문 생성과 수정에서도 배포 호환성, 동시성, 정합성 이슈가 함께 존재
원인 분석
- Oracle 중심 모델이 읽기 성능에 불리하고 조인 비용이 과도함
- JSON 기반 비정규화는 저장 시 Jackson 직렬화·역직렬화 비용과 동시성 취약점이 존재
- JPA의 변경 감지, Auto Increment의 Batch Insert 비호환, 락 재진입 불가가 추가 문제로 작용
해결 방법
- 검색용 정규화 테이블과 조회용 비정규화 테이블을 함께 운용하는 모델 채택
- 명세 객체, 최소 연관 관계, 애그리게이션, 통합 테스트로 퍼시스턴스 레이어와 정합성 관리
- Snowflake 기반 자체 ID 채번, Redis 분산 락 재진입 지원, 단계적 dual write와 읽기 전환으로 마이그레이션 수행