기본적인 nest.js를 사용하기에 앞서 nvm을 이용한 node버전 관리를 하길 바란다.
왜냐하면 몇몇 라이브러리는 최신 node버전을 사용한다.
NVM설치
아래 사이트에서 setup파일을 실행해 준다
https://github.com/coreybutler/nvm-windows/releases
세 번째 설치 페이지에서 해당 위치에 기본 설치를 하게 되는데 띄어쓰기가 있으면 오류가 생길 수 있으므로 위치를 바꿔준다.
필자는 C:\Windows\nodejs 로 경로를 설정해 줬다.
설치 후 powershell을 관리자 권한으로 열어준다.
대부분의 nest.js 라이브러리는 node 버전 18.10.0의 버전과 호환이 가능하므로 nvm을 이용해 설치해 준다
그전에 기존에 사용하던 node 버전과 nvm에서 관리하는 버전들을 체크하고 싶다면 다음 명령어를 사용하면 된다.
node -v, nvm list
18.10.0 버전을 설치하기 위해서는 윈도우 64비트의 경우에 다음 명령어를 사용하면 된다.(nvm install <version> [arch])
nvm install 18.10.0 64
이제 원하는 버전을 사용하려면 해당 명령어를 사용하면 된다.(nvm use <version>)
nvm use 18.10.0
nest.js 기본 설치 및 세팅
npm i -g @nestjs/cli
nest new project-name
cli로 nest명령어를 사용하기 위해서 -g모드로 설치해 준 후
원하는 프로젝트 이름으로 설치해 주자
나는 nest-test로 해주겠다.
package manager는 npm으로 설치했다.
설치가 끝나면 해당 폴더에 이런 구조의 폴더가 생긴다.
app.controller.spec.ts
- 컨트롤러를 사용하는 유닛 테스트 파일
app.controller.ts
- 단일 경로를 사용하는 기본 컨트롤러
app.module.ts
- 애플리케이션의 루트 모듈
app.service.ts
- 단일 방식의 기본 서비스
main.ts
- NestFactory를 사용하여 Nest 어플리케이션의 인스턴스를 만드는 어플리케이션의 진입점
main.ts를 보면 아래와 같은 코드인데 http 리스너로 3000에서 요청이 올 때까지 대기를 한다.
// main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
이제 npm start or npm start:dev를 사용하여 http://localhost:3000으로 접속하면 아래 화면을 만날 수 있다.
해당 응답이 가능한 이유는 다음과 같다.
client의 요청이 들어오게 되면 controller가 라우팅을 처리하고 provider인 AppService에게 비즈니스 처리 요청을 보낸다.
Service에서 받은 응답을 Controller는 Client에게 보낸다.
실제 코드를 보면
// app.module.ts
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
// app.controller.ts
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
// http://localhost:3000/ 으로 get요청이 들어오게 되면 getHelllo 함수를 실행
// provider인 AppService의 getHello() 함수를 리턴함
@Get()
getHello(): string {
return this.appService.getHello();
}
}
// app.service.ts
// DI가 가능하게 함 -> controller에서 매개변수로 받을 수 있음
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
이외에도 GET, POST, PUT, DELETE 요청을 사용하기 위해서 다음 포스팅부터는 postman을 사용해서 리뷰해 보겠다.