-
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) // 해당 이름의 쿼리스트링
'NestJS > NestJS 기본강의' 카테고리의 다른 글
NestJS 기본강의 - 5. 권한 & 로그 & 설정 (0) 2022.07.11 NestJS 기본강의 - 4. 인증 (0) 2022.07.08 NestJS 기본강의 - 3. TypeORM (0) 2022.07.08 NestJS 기본강의 - 2. Pipe (0) 2022.07.07