코이팅

[프리온보딩 백엔드 챌린지 Week 1-2] Nest.js 로 객체지향 이해해 보기 본문

대외활동/원티드 프리온보딩 백엔드 챌린지

[프리온보딩 백엔드 챌린지 Week 1-2] Nest.js 로 객체지향 이해해 보기

코이팅 2023. 1. 21. 15:23
728x90
반응형

📝 Week 1-2

Nest.js로 객체지향 이해해보기

🟡 Controllers

출처 : https://docs.nestjs.com/controllers

 

  • controller는 client의 요청을 받고, 응답을 다시 client에게 반환합니다.
  • 어플리케이션을 향한 요청을 받는 첫번째 스텝입니다.
  • 외부세계로 부터 들어온 요청이 어느 곳으로 가야하는지 안내하는 역할입니다.
  • 하나 이상의 route를 가지며 각각 다른 action을 수행합니다.
import { Controller, Get } from '@nestjs/common';

// @Controller : 해당 클래스가 컨트롤러라는 것을 명시합니다.
@Controller('cats')
export class CatsController {
// @Get, @Post, @Put, @Patch... : REST API 메소드
  @Get()
  async findAll(): Promise<string> {
    return 'This action returns all cats';
  }
}

🟡 Providers

  • Nest.js의 근본으로 대다수의 클래스들이 provider입니다.
  • provider는 dependency로 주입될 수 있습니다.
  • 컨트롤러는 HTTP 요청을 핸들링하고 더 복잡한 일들을 provider에게 위임해야합니다.
  • provider는 그저 JavaScript의 class일 뿐입니다.
@Injectable()
export class CatsService {
  private readonly cats: Cat[] = [];
  
  create(cat: Cat) {
    this.cats.push(cat);
  } 
}

@Controller('cats')
export class CatsController {
	constructor(private catsService: CatsService) {}
    
    @Post()
    async create(@Body() createCatDto: CreateCatDto) {
      this.catsService.create(createCatDto);
    }
}

🟡 Modules

  • 같은 도메인에 속한 것들을 응집화 할 수 있도록 도와줍니다.
  • 앱의 사이즈가 커질수록, 경계를 설정해서 복잡도를 매니징 할 수 있습니다.
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class CatsModule {}

🟡 Dependency Injection

  • 의존성 주입입니다. 하나의 객체가 다른 객체의 의존성을 제공하는 기술입니다.
  • Nest.js 런타임 시스템이 dependency 인스턴스화를 위임합니다.
  • 클래스에 @Module() 데코레이터를 붙여서 선언합니다.
  • 코드의 결합도를 느슨하게 하도록 하고, 객체의 생성과 사용을 분리합니다.
  • 코드의 가독성과 재사용성을 높여줍니다.
@Injectable()
export class CatsService {

@Controller('cats')
export class CatsController {
  constructor(private catsService: CatsService) {}
  
@Module({
  controllers: [CatsController],
  providers: [{
   Provide: CatsService,
   useClass: CatsService,
  }],
})

// 1. CatsController 를 인스턴스화 할 때, dependency 를 살펴봅니다. 
// 2. CatsService 토큰은 CatsService 클래스를 리턴합니다.
// 3. SINGLETON 스코프(default)로 CatsService를 인스턴스화 합니다. 
// 4. 메모리 내에 캐시를 하고 재사용가능 하도록 만듭니다.
// 5. 이 모든 과정은 bottom up 으로 dependency 가 정확한 순서로 관리됩니다.

 

 

728x90
반응형
Comments