NestJS 프로젝트 시작과 아키텍처 구조를 파악하다
1. NestJS 시작하는 명령어
NestJs는 명령어를 사용해서 프로젝트 구조를 만든다. 처음 프로젝트를 생성할 때, 특정 기능을 담을 모듈을 생성할 때.
NestJS 프로젝트를 생성하는 명령어는 다음과 같다.
npm i -g @nestjs/cli
nest new 프로젝트명
nestjs 클라이언트를 npm 명령어를 사용해서 다운받아준다. yarn 명령어로도 사용할 수 있는데 난 npm이 좋다.
Controller는 Express에서 라우터? 비슷한 기능을 하는 것 같다. Get(Handler) 안에 아무것도 없으니 '/'로 끝나는 주소에 요청을 보낸다. 그리고 appService의 getHello 함수에 접근한다.
appService의 getHello함수의 결과인 'Hello World'를 다시 Controller로 보내고 Controller가 그 결과를 응답한다.
1 - 1 Controller는 무엇인가
앞에서 컨트롤러에 대한 설명이 부족했다고 생각한다.
컨트롤러는 들어오는 요청을 처리하고 클라이언트에 응답을 반환한다.컨트롤러는 @Controller 데코레이터로 클래스를 데코레이션하여 정의한다. 데코레이터는 인자를 Controller에 의해서 처리되는 '경로'로 받는다.
컨트롤러 안에 있는 Get 이런건 뭐냐고 생각할 수 있는데 그건 'Handler'이다.
Handler는 HTTP 메서드 @Get, @Post, @Delete등과 같은 데코레이터로 장식된 컨트롤러 클래스 내의 단순한 메서드이다. Express에서도 Get, Post를 사용했듯이 뭐 비슷한 개념이라고 생각한다.
nest g controller boards --no-spec
위 nest 명령어를 사용하면 컨트롤러가 파일이 생성된다.
nest : using nestcli
g : generate (생성하다)
controller : 컨트롤러
boards : 컨트롤러명 자유롭게 작성
--no-spec : 테스트를 위한 소스 코드 생성 X
모듈이 미리 만들어져있는데 그냥 바로 밑에서 알려준다.
1 - 2. 새로운 모듈 생성하기
테스트 모듈을 없애고 새로운 모듈을 직접 만들어 보겠다. src폴더 내에서 app.module.ts와 main.ts 파일을 제외하고 모두 지워준다. 게시판 기능과 관련된 모듈을 생성하기 위해 boards 모듈 폴더를 nest 명령어를 사용해서 생성해보겠다.
nest g module 모듈명
나는 모듈명을 boards로 했다.
1 - 3. Providers, Service란
프로바이더는 NestJS의 기본 개념이다. 컨트롤러에서 필요한 많은 것들은 컨트롤러 내에서 기능 구현을 할 수 없다. 컨트롤러에서 요구하는 기능별로 서비스나 리포지토리, 팩토리, 헬퍼 등을 필요로 할 수 있다. 컨트롤러에서 사용할 수 있게 서비스를 종속성을 주입하는 것이다. 서비스는 프로바이더의 한 종류? 이다.
프로바이더를 사용하기 위해서는 Nest에 등록을 해야한다. 등록하는 것은 module 파일에서 할 수 있다. module 파일에서 providers 항목안에 해당 모듈에서 사용하고자 하는 Provider를 넣어주면 된다.
그럼 서비스는 무엇인가.
서비스는 소프트웨어 개발 내의 공통 개념이다. NestJS에서만 쓰이는 개념이 아니다. 서비스는 컨트롤러에서 데이터의 유효성을 체크하거나 데이터베이스에 아이템을 생성하는 등의 작업을 한다. @Injectable 데코레이터로 감싸져서 모듈에 제공되며, 이 서비스 인스턴스는 애플리케이션 전체에서 사용될 수 있다. Injectable에 감싸져있으므로 여러 컨트롤러에서 사용할 수 있다. 서비스를 컨트롤러에서 사용할 때 바로 사용할 수 있는 것이 아니다. 종속성을 주입해줘야하는데 그게 Dependency Injection이다. 종속성을 주입하는 방법은 Service 만들기 글에서 더 자세히 다루겠다.
'Back-End > NestJS' 카테고리의 다른 글
[NestJS] DTO 만들기 (0) | 2024.01.09 |
---|---|
[NestJS] 게시물 생성하는 Service, Controller 생성 (Request, Response) (0) | 2024.01.08 |
[NestJS] model 생성하기 (게시물) (0) | 2024.01.07 |
[NestJS] Service 생성 (0) | 2024.01.05 |
[NestJS] NestJS란 무엇일까 (0) | 2024.01.03 |