꾸준하게

MySQL에서 SQLite로 마이그레이션 한 이유 본문

테크/나르지지

MySQL에서 SQLite로 마이그레이션 한 이유

changha. 2025. 11. 15. 17:45

상황 설명 

개인 프로젝트인 NAR.GG 서비스 DB는 MySQL로 AWS RDS 설정을 하였습니다. 

하지만 RDS 과금이 생각보다 많이 나갔습니다. 총 6만 원 가까이 지출하게 되었습니다..😱

 

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

AWS 고객센터에 혹시 몰라 환불요청도 해봤다(거절..)

 

굳이 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를 만들어보며 내부 동작방식을 살펴보려고 합니다.