관리 메뉴

bright jazz music

[nestjs] 1. 테스트 프로젝트 생성 본문

Framework/NestJS

[nestjs] 1. 테스트 프로젝트 생성

bright jazz music 2024. 12. 19. 16:45

1.  들어가며

프론트 앱에서 접근할 api 서버가 필요했다. 스프링 부트로 만든 앱이 있지만 이번에는 사용하지 않기로 했다.

nestjs를 사용해보기로 했다. JS/TS 언어 자체와 그 쓰임에 대해 좀 더 깊게 공부하고 활용해보기 위해서다.

 

공식 문서를 읽어보니 스프링과 유사하면서도 일면 다르다. nestjs도 스프링처럼 MVC를 사용한다. 스프링에서 애노테이션을 사용하는 것처럼 nestjs에서는 데코레이터를 사용한다. 그리고 무엇보다도 의존성 주입을 사용한다.

 

생각보다 다른 점도 꽤 있다. 스프링에서는 빌드 시 자동적으로 컴포넌트(@Component)를 인식하고 추가하는 데 반해, nestjs에서는 모듈에 명시적으로 등록을 해줘야만 인식한다. 애노테이션과 데코레이터도 미묘하게 다르다. @Controller, @Service 등이 @Component를 상속하는 것과 다르게 nestjs의 @Controller(), @Service() 등은 공통의 컴포넌트를 래핑하고 있지 않다.

 

디렉토리를 구성하는 방식에도 차이가 있다. 스프링에서는 컨트롤러, 서비스, 리포지터리처럼 계층별로 디렉토리를 만들고 그 안에서 기능별로 분류하는 방식이 일반적이다. 예를 들면 controllers 디렉토리 내에 UserController.class, ProductClass.class 등이 존재하는 것이다. (물론 그렇게 하지 않을 수도 있지만 내가 회사에서 다루었던 프로젝트들은 모두 그런 구조였다...)

 

nestjs에서는 기능별로 먼저 분류한 뒤, 그 안에 모든 것을 모아 둔다. 컨트롤러, 서비스, 레포지토리, 디티오가 user라는 디렉토리 내에 존재한다. 이러한 파일들은 user디렉토리에 존재하는 모듈에 등록된다. 이로서 user디렉토리 전체에 존재하는 파일들이 하나의 모듈로서 기능할 수 있게 된다. 그리고 이 모듈은 다시 프로젝트 전체의 모듈을 관리하는 모듈에 등록되어 전체 프로젝트의 일부로 작동한다.

 

이러한 차이들 때문에 nestjs가 스프링에 비해 모듈화가 강하며 도메인 주도적이라고 하는 것 같다. 파일 개수가 많아지고 스프링에 비해 직접 관리해줘야 하는 면들이 있기는 하다. 유지보수 측면에서도 좀 의문의 들기는 한다. 하지만 BFF나 간단한 앱의 API서버로 사용하기에는 무리가 없어 보인다. 

@Module({
  controllers: [UserController],
  providers: [UserService],
  exports: [UserService]
})
export class UserModule {}
// 유저 디렉토리의 모듈에 등록하고 이 모듈을 다시 프로젝트의 전체 모듈(app.module.ts)에 등록한다.

 


// app.module.ts에는 아래와 같이 등록한다.
@Module({
  imports: [
    UserModule,
    
    // 다른 기능별 모듈도 배열에 등록한다. 예를 들면 ProductModule
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

 

DB는 PostGre를 사용할 예정.

TypeORM 사용 예정

여유가 된다면 GraphQL과 socket.io도 사용할 예정 

 

 

2. 프로젝트 기본 세팅

2.1. nestjs 신규 프로젝트 생성. (이 과정을 진행하기 전에 nestjs를 설치하는 과정이 선행돼야 한다)

// 신규 프로젝트 생성
nest new nestjs-template

/*
? Which package manager would you ❤️  to use? pnpm
CREATE nestjs-template/.eslintrc.js (663 bytes)
CREATE nestjs-template/.prettierrc (51 bytes)
CREATE nestjs-template/README.md (5213 bytes)
CREATE nestjs-template/nest-cli.json (171 bytes)
CREATE nestjs-template/package.json (1951 bytes)
CREATE nestjs-template/tsconfig.build.json (97 bytes)
CREATE nestjs-template/tsconfig.json (546 bytes)
CREATE nestjs-template/src/app.controller.ts (274 bytes)
CREATE nestjs-template/src/app.module.ts (249 bytes)
CREATE nestjs-template/src/app.service.ts (142 bytes)
CREATE nestjs-template/src/main.ts (228 bytes)
CREATE nestjs-template/src/app.controller.spec.ts (617 bytes)
CREATE nestjs-template/test/jest-e2e.json (183 bytes)
CREATE nestjs-template/test/app.e2e-spec.ts (630 bytes)

▹▸▹▹▹ Installation in progress... ☕


🚀  Successfully created project nestjs-template
👉  Get started with the following commands:

$ cd nestjs-template
$ pnpm run start

                                         
                          Thanks for installing Nest 🙏
                 Please consider donating to our open collective
                        to help us maintain this package.
                                         
                                         
               🍷  Donate: https://opencollective.com/nest
                                         
*/

 

패키지 매니저는 pnpm 선택.  프로젝트를 구동하기 위해서는 pnpm run start 명령어를 입력해야 한다.

 

아래와 같이 노드 모듈이 존재하고, 그 외에 기본적인 파일들이 들어있는 프로젝트가 생성되었다.

 

 

 

3. 깃 리포지토리 생성 및 커밋

 

 

GitHub - hojuncha997/nestjs-template

Contribute to hojuncha997/nestjs-template development by creating an account on GitHub.

github.com

 

Comments