프로젝트 개요
담당 서비스에서 사용하던 DBMS인 Cubrid를 걷어내고 MySQL로 전환
- 기존에 사용하던 Cubrid 9.3 버전은 이미 EOL(End of Life, 2023.03.31)이 지나 장기적인 유지보수가 어려운 상황이었음.
- DBA 팀에 따르면 상위 버전(10.x)으로의 업그레이드는 데이터 저장 방식과 구조 차이로 인해 마이그레이션 과정이 복잡하다는 판단이 있었음.
- 또한, DBA 팀의 인력 구성상 MySQL 운영이 더 수월하다는 현실적인 이유도 고려되었음.
- 서비스 유지보수 관점에서도, 레퍼런스가 풍부하고 다양한 빅테크 기업에서도 폭넓게 사용 중인 MySQL로 전환하는 것이 더 유리하다고 판단함.
진행 과정
1. MySQL용 쿼리 검증
MyBatis를 사용하고 있기 때문에, MySQL 운영을 위해서는 MySQL 쿼리 작성이 필수.
- 따라서 MySQL용 쿼리에 대한 쿼리 검증이 필수
- 검증 대상:
- 쿼리 문법 에러는 없는지
- 읽기의 경우, Cubrid와 동일한 결과값이 조회되는지
- 쓰기의 경우, Cubrid와 동일하게 데이터 변경이 발생했는지
2. Cubrid에서 MySQL로 데이터 마이그레이션
마이그레이션되는 동안 데이터 변경이 없도록 하기 위해, 서비스는 Read Only만 가능하게
- 사용자 요청이 가장 적은 새벽 시간대에 진행
- Read Only로 운영되는 시간을 최소화하기 위해, 마이그레이션에 걸리는 시간을 최소화 하는 방향을 생각
3. MySQL로 서비스 운영
혹시모를 Cubrid로의 롤백 상황을 대비해서 Cubrid에도 동일한 데이터 쌓는게 필요
- 양쪽 DB간의 최소한의 정합성 보장을 위해 Spring Data에서 제공하는
ChainedTransactionManager
(Deprecated됨) 사용하여 분산 트랜잭션 처리
4. Cubrid Fadeout
MySQL로 일정 기간동안 운영 후 이슈 없을시, Cubrid Fadeout
- 관련 소스 코드 모두 제거
- DB 서버 반납