본문 바로가기
Node js/Nest js 강의 내용

1. Nest js 기본 (간략하게 집고 넘어가보자)

by Bill Lab 2024. 12. 5.
728x90

Nest js 란?

: 카밀 미슬리비에츠가 개발한 "node js 의 웹 프레임워크"로, WAS framework 인 Express 또는 Fasity 기반으로

 OOP를 지향하며, 개발이 가능 하다.

 

 

Node js 란? (대부분 이미 알겠지만!)

: Javascript 의 런타임 환경으로 서버 사이드 개발을 지원 함

 

 

Node js 의 주요 특징은?

  1) 비동기 단일 쓰레드(여러 I/O를 병렬적으로 처리가능, 고성능 서버 구축)

  2) NPM(Node Package Manager) 를 이용하여 다양한 라이브러리를 쉽게 설치 및 사용 가능

  3) 빠른 처리속도(가볍다, 필요한 것만 설치해서 사용가능)  

  4) 모듈화

  5) 이벤트 기반 

  6) Javascript 기반

 

 

설치는? (version: LTS(v22.13.11))

https://nodejs.org/en

 

Node.js — Run JavaScript Everywhere

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

pnpm 사용시

(기존 npm, yarn 사용과 유사하지만 node_modules 폴더의 패키지가 중복으로 저장되지 않는다 - 글로벌 스토리지(cache)에 저장하여 사용)

npm install -g pnpm

 

 

그럼 왜 Nest js 인가?

  1) Node js 의 장점을 사용하여, OOP 개발이 가능(NPM + OOP + FP)

  2) 웹개발에 필요한 라이브러리 집합(NPM)을 프레임워크에서 바로 지원, 쉽게 사용 가능(개발 편의성)

  3) Typescript 기반의 개발가능(javascript 의 단점 보완)

  

 

Nest js 의 주요 구조

출처: nest 공식사이트

1) module

출처: nest 공식사이트

       - app.Module 을 중심으로 각 도메인별 모듈로 구성

       - 각 모듈에서 controller, service, provider 등을 관리하는 구조

 

  2) controller

출처: nest 공식사이트

 

      - Client Side(App, Web) 로 부터 http request 를 받은 router 역할 수행

      - Auth check( 1.Role(Authorization), 2.Token(Authentication))       

      - 특징, 라우팅 역할로써 관련된 비지니스 로직을 호출하여 return

       

  3) service

      - 비지니스 로직을 수행

      - 필요시 repository 호출

      - nest IoC Container 에서 관리(by @Injectable()

      

  4) repository

      - 영속성관리를 위해 ORM 과 연동하여 Data CRUD

      

  5) DTO(Data Transfer Object)

      - Layer 간의 이동시 전송하는 객체(Data 교환을 간소화하고 효율적으로 관리 목적)

      - static of 등의 명령어를 사용하여 layer간 data 변환 시 사용

        (service layer에선 주요 비지니스를 수행하는 관점에서 사용,

         data 변환은 DTO 내 static of 를 이용하여 간소화 및 재사용 증대 목적)

 

  6) Interface         

출처: nest 공식사이트

      - type을 미리 정의함으로써 type의 안정성을 보장

      - 공식문서의 예시는 controller로 부터 DTO로 전달받은 매개변수를 받는 type으로 사용

 

  7) entity(typeorm 기반일 경우)

      - Table 과의 mapping 을 담당

      - 컬럼 및 관계(@OneToMany 등)를 정의

 

  8) model(prisma 기반일 경우)

      - Table 과의 mapping 을 담당

      - 컬럼 및 관계를 db modeling 기반으로 정의

 

 

 

728x90