이번에 다양한 프로젝트에 참여해보면서 back-end 에도 관심이 생겼다. 그 중에서도 NestJS를 사용해보려고 한다. NomadCoders에서 강의를 듣고 시작했다.

NomadCoders

✌🏻 NestJS 란,

- 다른 node.js의 프레임워크에 없는 구조를 가지고 있다.
- express위에서 움직인다.
- typescript기반이다.
- node.js 프로그램 빌드시 유용하게 사용된다.
- nestJs는 좋은 아키텍처와 구조를 가지고 있다. → Enterprise 프로젝트에 적합하다.

🛠 NestJS 설치하기

npm i -g @nestjs/cli 
sudo npm i -g @nestjs/cli // 위 명령어 사용시, 권한 오류 발생한다면 다음 명령어로 설치하면 된다.

nest // 설치 확인

👉 프로젝트 생성하기

원하는 위치로 이동하여 프로젝트를 생성하여 준다. 나는 강의를 따라서 Documents 아래에 프로젝트를 생성하여 주었다. 다음과 같이 nset new를 하면 프로젝트가 생성된다.

nest new // 새로운 프로젝트 생성

그리고 아래와 같이 프로젝트의 이름을 물어본다. 원하는 프로젝트명을 설정해주고 패키지 매니저도 설정하여 준다.

// 아래와 같은 안내문 보여지면
? What name would you like to use for the new project? (app-name) hi-nest
? Which package manager would you ❤️  to use? npm

프로젝트가 만들어지면 아래와 같은 화면을 볼 수 있다.

설치 완료 화면


NestJS 기본 구조 살펴보기

Nest.js 는 이미 만들어진 기능을 제공한다. (예를 들어,dependency/test폴더/src/controller/service등) 지금부터는 기본 기본 구조를 뜯어볼 것이다.

🔥 main.ts (시작을 담당하는 부분)

NestJS는 기본적으로 main.ts를 가지고 있다. 이름을 변경하지 말고 사용해야한다.

// 아래와 같이 함수를 가지고 있음(함수이름은 자유롭게 설정 가능), 3000포트를 리슨하고 있다.
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

🔥 AppModule.ts

모든 것의 루트 모듈

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

🔥 AppController

url을 가져오고 함수를 실행하는 일을 한다.
(express의 router와 같은 존재 / 라우터 세팅이 필요없다.)

아래와 같이 @GET 데코레이터 사용시 반드시 꾸며주는 함수나 클래스와 붙여 사용한다.

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

🔥 AppService

비즈니스로직 처리

import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

🙏🏻 마무리

이번 기회에 back-end도 공부하고 정ㄹㅣ해보려고 한다. 최종적으로는 하나의 서비스를 만들어 배포해보고 싶다. 앞으로 천천히 정리해야겠다!

profile
개발 기록💻

0개의 댓글

Powered by GraphCDN, the GraphQL CDN