찔끔찔끔씩😎

[Sopt] 3차 세미나(1) - MongoDB, Mongoose, 견고한 NodeJS Project 본문

Server/Nodejs

[Sopt] 3차 세미나(1) - MongoDB, Mongoose, 견고한 NodeJS Project

댕경 2022. 5. 17. 00:47
728x90

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 간에서 데이터를 교환할 때 사용 된다.

 

 

Comments