사이드 프로젝트에서 데이터베이스 선택하기
조금씩 끄적이고 있는 사이드 프로젝트가 있다. 정부에서 제공하는 Open API 를 통해 데이터를 모은 다음, 조금 더 편리하게 보여줄 수 있는 웹 사이트나 어플리케이션을 만들 생각이다. API 를 연동할 수 있는 클라이언트와 매일 새로 생겨나는 데이터를 저장할 배치 잡을 포함한 프로토타입이 완성되어 AWS 환경에 배포를 해보려고 조금 공부를 해 보았는데 몇 가지 문제가 생겼다.
이 프로젝트가 돈을 벌 수 있을지 아닐지 모르지만 수익이 없더라도 개인적인 목적으로도 활용할 여지가 있기에 오랫동안 유지할 수 있는 서비스이길 원하므로 최대한 비용 효율적으로 어플리케이션을 구성해야 했다. 직장에서야 매니지드 K8S 환경에 데이터베이스도 성능이나 비즈니스 적합도만 고민하면서 고르면 되었지만 이건 내 지갑에서 달러가 나가는 문제이다보니 기술 선택에 있어 비용이라는 새로운 변수가 하나 생긴 셈이다.
프로토타입은 가장 익숙한 Spring 기반으로 MySQL이나 PostgresQL 과 같은 RDB 를 쓰지 않을까 했는데 요금을 보고 다른 데이터베이스를 사용해야겠다는 생각이 들었다. 2023년 10월 기준으로 AWS에서는 RDS라는 이름으로 관계형 데이터베이스 서비스를 제공하고 있다.
구성에 따라 조금씩 다르지만 가장 저렴하게 구성했을 때 예시로 MySQL 호환 Aurora 를 t2.small 인스턴스를 사용해 한달동안 사용하면 대략 30달러의 비용이 소요된다. 요즘 환율 기준으로 대략 4만원 정도가 드는 셈인데 트래픽도 거의 없을 프로젝트에 서버 인스턴스를 제외하고 순수 DB 비용으로만 월 4만원을 지출하는 건 낭비라고 생각했다.
인스턴스가 항상 떠 있어야 하는 다른 RDB 서비스나 Mongodb 호환 DocumentDB 도 비용은 비슷한 것 같아서 DynamoDB를 사용해보기로 했다. DynamoDB 의 장점은 서버리스 서비스이기 때문에 인스턴스가 필요가 없어 요금이 저렴하다는 점이다. 지금 만들고 있는 것 같은 소규모 프로젝트는 초기에는 프로덕션 환경에서도 트래픽이 거의 없을 것이기 때문에 제로 스케일링시 요금을 거의 내지 않는것도 가능하다.
다만, 단점은 AWS 종속적인 서비스이기 떄문에 AWS에서 제공하는 SDK 외에는 Spring 을 비롯한 프레임워크와 통합하려면 다소 품이 든다는 점이다. 공식적으로 Spring Data 에서 DynamoDB 바인딩을 지원하고 있지는 않기 때문에 서드파티 패키지를 사용하거나 직접 구현해야 하는 부분들이 존재한다. 하지만 NoSQL 데이터베이스를 사용할 때 Spring Data 에서 제공하는 기능의 장점이 얼마나 있을까에 대해서는 조금 의문이 있기도 해서 일단은 도전해 볼 생각이다.