프로젝트에서 어떤 DB를 사용할까? (2)
서론
이전 포스트에서 여러 데이터베이스들의 차이점과 각 DB
의 장단점에 대해서 알아보았다. 각 DB
의 특성을 고려하여 이번 프로젝트에서 사용하기로 한 DB
는 MongoDB
와 Elasticsearch
이다. 왜 이 두 데이터베이스를 선택했는지 알아보도록 하자.
선택 이유
MongoDB
MongoDB
는 저번 글에서도 알아봤듯이, 문서 지향적 특성과 스키마 유연성을 통해 빠른 개발과 효율적인 데이터 처리를 가능하게 한다.
특히 문서 특성상 유연한 스키마 구조를 가질 수 있기 때문에 커뮤니티
, 퀴즈
, 챗봇 로그
와 같이 구조가 다양하고 변화 가능성이 높은 데이터를 다루는 현재 프로젝트에서 RDB
대비 명확한 장점을 가진다. 배열, 중첩 구조 저장이 용이하며, 향후 기능 확장 시 스키마 변경 없이 새로운 필드를 추가할 수 있어 개발 생산성이 높다.
그리고 정책
, 청약
, 뉴스
는 각각 제목, 본문, 이미지, 날짜 등으로 구성된 문서 단위
콘텐츠로, MongoDB
의 JSON
문서 저장 방식에 최적화 되어있기 때문에 MongoDB
를 선택하였다.
그럼 이제 전체적으로 MongoDB
를 선택한 이유를 알아봤으니, 서비스별로 MongoDB
를 사용했을 때의 이점에 대해 알아보자.
커뮤니티 - 유연한 스키마 설계
- JSON-like 문서 단위로 저장하여 각 게시글이 필요로 하는 필드만 가변적으로 추가·제거 가능
- 개발 속도 향상과 유지보수 용이성 확보
- 문서 단위의 원자적 업데이트
- 좋아요 수, 조회 수, 댓글 수 등의 카운터를 updateOne({ _id }, { $inc: { likeCount: 1 }})
한 줄로 처리
- RDBMS
의 복잡한 JOIN → UPDATE
과정을 단순화
- 조인 없는 빠른 조회
- 댓글을 게시글 문서 내에 포함시켜 단일 쿼리로 처리
- "특정 게시판의 최신 글", "내가 올린 글 + 댓글" 등의 조회를 네트워크 왕복 비용 없이 최적화
퀴즈 - 다양한 문제 형식 지원
- 현재 O / X
퀴즈만을 제공하고 있는데, MongoDB
는 스키마 변경 없이 다양한 문항 유형과 필드 구조를 지원하기 때문에 이후 객관식, 서술형 등의 퀴즈 추가 가능
- 간편한 CRUD
운영
- 문제·답·해설을 하나의 문서로 관리 가능
- JOIN
없이 find·insert·update·delete
연산만으로 완전한 CRUD
구현
스터디봇(챗봇) - 뛰어난 쓰기 성능
- BSON
(Binary JSON) 형태로 직접 저장하여 스키마 매핑이나 조인 없이 즉시 처리
- 대량의 로그 데이터 삽입·갱신 시 MySQL
대비 현저히 빠른 처리량
- 최적화된 읽기 패턴
- 챗봇 메시지 로그의 단순 쓰기와 최근 대화 스레드 조회 패턴에 최적화
- 키·타임스탬프 기반 조회에서 낮은 레이턴시와 높은 처리량 제공
- AI
응답 구조 변화 대응
- AI
챗봇의 응답 JSON
구조가 변경되어도 스키마 수정 없이 유연하게 대응
- 메타데이터 필드를 동적으로 추가 가능
회원 정보 - 다양한 사용자 데이터 통합 관리
- 기본 식별자, 로그인 정보, 소셜 로그인 정보, 개인 정보(성별, 직업, 수입) 등을 하나의 문서에 저장
- 사용자별로 다른 속성을 가져도 유연하게 처리
- 확장성과 성능
- Sharding
, Clustering
을 통한 수평적 확장(Scale-Out
) 지원
- 사용자 증가에 따른 트래픽 증가에 효과적으로 대응