프로덕션 서비스에서 무중단 테이블 분리

inho ha·2024년 6월 25일
0

swatchon

목록 보기
4/4

서울의 한 월요일.
장바구니 테이블을 분리하는 작업을 담당하게 되었습니다.

장바구니 테이블

장바구니 테이블은 고객이 주문할 상품을 담아두는 테이블입니다.
장바구니 테이블에는 샘플 상품일반 상품이 함께 담겨있습니다.
샘플 상품에 대한 정책 변경으로 장바구니 테이블에서 샘플 상품일반 상품을 분리하는 작업을 진행하게 되었습니다.

테이블 분리 작업

  • 샘플 장바구니 테이블을 생성
  • 장바구니 테이블샘플 상품 데이터샘플 장바구니 테이블로 이동
  • 장바구니 서비스 로직장바구니 로직샘플 장바구니 로직으로 분리

크게 보면 위 3가지 작업이 필요합니다.
서비스의 중단 없이 위 작업을 진행하려면 작업을 좀 더 작게 쪼개어 진행해야 합니다.

무중단 마이그레이션

변경된 로직을 배포하면 즉시 변경된 로직으로 동작합니다.
테이블의 데이터를 다른 테이블로 이동시키는 작업은 시간이 소요되는 작업입니다.

따라서 샘플 장바구니 테이블을 사용하는 샘플 장바구니 로직이 적용되었지만, 샘플 장바구니 테이블의 데이터는 없는 상황이 발생 가능합니다.

고객이 비어있는 장바구니를 보고 당황하는 일이 발생하지 않도록 주의하여 배포해야 합니다.

배포 시나리오

  1. 샘플 장바구니 테이블 생성
  2. 샘플 상품 데이터삽입 삭제 업데이트장바구니 테이블샘플 장바구니 테이블 모두 삽입 삭제 업데이트 하는 로직 코드 배포
  3. 로직 배포 이전에 장바구니 테이블에 있는 샘플 상품 데이터샘플 장바구니 테이블에 복제하는 스크립트 실행
  4. 장바구니 로직샘플 장바구니 로직 분리 코드 배포
  5. 장바구니 테이블에 있는 샘플 상품 데이터 삭제 스크립트 실행

1, 2번 작업을 통해서 새로운 데이터가 새로운 테이블에도 저장되도록 하였습니다.
이후 3번 작업으로 기존 데이터가 새로운 테이블에 저장되도록 하여 데이터 이전 작업을 마쳤습니다.

결과

간단한 데이터 마이그레이션 작업은 여러 번 해보았지만, 테이블을 분리하는 규모의 작업은 처음이라 조심스러웠습니다.
배포 시나리오를 먼저 작성하고 팀원들에게 공유하여 예상되는 문제가 있을지 확인하고, staging 서버에서 QA를 통해 확인하여 진행하였습니다.

그 결과 서비스 중단 없이 안정적으로 테이블 분리 작업을 완료했습니다!

profile
inho ha / ian(swatchon) / iha(42seoul)

0개의 댓글