Search

기본 구조

대분류
프레임워크
소분류
Nest.js
설명
Controller, Service [Single-responsibility principle]
유형
구조
주요 레퍼런스
https://nomadcoders.co/nestjs-fundamentals/lectures/1942
최종 편집 일시
2024/10/27 15:45
생성 일시
2024/01/15 04:13
13 more properties

구조

NestJS는 컨트롤러를 비지니스 로직이랑 구분 짓고 싶어한다.
1.
컨트롤러(Controller)는 url을 가져오고 함수를 실행시키는 역할
2.
서비스(Service)에서 비즈니스 로직을 구현&실행시킨다. 함수가 위치하는 곳.
Single-responsibility principle
하나의 module, class 혹은 function이 하나의 기능을 책임지는 것

계층 구조

Controller는 api의 호출과 응답, Service는 비즈니스 로직, Repository는 DB 작업을 담당
Controller: API 요청을 받아 쿼리, 파라미터 등을 Service에게 넘겨주고, Service로 부터 받은 결과를 클라이언트에게 전달하는 역할
Service: Controller로 부터 받은 데이터를 이용해 Repository에게 DB 작업을 요청. Repository의 응답을 이용해 비즈니스 로직을 실행하고 Controller에게 결과를 전달하는 역할
Repository: Service로 부터 DB 작업을 요청받아 CRUD를 수행하여 결과를 Service에게 전달하는 역할

분석

app
import { Test, TestingModule } from '@nestjs/testing'; import { AppController } from './app.controller'; import { AppService } from './app.service'; describe('AppController', () => { let appController: AppController; beforeEach(async () => { const app: TestingModule = await Test.createTestingModule({ controllers: [AppController], providers: [AppService], }).compile(); appController = app.get<AppController>(AppController); }); describe('root', () => { it('should return "Hello World!"', () => { expect(appController.getHello()).toBe('Hello World!'); }); }); });
TypeScript
복사
package.json에서 스크립트 명령어 확인
"start": "nest start", "start:dev": "nest start --watch", //dev "start:debug": "nest start --debug --watch", //debug "start:prod": "node dist/main" //prod
JSON
복사
main.ts (nestjs는 항상 main.ts를 거친다.)
import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); // app.module.ts 호출 await app.listen(3000); // 어플리케이션이 3000번 포트를 리스닝 } bootstrap();
TypeScript
복사
app.module.ts
import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ //데코레이터 함수 imports: [], controllers: [AppController], // app.controller.ts // == express의 router providers: [AppService], }) export class AppModule {} // 루트 모듈(= 어플리케이션의 일부분)
TypeScript
복사
app.controller.ts
import { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; @Controller() export class AppController { constructor(private readonly appService: AppService) {} @Get() // == expree의 get router getHello(): string { return this.appService.getHello(); // app.service.ts } }
TypeScript
복사
app.service.ts
import { Injectable } from '@nestjs/common'; @Injectable() export class AppService { getHello(): string { return 'Hello World!'; // hello world return } }
TypeScript
복사