ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NestJS 기본강의 - 1. 시작
    NestJS/NestJS 기본강의 2022. 7. 7. 15:22

    Nest JS 란?

    - 효율적이고 확장 가능한 Node.js 서버 측 애플리케이션을 구축하기 위한 프레임 워크

    - 프로그레시브 JavaScript를 사용하고 TypeScript로 빌드되고 완벽하게 지원

    - OPP( Object Oriented Programming ), FP ( Functional Programming ) 및 FRP ( Functional Reactive Programming ) 요소를 사용 가능

    - Express를 토대로 만들어짐


    - nestjs 설치

    npm i -g @nestjs/cli

    - nest프로젝트 생성

    nest new project-name

    NestCLI로 생성한 프로젝트 기본 구조

    eslintrc.js - 개발자들이 특정한 규칙을 가지고 코드를 깔끔하게 짤수있게 도와주는 라이브러리
    - 타입스크립트를 쓰는 가이드 라인 제시, 문법 오류가 나면 알려주는 역할 등등
    prettierrc - 주로 코드 형식을 맞추는데 사용
    - 작은따옴표를 사용하지 큰따옴표를 사용할지, Indent 값을 2로 줄지 4로 줄지 등등, 에러 찾는 것이 아닌 코드 포맷터 역할
    nest-cli.json nest 프로젝트를 위해 특정한 설정을 할 수 있는 json 파일
    tsconfig.json 어떻게 타입스크립트를 컴파일 할지 설정
    tsconfig.build.json - tsconfig.json의 연장선상 파일이며, build를 할 때 필요한 설정들
    - "excludes" 에서는 빌드할 때 필요없는 파일들 명시
    package.json - build : 운영환경을 위한 빌드
    - format : 린트에러가 났을지 수정
    - start : 앱 시작
    src 폴더 main.ts 앱을 생성하고 실행
    app.module.ts 앱 모듈을 정의

    Nest JS 모듈이란?

    - 모듈은 @Module () 데코레이터로 주석이 달린 클래스이다.

    - @Module () 데코레이터는 Nest가 애플리케이션 구조를 구성하는 데 사용하는 메타 데이터를 제공

    - 모듈은 밀접하게 관련된 기능 집합으로 구성 요소를 구성하는 효과적인 방법 ( 기능별로 만듬 )

    - 같은 기능에 해당하는 것들은 하나의 모듈 폴더안에 넣어서 사용

    - 모듈은 기본적으로 싱글 톤이므로 여러 모듈간에 쉽게 공급자의 동일한 인스턴스를 공유

     

    -  모듈 생성 명령어

    nest g module boards

     

    Controller 란?

    - 컨트롤러는 들오는 요청을 처리하고 클라이언트에 반환

    - 컨트롤러는 @Controller 데코레이터로 클래스를 데코레이션하여 정의

    - 데코레이터는 인자를 Controller에 의해서 처리되는 "경로"로 받는다

     

    Handle 란?

    - 핸들러는 @Get, @Post, @Delete 등과 같은 데코레이터로 장식된 컨트롤러 클래스 내의 단순한 메서드

     

    - controller 생성

    nest g contoller boards --no-spec

    1. CLI는 먼저 boards 폴더를 찾는다

    2. boards 폴더 안에 controller 파일 생성

    3. boards 폴더 안에 module 파일 찾기

    4. module 파일 안에다가 controller 넣어주기

     

    Providers 란?

    - 프로바이더는 Nest의 기본 개념이다

    - 대부분의 기본 Nest 클래스는 서비스, 리포지토리, 팩토리, 헬퍼 등 프로바이더로 취급될 수 있다

    - 프로바이더의 주요 아이디어는 종속성으로 주입이 가능

    - 즉, 객체는 서로 다양한 관계를 만들 수 있으며, 객체의 인스턴스를 "연결"하는 기능은 대부분 Nest 런타임 시스템에 위임될 수 있다.

     

    Service 란?

    - 서비스는 소프트웨어 개발내의 공통개념

    - @Injectable 데코레이터로 감싸져서 모듈에 제공되며, 이 서비스 인스턴스는 애플리케이션 전체에서 사용

    - 서비스는 컨트롤러에서 데이터의 유효성 체크를 하거나 데이터베이스에 아이템을 생성하는 등의 작업을 하는 부분을 처리한다.

     

    - Provider 등록하기

    : module파일에 providers 항목안에 해당 모듈에서 사용하고자 하는 Provider를 넣어준다. 

     

    - Service 만들기

    nest g service boards --no-spec

     

    DI

    @Controller
    export class BoardsController {
        boardsService: BoardsService;
        
        constructor(boardsService: BoadsService) {
            this.boardsService = boardsService;
        }
    }

    - Typescript의 도움을 받는다면?

    @Controller
    export class BoardsController {
        constructor(private boardsService: BoadsService) {}
    }

    - 자바스크립트에서는 private 같은 접근 제한자(Access modifier)를 사용할 수 없지만 TS에서는 가능

    - 접근 제한자(public, protected, private)을 생성자(constructor) 파라미터에 선언하면 접근 제한자가 사용된 생성자 파라미터는 암묵적으로 클래스 프로퍼티로 선언 

     

     

    NestJS에서는 @Body body를 이용해서 가져온다

    - 이렇게하면 모든 request에서 보내온 값을 가져올 수 있으며, 하나씩 가져오려면 @Body('title') title 혹은 @Body('description') description 이런식으로 가져오면 된다.

     

     

    DTO ( Data Transfer Object ) 는 무엇인가?

    - 계층간 데이터 교환을 위한 객체

    - DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체

    - DTO는 데이터가 네트워크를 통해 전송되는 방법을 정의하는 객체

    - interface나 class를 이용해서 정의될 수 있다 ( 하지만 클래스를 이용하는 것을 NestJS에서는 추천 )

    ( 클래스는 인터페이스와 다르게 런타임에서 작동하기 때문에 파이프 같은 기능을 이용할 때 더 유용 )

     

    DTO를 쓰는 이유

    - 데이터 유효성을 체크하는 효율적

    - 더 안정적인 코드, 타입스크립트의 타입으로도 사용

     

    쿼리스트링 받기

    findOne(@Param() params: string[])	// 쿼리스트링 여러개
    findOne(@Param('id') id: string)	// 해당 이름의 쿼리스트링

     

    댓글

Designed by Tistory.