목록 보기
변화에 유연한 HTTP 클라이언트 만들기
아키텍처

변화에 유연한 HTTP 클라이언트 만들기

인프런
인프런
2023년 7월 23일

두줄요약

Nest.js HTTP Module의 외부 라이브러리 종속을 줄이는 WebClientModule 설계를 소개했습니다. 인터페이스·Mock 구현체와 선언적 HTTP 클라이언트로 교체성과 테스트성을 높였습니다.

문제 상황

  • Nest.js HTTP Module의 Observable 반환과 AxiosResponse 노출로 인한 비동기 모델·외부 라이브러리 종속
  • HTTP 라이브러리 교체 시 서비스 코드와 테스트 코드까지 수정될 수 있는 OCP 위반 우려

구조와 흐름

  • WebClient 인터페이스로 HTTP 메서드, URI, 헤더, 본문 설정과 요청 실행 추상화
  • BodyInserter로 콘텐츠 타입별 요청 본문 생성, ResponseSpec으로 상태 코드·본문·DTO 변환 캡슐화
  • WebClientService가 요청별 클라이언트 인스턴스를 생성하고 Nest.js provider로 구현체 주입

선택 이유

  • got 기반 구현체를 WebClient 뒤로 숨겨 axios·node-fetch 등 구현 라이브러리 교체 범위 축소
  • MockWebClient와 MockWebClientService를 통한 실제 HTTP 호출 없는 순수 유닛 테스트 지원
  • 선언적 HTTP 클라이언트로 서비스 로직의 통신 세부 사항 분리 시도

트레이드오프

  • ResponseSpec의 DTO 변환이 class-transformer에 의존하는 잔여 결합
  • TypeScript 인터페이스의 런타임 부재로 선언적 클라이언트에서 클래스와 빈 구현부 필요

다음 읽기

비슷한 주제의 백엔드 글

NestJS v10 업데이트의 여정

NestJS v10 업데이트 과정에서 주요 변경점과 호환성 문제를 정리했습니다. 공통 라이브러리와 토큰 매핑을 활용해 점진적으로 마이그레이션하는 방법을 소개했습니다.

모두싸인
모두싸인
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...