현재 프로젝트의 주요 도메인인 사용자, 관심사, 뉴스 기사, 댓글, 알림은
데이터 구조가 명확하고 관계가 뚜렷하기 때문에 RDB가 적합하다.
반면, 사용자 활동 내역은 다음과 같은 특징을 가진다.
이 경우 RDB로 구현하면 다음과 같은 문제가 발생한다.
SELECT ...
FROM users
JOIN user_interests
JOIN comments
JOIN comment_likes
JOIN news_articles
...
→ 다수의 JOIN + 집계 쿼리 발생
→ 조회 비용 증가
MongoDB는 JSON 기반 문서형 DB로, 데이터를 한 번에 묶어서 저장할 수 있다.
{
"userId": "uuid",
"activities": [
{
"type": "ARTICLE_VIEW",
"articleTitle": "2026년 IT 전망",
"content": "기사 조회",
"createdAt": "..."
},
{
"type": "COMMENT",
"articleId": "...",
"content": "좋은 기사네요",
"createdAt": "..."
}
]
}
MongoDB는
👉 조회 성능 최적화를 위한 비정규화 저장소로 사용
NoSQL이라고 해서 모두 같은 목적이 아니다.
👉 현재 요구사항(영구 활동 저장)과 맞지 않음
👉 현재 프로젝트 규모 대비 과한 선택
👉 MongoDB가 가장 적절한 선택
정규화는 데이터를 최소 단위로 나누는 방식이다.
하지만 조회 성능 관점에서는 단점이 존재한다.
news_articles 테이블에 comment_count 컬럼 추가👉 이것이 비정규화(= 역정규화)
👉 사용자 활동 내역을 MongoDB에 통째로 저장
현재 단계에서의 목적:
👉 로컬 개발 환경 통일