꾸준하게
MySQL에서 SQLite로 마이그레이션 한 이유 본문
상황 설명
개인 프로젝트인 NAR.GG 서비스 DB는 MySQL로 AWS RDS 설정을 하였습니다.
하지만 RDS 과금이 생각보다 많이 나갔습니다. 총 6만 원 가까이 지출하게 되었습니다..😱

위 상황에서 일단 RDS를 무조건적으로 없애야 됐습니다. (안그래도 용돈 받는 입장에서 6만 원씩 지출되는 건 타격이 크다.)

굳이 MySQL을 고집해야하나??
RDS가 아니라면 EC2인스턴스에 Docker로 MySQL을 올리는 게 최선인 방법 같았습니다.
그러면 안 그래도 1GB밖에 안 되는 스프링인스턴스에서 더 쪼개서 반반 사용해야 됐습니다.

MySQL의 용량을 최대한 최적화하기 위해 튜닝을 해야 하나 생각도 들었습니다.
어떻게 해야 될지 정확히 확신이 안 서 개발자 커뮤니티에 제 상황을 적어서 의견을 구했습니다.

위 분께서 경량 서버가 필요한 경우에는 SQLite를 얘기해 주셨습니다.
그때,,,, 딱 생각이 들었습니다.
굳이 MySQL을 써야 하나?
제 서비스 특성상 모든 기능들은 단순 조회뿐입니다.
프로경기 데이터를 가공해서 챔피언 조합 또는 경기 데이터를 보여주는 서비스입니다.
이 상황에서 SQLite는 충분히 괜찮은 선택지 일 수 있겠다 느낌이 왔습니다.
SQLite의 장점
그럼 SQLite이 정말 저희 서비스 DB로 적합한지 로컬에서 직접 마이그레이션을 해보았습니다.

SQLite는 메모리가 아닌 디스크에서 관리되기 때문에 메모리 용량 걱정은 안 해도 됩니다.
그리고 EC2에서 제공하는 디스크 스토리지는 최대 20 GiB까지 허용하도록 설정해 놓았으니 괜찮다고 판단하였습니다.
MySQL(InnoDB)은 대용량 데이터를 빠르게 처리하기 위해 큰 버퍼 풀을 사용하며, 512MB RAM VM에서도 돌아가도록 기본설정이 되어있습니다.
반면 SQLite는 기본적으로 약 2MB 정도의 페이지 캐시만 사용하도록 설정되어 있으며, 나머지는 운영체제의 파일 시스템 캐시에 의존하기 때문에 메모리 사용량이 매우 작습니다.


또 하나의 장점은 빠른 속도입니다.
SQLite는 내부적으로 B-tree를 통해 인덱싱이 되어있습니다.
이는 MySQL와 유사하기 때문에 충분히 조회에서 응답속도 강점을 드러낼 수 있습니다.
또한 SQLite는 단일 DB 파일과 WAL/저널만 관리하면 되기 때문에, 쓰기 한 번이 거치는 계층이 얕고, OS 페이지 캐시에 강하게 의존하는 설계라 단일 프로세스·저동시성에서 쓰기/읽기 모두 경로가 짧습니다.
응답속도가 정말 차이가 나는지 SQLite와 MySQL을 비교하여 직접 테스트해보았습니다.
1. 10만건 배치처리 실행시간 비교
MySQL
2025-11-17T12:25:43.894+09:00 INFO 1 --- [nio-8080-exec-2] c.toy.nar.common.filter.LoggingFilter : [END] Request ID: c084e3b2, Status: 200, Duration: 136139ms
SQLite
2025-11-17T12:32:54.854+09:00 INFO 1 --- [nio-8080-exec-8] c.toy.nar.common.filter.LoggingFilter : [END] Request ID: c77df5ca, Status: 200, Duration: 29014ms
동일한 배치처리 과정에 대해 SQLite가 약 5배정도 빠르다는 것을 확인하였습니다.
2. 조합 서비스 조회 API 응답속도 비교
[대략 700개 샘플, 동시 20명의 요청 스레드로 통일]
MySQL

SQLite

이부분에서도 SQLite가 압도적으로 빠르다는 것을 확인하였습니다.
결론
가장 고민이었던 과금 문제를 해결한 것이 큰 성과였습니다. 🎉
이번 경험을 통해 관습적인 기술 선택이 아니라 내 상황에 맞는 기술을 선택하는 것이 중요하다는 것을 느꼈습니다.
그리고 그러려면 평소 해당 기술들의 장단점을 충분히 이해하고 있어야 적재적소에 활용할 수 있을 것 같습니다.
향 후 계획은
SQLite에 대해 더 자세히 알아보기 위해 간단한 SQLite를 만들어보며 내부 동작방식을 살펴보려고 합니다.
'테크 > 나르지지' 카테고리의 다른 글
| 2026년 새해맞이 나르지지 방향성 🔥🐴 (1) | 2026.01.03 |
|---|---|
| SQLite와 MySQL 동시쓰기 비교해보기 (0) | 2025.12.05 |
| 반복되는 일정 서비스 API콜에 대한 캐시 적용 및 전략 (3) | 2025.08.15 |
| DTO 프로젝션을 활용한 일정 서비스 성능 개선 (2) | 2025.08.15 |
| 8만 건 데이터 DB 마이그레이션 자동화 구축 (4) | 2025.08.06 |