📌 이 글은 THE SOPT 30기 서버파트 3차 세미나에서 학습한 내용을 다룹니다.
NoSQL, SQL?
SQL
관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어
NoSQL
비관계형 데이터베이스로 비정형 데이터를 처리할 수 있는 유연한 스키마 제공
SQL vs NoSQL
SQL | NoSQL |
---|
규칙에 맞는 데이터 입력 | 자유로운 데이터 입력 |
테이블 간 JOIN 지원 | 컬렉션 간 JOIN 미지원 |
안정성, 일관성 중시 | 확장성, 가용성 |
Table, Row, Column | Collection, Document, Field |
수직적 확장 | 수직, 수평적 확장 |
NoSQL 특징
- 표준화된 구조적 질의 언어(ex. SQL)가 없음
- 관계를 갖지 않음
NoSQL 언제 쓰지?
- 데이터의 수정 보다는 조회가 더 많은 경우
- 비정형 데이터가 있는 경우 -> 유연한 구조
- 막대한 양의 트래픽을 다룰 경우 -> 수평적 확장
ex. 일관성이 중요한 은행 시스템 -> SQL
실시간 데이터 조회가 많은 SNS -> NoSQL
MongoDB
Document 지향 NoSQL 데이터베이스 시스템
JSON 형태의 동적 스키마형 document 사용
MongoDB 특징
Document
Document 기반으로 구성
Database -> Collection -> Document -> Field 계층
BASE
ACID 대신 BASE
RDBMS vs MongoDB

Document
- MongoDB에서 데이터를 저장하는 최소단위
- Document는 필드와 값의 쌍으로 구성
- 데이터 입출력 시에는 JSON 형식 사용, 저장 시에는 BSON(Binary JSON) 변환
- 관계를 갖는 데이터는 중첩 document, 배열 등을 사용해 1개의 document로 나타냄
BASE
- Basically Available (가용성)
- Soft State (소프트 상태)
- Eventually Consistent (결과적 일관성)
데이터 모델링
1:1

1:N


M:N

알아두면 좋은 Modeling Pattern
Extended Reference


Subset

Why?
- 다른 Collection에 있는 분리된 데이터
- 따라서 Join이 어렵다. 할 수는 있지만 쿼리로 인해 조회 성능이 떨어질 수 있다!
- 그렇기에 조회 성능을 높이기 위해 미리 보여지는 데이터를 내부에 저장하는 패턴
다만, Update 시 양쪽 모두 수정해야함
꼭 이 패턴을 사용할 필요는 없고, 상황에 따라 적용하시면 됩니다
Mongoose
- MongoDB ODM
- 비동기 환경에서 작동하도록 설계된 MongoDB 객체 모델링 도구
- Promise, Call back 지원
ODM vs ORM
ODM
- Object Document Mapping
- 객체와 Document를 매핑
ORM
- Object Relational Mapping
- 객체와 관계형 데이터베이스를 매핑
견고한 Node.js 프로젝트 설계
3-Layer Architecture

Controller
Model이 처리하기 전에 1차적으로 데이터 가공
비즈니스 로직 수행 후 다시 받은 데이터를 Response한다.
Service
Controller에서 받아온 데이터를 가지고 가공하여 DB에 접근해서 결과값을 받아온다.
이러한 데이터 가공 과정을 비즈니스 로직이라 함
Why?
- 독립적인 기능 수행
- 유지 보수
- 확장성, 유연성
How?
- 비즈니스 로직은 Service Layer로
- Service Layer는 req, res 객체를 받지 않음
- req, res는 Controller Layer에서만
예시



DTO
Data Transer Object
- 계층 간 데이터 교환을 위해 사용하는 객체
- Typescript에서는 Interface를 이용해 구현합니다.
- Request <-> Controller <-> Service Layer <-> Response의 데이터 교환
얼마전에 당근마켓 기술블로그에서 읽은 mongoDB 서버의 메모리 관리에 대한 이야기가 있어서 가져와봤어요 ^^ㅎ
https://medium.com/daangn/memory-allocator-for-mongodb-1953f9cee06c