티스토리 뷰

준비 - Node.js 및 TypeScript가 설치되어 있어야  한다.

노드 설치 - 공식홈페이지

타입 스크립트 설치 - TypeScript 기초 다지기 참고

 

nest.js 설치

cmd에서 다운받기

npm i -g @nestjs/cli

다운로드후 nest를 쳤을 때 위와 같이 나오면 다운로드 성공

 

nest프로젝트 생성

프로젝트를 생성하고자 하는 위치에 명령어 입력

nest new nest1 // nest로 nest1이라는 이름의 프로젝트를 새로 생성하겠다

? Which package manager would you ❤️  to use? (Use arrow keys)
❯ npm
  yarn
  pnpm

위 명령어를 입력하면 어떤 패키지 매니저를 선택할것인지 나오는데 npm과 가장 호환이 잘되므로 npm선택필수.

 

위와 같은 내용이 나오면서 설치가 된다
원하는 위치에 프로젝트 생성완료

 

 

폴더 구조

📦nest1
 ┣ 📂node_modules
 ┣ 📂src
 ┃ ┣ 📜app.controller.spec.ts
 ┃ ┣ 📜app.controller.ts
 ┃ ┣ 📜app.module.ts
 ┃ ┣ 📜app.service.ts
 ┃ ┗ 📜main.ts
 ┣ 📂test
 ┃ ┣ 📜app.e2e-spec.ts
 ┃ ┗ 📜jest-e2e.json
 ┣ 📜.eslintrc.js
 ┣ 📜.gitignore
 ┣ 📜.prettierrc
 ┣ 📜nest-cli.json
 ┣ 📜package-lock.json
 ┣ 📜package.json
 ┣ 📜README.md
 ┣ 📜tsconfig.build.json
 ┗ 📜tsconfig.json

Nest.js는 모듈기반으로 구성이 되어있다.

모듈을 만들게 되면 src디렉토리 안에 모듈이름.module.ts로 파일이 생성된다.

 

src / main.ts

→ Nest.js 웹 어플리케이션의 진입점

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();
const app = await NestFactory.create(AppModule);

● NestFactory클래스의 create 정적 함수를 통해 Nest.js 어플리케이션 인스턴스를 새롭게 생성.

● AppModule을 루트 모듈로 사용하는 Nest.js 어플리 케이션 인스턴스를 생성.

 

src / app.module.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 {}

● main.ts에서 사용하는 AppModule이 정의 되어있는 파일

● @(데코레이터)는 해당 클래스나 함수가 어떤 역할을 수행하는 지에 대해 Nest.js에 알려주는 역할을 함. 

● 즉, app.module.ts의 AppModule 클래스는 모듈이라는 역할을 할것이다라고 알려주는것.

● @Module은 imports, controllers, providers, exports 속성을 가질수 있음.

모듈속성

imports

  - 현재 모듈에서 사용하려는 다른 모듈들의 목록을 정의

  - 이 속성에 명시된 모듈들은 주로 필요한 프로바이더(서비스)를 제공함

     • API호출을 위해 자주 사용되는 HttpModule이나 데이터베이스 작업을 위한 TypeOrmModule등이 포함 됨

 

controllers

  - 현재 모듈과 관련된 컨트롤러의 목록을 정의

  - 이 컨트롤러들은 해당 모듈의 요청 처리 로직을 담당한다.

 

providers

  - 현재 모듈에서 사용하거나 제공하는 서비스, 레포지토리, 팩토리 등의 목록을 정의

  - 주로 비즈니스 로직 처리나 데이터 액세스와 같은 작업을 수행한다.

 

exports

  - 현재 모듈에서 다른 모듈로 제공하려는 서비스의 목록을 정의

  - 이 속성에 명시된 서비스들은 현재 모듈 외부에서도 사용할 수 있다.

  - 따라서, 다른 모듈에서 특정 서비스를 사용하려면 해당 서비스를 exports에 포함 시켜야함.

 

사용 예시

service(only) + providers

→ 서비스가 특정 모듈 내에서만 사용되고 다른 모듈에서는 사용되지 않을때사용

→ 이럴때는 해당 서비스를 굳이 모듈로 감싸지 않아도 괜찮음.

ex) 

AuthModule이라는 모듈 내에서만 사용되는 TokenService가 있다

TokenService는 토큰 생성, 검증만을 담당하므로 AuthModule외부에서는 필요하지 않다.

즉, TokenService는 AuthModyle의 providers배열에만 추가하면 된다.

 

module exports + imports

→ 해당 서비스를 여러 모듈에서 공통으로 사용할 때 사용

→ 이럴때는 서비스를 만들기전 모듈부터 만들어야 함.

ex)

DatabaseService라는 서비스가 있고 이 서비스는 여러 모듈에서 데이터베이스 연결 및 쿼리 실행 기능을 제공함.

UserModule, OrderModule, ProductModule등 여러 모듈에서 DatavaseService를 사용해야 함.

이럴떄 DatabaseService를 별도의 DatabaseModule에 포함시키고

DatabaseModule의 exports배열에 DatabaseService를 추가한다.

또한 DatabaseService를 사용할 각 모듈에서 DatabaseModule을 imports배열에 추가한다.

 

src / app.controller.ts

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

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

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

● AppModule에서 사용하는 컨트롤러인 AppController 정의

● @Controller라는 데코레이터를 통해 AppController클래스가 컨트롤러 역할을 하는것을 Nest.js에게 알려줌.

● @Get() 데코레이터는 HTTP GET으로 요청이 들어오면 getHello()함수를 실행시키라는 의미.

● 마찬 가지로 @Post, @Put, @Patch, @Delete가 존재.

 

src / app.service.ts

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

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

● @Injectable 데코레이터를 사용하여 필요로 하는 곳에 주입 시켜서 사용할수 있도록 함.

● app.controller.ts에서 AppController의 생성자로 AppService를 주입할수 있는 이유는 @Injectable를 사용 했기 때문

● 서비스는 리포지토리를 반드시 의존해야하며 이는 생성자를 통한 DI로 해결해야한다.

● 비즈니스 로직을 담당하며 웹 어플리케이션의 핵심 부분.

 

'프로그래밍 기초 > TypeScript & NestJS' 카테고리의 다른 글

Nest.js TypeORM 사용하기  (1) 2024.03.15
TypeScript 고급 타입  (0) 2024.03.13
TypeScript 기초 다지기  (1) 2024.03.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함