-
2. NestJs & Hexagonal - [ ports ]공부하기/node.js 2023. 2. 12. 20:52
헥사고날 아키텍처로 애플리케이션을 만들기 위해서 우선 in-bound-port, out-bound-port 인터페이스와 dto의 타입을 미리 선언하고 in bound port를 implements한 service를 사용하여 테스트 케이스를 작성할 생각입니다.
구현된 서비스는 모두 null을 리턴하고, 곧 작성할 테스트 케이스에서 실패하는 테스트 케이스를 작성하는데 활용할 예정입니다.
전체 코드는 여기를 참고해 주시고 이 포스팅은 Survey Create 과정을 기준으로 진행됩니다.
survey-module 디렉토리 구조
Survey Create UseCase
- SurveyController : 컨트롤러는 service를 의존하는 것이 아닌 in bound port인 interface를 의존한다.
- CreateSurveyInport : 설문지를 생성하기 위한 interface
- CreateSurveyServicce : CreateSurveyInport( interface )의 구현체
- CreateSurveyOutPort : 비즈니스 로직에서 외부 시스템인 데이터베이스를 사용하기 위한 interface
survey create in-bound-port ( 외부의 요청을 받는 포트 )
src/survey/in-port/survey-create.ip.ts
export type SurveyCreateInPortInputDto = { name: string; description: string; }; export type SurveyCreateInPortOutputDto = { id: number; name: string; description: string; }; // provider token export const CREATE_SURVEY_INBOUND_PORT = 'CREATE_SURVEY_INBOUND_PORT' as const; export interface CreateSurveyInPort { execute( params: SurveyCreateInPortInputDto, ): Promise<SurveyCreateInPortOutputDto>; }
- SurveyCreateInportInputDto : in bound port의 input type
- SurveyCreateInPortOutputDto : in bound port의 output type
- CREATE_SURVEY_INBOUND_PORT : in bound port의 DI를 위한 provider token 값
- CreateSurveyInport : in bound port ( controller가 의존하는 인터페이스 )
out-bound-ports ( 비즈니스 로직이 외부 시스템에 요청하는 포트 )
src/survey/out-port/survey-create.op.ts
export type SurveyCreateOutPortInputDto = { name: string; description: string; }; export type SurveyCreateOutPortOutputDto = { id: number; name: string; description: string; }; // provider token export const CREATE_SURVEY_OUTBOUND_PORT = 'CREATE_SURVEY_OUTBOUND_PORT' as const; export interface CreateSurveyOutPort { execute( params: SurveyCreateOutPortInputDto, ): Promise<SurveyCreateOutPortOutputDto>; }
- SurveyCreateOutPortInputDto : out bound port의 input type
- SurveyCreateOutPortOutputDto : out bound port의 output type
- CREATE_SURVEY_OUTBOUND_PORT : out bound port의 DI를 위한 provider token 값
- CreateSurveyOutPort : out bound port ( service가 의존하는 인터페이스 )
service
src/survey/survey-create.service.ts
import { Injectable } from '@nestjs/common'; import { CreateSurveyInPort, SurveyCreateInPortInputDto, SurveyCreateInPortOutputDto, } from '../in-port/survey-create.ip'; @Injectable() export class SurveyCreateService implements CreateSurveyInPort { execute( params: SurveyCreateInPortInputDto, ): Promise<SurveyCreateInPortOutputDto> { return null; } }
SurveyCreateService : in bound port의 구현체
'공부하기 > node.js' 카테고리의 다른 글
4. NestJs & Hexagonal - [ 테스트 ] - 실패하는 테스트가 성공하도록 최소한으로 구현하기 (0) 2023.02.14 3. NestJs 설문조사 미니 프로젝트 - [ 테스트 ] - 실패하는 테스트 케이스 (0) 2023.02.14 1. NestJs 설문조사 미니 프로젝트 - [ 엔티티 ] (0) 2023.02.12 9. NestJs & Git Actions CI/CD - [ AWS EC2 배포 ] - https (0) 2023.02.05 7. NestJs & Git Actions CI/CD - [ AWS EC2 배포 ] - 자동배포 (1) (0) 2023.02.03