NestJS로 첫번째 API만들기

jammanbo·2021년 6월 7일
0
post-thumbnail

Nest의 기본 구성요소

nest로 프로젝트를 생성하게 되면 기본적인 요소들이 생성된다.
nest의 기본요소는 다음과 같은 것이 있다.
module, service, controller(테스트 관련내용은 생락)

프로그램의 진입점은 main.ts파일이며 내용은 하기와 같다.
AppModule을 생성하여 서버를 시작하는 코드이다.

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

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

🔧 Modules

모듈은 Nest에서 가장 기본이 되는 구성요소이다.
하나의 어플리케이션은 여러모듈의 조합으로 이루어진다.

어플리케이션은 하나 이상의 루투모듈이 존재하고 모듈이 다른 모듈들을 포함하면서 어플리케이션이 구성된다.
설치된 프로젝트에서는 App모듈(app.module.ts)

🔧 Controllers

Controller란 특정요청(경로)이 있을때 거기에 맞는 액션을 실행하도록 하는기능(Routing)

🔧 Services

Services란 특정 액션을 구현하는 구현부이다.

첫번째 Nest Api 만들기(Contact)

🔧 Contact Controllers 생성

다음 명령으로 contact Controller를 생성해보자

nest g co contacts   

contact/contacts.controller.ts 파일에 컨트롤러가 생성되었고 내용은 다음과 같다.

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

@Controller('contact')
export class ContactController {

App모듈에도 생성한 contacts 컨트롤러가 자동으로 연결된다.

app.module.ts

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

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

contact Controller에 모든 contacts를 리턴하는 코드를 추가해보자.

contacts.controller.ts

import { Controller, Get } from '@nestjs/common';

@Controller('contacts')
export class ContactsController {
  @Get()
  findAll(): string {
    return 'This action returns all Contacts';
  }
}

수정 후 http://localhost:3000/contact으로 접속을 해보면 해당 요청이 서비스 되고 있음을 확인할 수 있다.

This action returns all Contacts

🔧 Contact Service 생성

특정 액션을 처리하는 구현은 Service에 위치되어야하고, Controller와 Service가 연결되어야한다.
다음 명령으로 constacts service를 생성해보자

nest g s contacts

AppModule에 생성한 contacts가 providers에 자동으로 추가된다.

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

추가된 service에 getAllContacts라는 액션을 구현해보자.

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

@Injectable()
export class ContactsService {
  getAllContacts() {
    return 'This is All Contacts';
  }
}

Controller의 findAll에서 service에서 구현한 액션을 호출하도록 다음과 같이 수정한다.
(ContactsService를 의존성 주입해서 사용)

import { Controller, Get } from '@nestjs/common';
import { ContactsService } from './contacts.service';

@Controller('contacts')
export class ContactsController {
  constructor(private contactsService: ContactsService) {}

  @Get()
  findAll(): string {
    return this.contactsService.getAllContacts();
  }
}

http://localhost:3000/contacts 접속하면 서비스에 구현된 결과를 확인할 수 있다.

This is All Contacts

🔧 Contact Module 생성

구현한 Contacts Controller와 Contacts Service를 모듈화 하여 재구현하여보자.

다음명령어로 Contacts Module 을 생성한다.

nest g mo contacts

App모듈에서 Contacts Controller와 Contacts Service의 종속성을 제거하고 ContactsModule의 종속성 추가

app.module.ts

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

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

Contacts Module에서 Contacts Controller와 Contacts Service의 종속성 추가

import { Module } from '@nestjs/common';
import { ContactsController } from './contacts.controller';
import { ContactsService } from './contacts.service';

@Module({
  controllers: [ContactsController],
  providers: [ContactsService],
})
export class ContactsModule {}

http://localhost:3000/contacts 접속하면 기존 구현과 같은 결과를 확인할 수 있다.

0개의 댓글