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 같이 쓰기
'🍏 개발일기' 카테고리의 다른 글
| AWS 계정 삭제하는 방법 (0) | 2026.02.15 |
|---|---|
| 노랭이 96P 부터 시작 90번 ~ 100번 (0) | 2026.02.13 |
| DB 파티셔닝(Partitioning)이란? (0) | 2026.02.12 |
| private SqlSession sqlSession; 에 대해 분석해보았습니다 (0) | 2026.02.12 |
| 코드 분석 : 글 1번 클릭했을 때 전체 흐름 (0) | 2026.02.10 |