[Sopt] 3차 세미나(1) - MongoDB, Mongoose, 견고한 NodeJS Project
MongoDB
🔎 MongoDB란?
Document 지향 NoSQL 데이터베이스 시스템으로, JSON 형태의 동적 스키마형 document를 사용한다.
Document 기반으로 구성되어있으며 Database - Collection - Document - Field 계층으로 구성되어있다.
🔎 Document란?
- MongoDB에서 데이터를 저장하는 최소 단위
- 필드와 값의 쌍으로 구성된다.
- 데이터 입출력 시에는 JSON 형식을 사용하고, 저장 시에는 BSON(Binary JSON)을 반환한다.
- 관계를 갖는 데이터는 중첩 document, 배열 등을 사용하여 1개의 document로 나타낸다.
🔎 Reference 방식
1:1
1:N , 1이 N을 참조
1:N, N이 1을 참조
N:M
Mongoose
🔎 Mongoose란?
MongoDB ODM으로 비동기 환경에서 작동하도록 설계된 MongoDB의 객체 모델링 도구이다.
Promise, Call back을 지원한다.
🔎 ODM vs ORM?
ODM: Object Document Mapping - 객체와 Document 를 매핑
ORM: Object Relational Mapping - 객체와 관계형 데이터베이스를 매핑
견고한 NodeJS Project
🔎 3-Layer Architecture?
비즈니스 로직을 Route Controller에서 분리해준다.
Controller 는 Model 이 처리하기 전에 1차적으로 데이터를 가공하는 곳으로,
비즈니스 로직 수행 후에 다시 받은 데이터를 Response 한다.
Service 는 Controller 에서 받아온 데이터를 가지고 가공하여 DB에 접근해서 결과값을 받아온다.
이러한 데이터 가공 과정을 비즈니스 로직이라고 한다.
🔎 Why? How?
Why?
- 독립적인 기능 수행이 가능해지고
- 유지 보수가 쉬워지며
- 확장성, 유연성을 보장한다.
How?
- 비즈니스 로직은 Service Layer로
- Service Layer는 req, res 객체를 받지 않는다.
- req, res는 Controller Layer에서만 받도록 한다.
🔎 예시
나쁜 예시! 😡
- 모두 Route Controller에서 실행 되고 있다!
1) req, res 가공 로직
2) Model에 접근하여 user data 를 받아오는 로직
3) res 반환 로직
좋은 예시!😊😊
UserService. ts
- Service Layer에서는 비즈니스 로직만!
- Controller 한테 받은 데이터로 DB Access 만
UserController.ts
- 클라이언트한테 받은 데이터(req)를 가공
- Service를 호출하여 -> 비즈니스 로직 -> 결과값 받아오기
- response를 가공하여 반환하기
🔎 DTO
Data Transfer Object로 말 그대로 계층 간 데이터 교환을 위해 사용되는 객체이다.
Typescript 에서는 Interface를 이용하여 구현한다.
Request - Controller - Service Layer - Response 간에서 데이터를 교환할 때 사용 된다.