🍏 개발일기

스마트스토어센터 Oracle에서 MySQL로의 무중단 전환기를 읽으며...

보배 진 2026. 2. 17. 23:14

https://d2.naver.com/helloworld/6512234

 

여기서 전달하고자 하는 내용은

비싸고 느려진 Oracle을 싸고 가벼운 Mysql로 갈아탄 이야기를 전달하고자 하고 있다

근데 이제 서비스를 끊지 않고 갈아탄게 핵심이라고 볼 수 있다

 

원래 상황을 보면

스마스스토어 안에는 여러 팀이 있었다

ex) 회원 파트, 주문 파트, 상품 파트 등등

근데 이제 모두 같은 Oracle DB를 사용한다

 

 

 

문제 발생

서비스가 커지면서 DB에 요청이 폭주하고

ex) 회원 로그인, 주문 생성, 상품 조회, 이벤트 조회

중 하나의 DB가 버벅거리기 시작했다 ➡️ 리소스 경합 

👉 CPU/메모리/디스크/Lock 서로 싸움 

👉 서비스 느려짐, 장애 발생

 

 

 

Oracle을 계속 쓰면 안되는 이유

Oracle은 좋은 DB지만

라이선스 비용이 엄청 비쌈

서버 늘리면 ➡️ 돈 폭증

회사입장에서는 성능도 문제, 비용도 문제

 

그래서 선택한 것이 Mysql

Mysql의 특징

▪️무료 오픈소스

▪️Spring + MyBatis랑 잘 맞음

그래서 회원 파트DB만 Mysql로 분리 ➡️ DB 마이그레이션

 

 

 

근데 어려운 이유

10년짜리 레거시 프로젝트이기 때문에

▪️오래된 코드

▪️복잡한 쿼리

▪️Oracle 전용 문법

게다가 서브스 중단 없이 옮기는 부분이 젤 어려움

쇼핑몰이 돌아가고 있는데 DB를 바꿔야 함 ➡️ 무중단 전환 필요

 

 

 

 

핵심 전략 : 이중 쓰기

기존에는 Oracle에만 저장했는데 

새방식은 Oracle + MySQL 동시에 저장

ex) 회원 가입을 하면

INSERT → Oracle
INSERT → MySQL

두 DB 데이터 동일 유지.

 

왜 좋냐?  MySQL 테스트 가능, 문제 생기면 Oracle로 롤백

👉 서비스 안 멈춤

 

 

마이그레이션 단계

① 준비 단계

Oracle 계속 사용

MySQL에 백업처럼 같이 저장

 

② 데이터 복사

Oracle 전체 데이터를 Mysql로 옮김

 

③ 전환

이제 Mysql이 메인 DB 지만

Oracle에도 같이 저장

문제 생기면 다시 돌아가기 가능

 

 

 

기술적으로 어려운 부분

1. SQL 문법 차이

2. PK 방식 차이

3. JPA / MyBatis 같이 쓰기