[#1] mongoDB 도입기
들어가기에 앞서
프로젝트의 기획 배경은 다음과 같다.
기존 사이트의 직관적이지 못한 UI
가장 인기 있는 영상 파악의 어려움
나에게 적합한 지, 역할(직무)별로 적합한 지 알기 어려움
대부분이 영어로 되어 있어, 제목 또는 소개를 통해 컨텐츠가 어떤 내용을 내포하는지 알기 어려움
컨텐츠 이용 혹은 영상을 들으며 생기는 질문을 실시간으로 대응해줄 수 있는 시스템의 부재
기획 배경을 바탕으로 우리 팀은 직관적인 페이지로 사용자들의 접근성 낮추고, 일회성 학습이 아닌, 동기를 부여하여 사이트를 계속 방문 하게끔 하는 학습 플랫폼을 기획하게 되었다.
이 목표를 위해 우리 팀은 다음과 같은 기능을 제공하기로 하였다.
- 현재 내 상황에 맞춘
컨텐츠 추천 챗봇
- 실시간으로 궁금증을 해결할 수 있는
QnA 챗봇
- 강의 검색 시 오타 교정 및 자동완성 기능을 통한
간편 강의 검색
- QNA, 강의 소개, 서비스 소개 DB를 연동한 RAG 시스템으로
구체적이고 정확한 답변 제공
- 로드맵 및 강의 현황 대시보드 기능으로
학습 지속성 향상
mongoDB를 도입해보자꾸나
우리 서비스는 크롤링 한 강의 데이터와 FAQ 데이터, 사용자가 챗봇 서비스 이용 시 입력했던 채팅 기록 등을 저장해야 했다. 우리팀은 각 도메인마다의 다양한 데이터 성격을 고려해 기존에 사용해본 경험이 있는 MySQL, Redis 외에 추가적으로 mongoDB를 도입하기로 하였다.
여기서 mongoDB란?
- mongoDB란 document 지향적인 데이터베이스이다. document는 아래와 그림과 같이 field와 value 쌍으로 구성된 데이터 구조이다. field의 vaule에는 다른 document나 document 배열 혹은 배열을 저장하는 것도 가능하다.
- mongoDB는 스키마를 고정하지 않은 형태(Schema-less 구조)이다. 이러한 특징으로 필드 추가 및 제거가 간편하고, 분산 확장이 간단하다.
참고 링크 : mongoDB 공식문서 | mongoDB vs Redis
MongoDB를 도입한 이유는 강의 데이터가 일관적이지 않기 때문이다.
요약된 정보만 제공하는 강의가 있고, 활동이나 목표 등 추가적인 정보를 제공하는 강의가 존재한다. 어떤 강의는 보유하고 있는 데이터를 다른 특정 강의는 가지고 있지 않을 수 있는데, 이럴 경우 데이터에 대한 관리가 힘들 뿐더러 null 데이터에 대한 여러 검증 작업이 필요할 것이다. 따라서, MongoDB를 도입해 각 document마다 다른 field를 가지고 있을 수 있도록 하였다.