메시지 처리기(Message Handler)는 HTTP 요청을 받아 HTTP 응답을 반환하는 클래스입니다. 모든 메시지 처리기는 추상 클래스인 HttpMessageHandler에서 파생되며, 들어오는 요청이 HttpControllerDispatcher에 도달하기 전에 이를 처리하거나 수정하거나 심지어 거부할 수 있는 기회를 제공합니다.
메시지 처리기는 요청 처리 파이프라인의 매우 초기 단계에서 실행되기 때문에, Web API에서 교차 관심사(Cross-Cutting Concerns)를 구현하기에 가장 적합한 위치입니다. 메시지 처리기란 결국 파이프라인을 통해 HTTP 요청과 응답 과정에 연결된 일련의 클래스 체인(시스템에서 정의한 것일 수도 있고, 개발자가 직접 정의한 것일 수도 있습니다)이라고 할 수 있습니다.

예를 들어 하나의 HTTP 요청이 HTTP 서버에 도착하면, 해당 요청은 먼저 HandlerA로 전달되고, HandlerA에서 처리된 후 HandlerB로 넘어가는 방식으로 동작합니다. 이 구조의 가장 큰 장점은 비즈니스 요구 사항에 따라 각 처리기 내부에서 특정 작업을 수행할 수 있다는 점입니다.
메시지 처리기의 두 가지 유형
ASP.NET Web API 프레임워크에는 다음과 같이 두 가지 유형의 메시지 처리기가 존재합니다.
- 서버 측(Server-Side) HTTP 메시지 처리기
- 클라이언트 측(Client-Side) HTTP 메시지 처리기
서버 측 메시지 처리기
서버 측에서 Web API 파이프라인은 다음과 같은 기본 제공(Built-in) 메시지 처리기를 사용합니다.
- HttpServer — 호스트(Host)로부터 들어온 요청을 받습니다.
- HttpRoutingDispatcher — 라우팅 정보를 기반으로 요청을 디스패치합니다.
- HttpControllerDispatcher — 요청을 Web API 컨트롤러로 전달합니다.
이 파이프라인에는 개발자가 직접 만든 사용자 지정 핸들러(Custom Handler)를 추가할 수도 있습니다. 메시지 처리기는 컨트롤러 액션 수준이 아닌 HTTP 메시지 수준에서 동작하는 교차 관심사를 처리하는 데 특히 유용합니다. 예를 들어 메시지 처리기는 다음과 같은 작업을 수행할 수 있습니다.
- 요청 헤더(Request Header) 읽기 또는 수정
- 응답(Response)에 사용자 지정 헤더 추가
- 컨트롤러에 도달하기 전에 요청 유효성 검사
클라이언트 측 HTTP 메시지 처리기
클라이언트 측에서는 HttpClient 클래스가 메시지 처리기를 사용하여 요청을 처리합니다. 기본 처리기는 HttpClientHandler이며, 이 핸들러는 네트워크를 통해 요청을 전송하고 서버로부터 응답을 받아오는 역할을 담당합니다. 마찬가지로 클라이언트 파이프라인에도 사용자 지정 메시지 처리기를 삽입하여 로깅, 인증 토큰 추가, 재시도 로직 등 다양한 기능을 확장할 수 있습니다.