공부 내용 정리

NestJS의 Interceptor란

blockchoin 2025. 8. 1. 17:36

1. Interceptor란?

Interceptor는 요청(request)과 응답(response) 사이에서 동작하는 미들웨어와 유사한 컴포넌트입니다.
NestJS의 AOP(관점 지향 프로그래밍) 기능 중 하나로, 서비스 로직에서 분리하여 처리할 수 있습니다:

2. 무엇을 할 수 있을까?

기능 설명
요청 전/후 로직 API 요청 시간 측정, 인증 전처리 등
응답 구조 변경 모든 응답을 { status, data, errorCode } 형식으로 통일
예외 래핑 try-catch 없이도 예외 처리 일괄 적용
캐싱 처리 중복된 요청에 대해 캐시된 응답 반환
 

3. 기본 구조

 
  • intercept()가 호출되며 요청을 가로채고
  • next.handle()은 실제 컨트롤러 함수 실행
  • 결과 값을 map()으로 가공할 수 있습니다.

4. 적용 방법

(1) 전역(Global) 적용

 
// main.ts app.useGlobalInterceptors(new SuccessInterceptor());

(2) 특정 컨트롤러/라우터에 적용

@UseInterceptors(SuccessInterceptor) @Controller('user') export class UserController {}

5. 주의사항

@Res() 사용 시 응답이 Interceptor를 거치지 않음 (자동 포맷 불가)
성능 영향 모든 응답에 map() 연산자가 적용됨
비동기 처리 RxJS 개념 필수 (pipe, map, tap 등)
 

6. 오늘 실제 작업 서비스: Bank & Valut Service  

  • 스마트 컨트랙트에서 불러온 응답 중 bigint 값은 string으로 변환
  • 블록 정보를 객체로 포맷팅 하여 프런트엔드에 적합한 구조로 반환
  • withdraw() 함수에서는 스마트 컨트랙트 예외 메시지를 직접 파싱 하여, "Only the owner" 메시지를 커스텀 예외로 변환
 

7. 마무리 정리

Interceptor 개념 요청과 응답 사이를 가로채는 강력한 미들웨어
실전 활용 응답 포맷 통일, 블록체인 예외 처리, BigInt → String 변환
NestJS 스타일 서비스는 책임 분리, 예외는 exception config에 일원화

'공부 내용 정리' 카테고리의 다른 글

NestJS 스케줄러란?  (2) 2025.08.05
RESTful 설계란?  (1) 2025.08.04
API 요청 처리 방식  (0) 2025.07.31
DTO와 Exception 이란?  (1) 2025.07.30
NestJS와 스마트 컨트랙트의 연동  (2) 2025.07.29