Homeprotector

프로젝트에서 어떤 DB를 사용할까? (2)

seoshinehyo 2025. 5. 25. 22:43

서론

이전 포스트에서 여러 데이터베이스들의 차이점과 각 DB의 장단점에 대해서 알아보았다. 각 DB의 특성을 고려하여 이번 프로젝트에서 사용하기로 한 DBMongoDBElasticsearch이다. 왜 이 두 데이터베이스를 선택했는지 알아보도록 하자.


선택 이유

MongoDB

MongoDB는 저번 글에서도 알아봤듯이, 문서 지향적 특성과 스키마 유연성을 통해 빠른 개발과 효율적인 데이터 처리를 가능하게 한다.

특히 문서 특성상 유연한 스키마 구조를 가질 수 있기 때문에 커뮤니티, 퀴즈, 챗봇 로그와 같이 구조가 다양하고 변화 가능성이 높은 데이터를 다루는 현재 프로젝트에서 RDB 대비 명확한 장점을 가진다. 배열, 중첩 구조 저장이 용이하며, 향후 기능 확장 시 스키마 변경 없이 새로운 필드를 추가할 수 있어 개발 생산성이 높다.

그리고 정책, 청약, 뉴스는 각각 제목, 본문, 이미지, 날짜 등으로 구성된 문서 단위 콘텐츠로, MongoDBJSON 문서 저장 방식에 최적화 되어있기 때문에 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) 지원
- 사용자 증가에 따른 트래픽 증가에 효과적으로 대응