scratch에서 시작한다.
Nest 기초
시작 및 설치하기
npm init -y 로 package.json 생성한다.
그 후 종속성 5개를 설치한다.
"@nestjs/common": "^7.6.17": Nest에서 함수, 클래스 등 대다수를 가져온다.
"@nestjs/core": "^7.6.17"
"@nestjs/platform-express": "^7.6.17" : HTTP 요청을 다루기 위해 Nest가 ExpressJS 사용하도록 해준다.
"reflect-metadata": "^0.1.13" : decorator
"typescript": "^4.3.2" : 사용할 언어
TS(Typescript) 컴파일러 세팅
루트 디렉토리에 다음과 같이 tsconfig.json 파일을 만든다.
| |
HTTP 요청과 응답 사이에 서버에서 발생하는 일
요청 (in Nest)
요청의 body에 담긴 데이터 타당성 검사(Pipe)
유저의 권한 확인(Guard)
함수로 연결(Controller)
연결된 함수에서 business logic 실행(Service)
데이터베이스 접근(Repository)
응답
Nest의 구성
- Controllers : 요청 처리
- Services : 데이터 접근과 비즈니스 로직 처리
- Modules : 코드 묶기
- Pipes : 받은 데이터의 타당성 검사
- Filters : 요청 처리 중 발생한 에러 처리
- Guards : 권한 확인
- Interceptors : 받은 요청이나 내보내는 응답에 추가 로직 부여
- Repostiroies : DB에 저장된 데이터 처리
Nest module과 controller 만들기
루트디렉토리에 src 폴더를 만들고 안에 main.ts 파일을 만든다.
보통 모듈과 컨트롤러 자체의 디렉토리를 만들지만 이번엔 main.ts에 포함시킬 것.
main.ts
| |
npx ts-node-dev src/main.ts를 터미널에 입력해서 실행해보
[INFO] 14:31:26 ts-node-dev ver. 2.0.0 (using ts-node ver. 10.9.1, typescript ver. 5.2.2) [Nest] 3320 - 2023. 10. 05. 오후 2:31:31 [NestFactory] Starting Nest application… [Nest] 3320 - 2023. 10. 05. 오후 2:31:31 [InstanceLoader] AppModule dependencies initialized +53ms [Nest] 3320 - 2023. 10. 05. 오후 2:31:31 [RoutesResolver] AppController {}: +19ms [Nest] 3320 - 2023. 10. 05. 오후 2:31:31 [RouterExplorer] Mapped {, GET} route +6ms [Nest] 3320 - 2023. 10. 05. 오후 2:31:31 [NestApplication] Nest application successfully started +6ms
라고 뜨면서 서버가 잘 실행된다.
링크 접속해봐도 hi there!라고 잘뜬다.
컨트롤러, 모듈 추출하기
명명법
- class AppController {} : 컨트롤러라는 type의 클래스. 이름은 App이다. 따라서
app.controller.ts - class AppModule {} : 모듈이라는 type의 클래스. 이름은 App이다. 따라서
app.module.ts
위와 같은 방식으로 파일 이름으로 이해할 수 있도록 명명해야 한다.
이제 Appcontroller, Appmodule을 옮기고 import 도 적절하게 바꿔준 후 해당 클래스를 export 처리한다.
| |
| |
| |
npx ts-node-dev src/main.ts를 터미널에서 실행해보면 링크가 여전히 잘 실행된다!
Routing Decorators
컨트롤러 클래스에서 @get() decorator에 ‘/asdf’ 를 인자로 넣어주면 링크 에 오류가 뜬다.
| |
xxxxxxxxxx1 1{“statusCode”:404,“message”:“Cannot GET /”,“error”:“Not Found”} 라는 오류가 뜬다.
대신 /asdf를 추가한 링크 로 가면 이전처럼 ‘hi there!‘이 잘뜬다.
@Controller decorator에도 적용할 수 있다. ‘/app’을 추가하여 새로운 링크 로 들어가야하면 ‘hi there!‘를 만날 수 있다.
AppController에 또다른 라우터 함수를 추가해보자.
| |
서버가 켜져있는지 꼭 확인할 것!