문제 상황
본 프로젝트에서 DB에 적재해야 하는 테이블은 member, keyword, post, comment 등이 있다. 다양한 뉴스 채널의 실시간 속보 데이터를 수집 및 가공하여 제공하는 본 프로젝트의 특성상 관계형 데이터베이스(RDB)와 비관계형 데이터베이스(NoSQL) 모두 고려했다.
제안
MySQL
- S3 인스턴스 상에서 컨테이너로 구동
- 팀원 모두에게 익숙하여 학습 및 운영 리소스 절감 기대
- 프로젝트에서 요구되는 정합성 및 트랜잭션 처리에 적합한 구조를 제공
장단점
장점
- 팀원들이 MySQL에 익숙하여 빠른 개발 및 유지보수가 가능함
- 트랜잭션, JOIN, 정규화된 데이터 모델링 등 관계형 데이터베이스의 특성을 활용할 수 있음
- 다양한 문서와 커뮤니티가 존재하여 문제 해결이 용이함
- 컨테이너화가 용이하여 S3 환경에서도 유연하게 운영 가능함
단점
- 수평 확장성이 제한적이며, 대규모 트래픽 처리 시 성능 튜닝이 필요할 수 있음
- NoSQL에 비해 유연한 스키마 변경이 어렵고, 비정형 데이터를 저장하기엔 부적합함
대안
- 대안1: MongoDB 등 NoSQL 기반 데이터베이스 사용
- 스키마 유연성이 크고, 실시간으로 쌓이는 본 프로젝트 데이터 일부에 적합하지만 정합성과 관계 모델링에 불리함
- 대안2: PostgreSQL
- MySQL과 유사한 관계형 데이터베이스이지만, 팀 내 숙련도가 낮아 추가 학습 리소스가 필요함
최종 채택 및 차후 과제
- 채택
- Mysql 사용
- 차후 과제
- 데이터베이스 구축
- 데이터 파이프 라인을 기반으로 DB에 적재할 데이터와 캐싱할 데이터 구분
'kkokkio - 프로젝트 > ADR(의사결정문서)' 카테고리의 다른 글
Flyway (1) | 2025.06.11 |
---|---|
Swagger (0) | 2025.06.11 |
Spring Security + JWT (0) | 2025.06.11 |
Terraform 도입 (0) | 2025.06.02 |
Doppler 도입 (0) | 2025.06.02 |