지난 포스팅에서 nest.js를 시작하기위한 기초설정을 설명했다.
이번 포스팅에서는 Nest.js 개발을 위해 파일을 하나씩 설명하려 한다.
파일 구조를 보면 app.module
, app.controller
,app.service
가 있다.
main.ts
는 JS로 따지면 메인 인덱스를 생각하면 될 것 같다.
간단하게 순서를 설명하자면 main
에서 app.module
로 가게 되고, app.controller
, app.service
로 시선이 이동한다고 생각하면 된다.
(spec.ts 파일은 테스팅을 위한 파일이니 지금은 신경쓰지 말자)
app.module.ts
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
module
파일엔 이렇게 imports
,controllers
,providers
가 있다.
controller
에는 예상했다싶이 Controller
파일을 넣어주고
providers
에는 Services
파일을 넣어주면 된다.
app.controller.ts
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
이 부분은 router 역할을 한다고 생각하면 된다. 클래스의 위에 @Controller()
를 선언해주고 get, post, delete, update
등 request 요청을 선언해주면된다.
이때 @
가 붙은것을 데코레이터라고 부른다.
위의 코드를 참고하면 @Get()
데코레이터를 선언하여 '/'
링크로 접속하여 get 요청을 보냈을 때 아래에 있는 함수를 실행하겠다는 뜻이다.
@Controller() 선언에서 ()안에 들어가는 문자열이 그 파일의 기본 라우터라고 생각하면 된다. 즉, @Controller('home')이라고 되어 있고, @Get('one') 이라고 되어있는 라우터에 접근하려면 url 주소를 http://localhost:3000/home/one 으로 접속해야하는 것이다.
getHello(): string
에서 getHello는 함수 이름이고, string은 반환되는 타입을 나타낸다. 그리고 {}
내에 있는 코드를 실행하는 것인데 appService
로 이동하니 우리도 app.service.ts
파일로 눈을 돌려보자.
app.service.ts
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
controller
에서 service
파일의 getHello()
함수를 호출했고 service
에서는 문자열을 반환하므로 결국 홈화면을 접속하면 'Hello World!'라는 문자열을 확인할 수 있는 것이다.
여기까지가 코드를 읽는 시선의 이동이다. 이러한 순서로 코드를 읽어나간다고 생각하면 될 것 같다.
모듈 생성, DB 연결, Entity, Repository, Dto 생성 등 본격적으로 CRUD 구현을 위한 기초 세팅을 해야한다. 조금은 긴 설명이 될 듯하니 다음 포스팅에서 설명하려고 한다.