0. 개요
[ 왜 Nest.js 인가 ]
이전 프로젝트에서는 Node.js에 express 프레임워크를 사용해서 개발을 해왔다.
하지만 express가 불편하다는 생각을 가지고 있었다. 명확하게 정해져 있는 구조가 없다보니 개발자마다 폴더 구조 등이 자유로웠고 가끔은 이런 것들이 꼬이기도 했다.
(그리고 나는 프로젝트 문서화를 중요하게 생각하는데 Express에서는 하나하나 yaml 파일로 작성하고 있었다. 물론 express에서도 좀 더 자동화할 수 있지만 nest에서는 좀 더 간편하게 swagger 문서를 자동으로 달 수 있었다.)
( 참고 )
express에서 nest.js처럼 사용할 수 있는 방법도 있다.
- expresss 서버 구조 : https://jhyeok.com/node-backend-structure/
- REST API 서버 : https://github.com/typestack/routing-controllers
[ 많은 사람들이 인정하는 안정적인 구조 ]
Nest.js는 기존의 Express.js 프레임워크에서는 없던 구조를 가지고 있다.
(구조가 없던 node.js에 좋은 아키텍처와 구조를 제공하기 때문에 사용한다.)
다른 spring, django, ruby on rail과 같은 프레임워크는 순서와 구조도를 가지고 있다. Nest.js는 이러한 구조를 node에 가지고 왔다.
Node.js는 미들웨어를 어디에 두고, url을 어디에 두고, 라우팅을 어디에서 하고 모든게 자유로웠다.
일부분 OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Reactive Programming)를 사용하고 있다.
[ 세상 친절한 공식 문서 ]
여기에 정착하고 싶어지는 공식문서!
1. Nest.js CLI로 Nest.js 시작하기
Nest CLI를 사용하면 간편하게 프로젝트를 시작할 수 있다.
nest new를 사용하면 새 프로젝트 디렉터리가 생성되고 프로젝트 기본 구조가 생성된다.
$ npm i -g @nestjs/cli
$ nest new <project_name>
- nest 명령어 확인
- nest를 입력
- 기본 구조
2. 실행
- package.json
이 스크립트 중 내가 개발할 때는 npm run start:dev를 사용하겠다.
실행 시켜보면 어플리케이션이 열린걸 확인할 수 있다.
3. 기본 파일
[ app.module.ts ]
AppModule 이라는 클래스에서 함수가 작성된걸 볼 수 있다.
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
지금 작성된 함수가 데코레이터이다.
✔️ 데코레이터: 클래스에 함수 기능을 추가할 수 있다. ES2016 데코레이터, 함수를 반환하고 대상, 이름 속성 설명자를 인수로 사용하는 표현식이다.
[ app.controller.ts ]
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
[ app.service.ts ]
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
'프로젝트 개발 기록 > [개발] node.js | nest, express' 카테고리의 다른 글
[Node.js] Nest.js 폴더 구조 설계하기 (0) | 2022.09.25 |
---|---|
TypeScript + node.js에서 Jest로 단위테스트 하기 (0) | 2022.07.17 |
[TypeScript+Express] Redis로 Refresh Token 관리 (0) | 2022.06.21 |
[TypeScript + Express] Error handling (2) | 2022.06.17 |
댓글