피드로 돌아가기
Go HTTP middleware explained: what it is, how it works, and how to build your own
Dev.toDev.to
Backend

http.Handler 인터페이스 기반 Onion Model 구조의 Middleware 설계

Go HTTP middleware explained: what it is, how it works, and how to build your own

Fer Rios2026년 6월 22일25intermediate

Context

각 HTTP Handler 내부에 인증, 로깅, 추적 ID 생성 로직을 중복 구현함에 따른 유지보수 비용 증가 문제 발생. 공통 로직의 수정 시 모든 핸들러 파일을 개별적으로 업데이트해야 하는 코드 중복 및 관리 복잡성 증대 상황 분석.

Technical Solution

  • http.Handler 인터페이스의 ServeHTTP 메서드를 활용한 재귀적 래핑 구조 설계
  • http.Handler를 입력받아 새로운 http.Handler를 반환하는 고차 함수 형태의 Middleware 패턴 채택
  • next.ServeHTTP 호출 전후에 로직을 배치하여 요청 진입과 응답 반환 시점의 제어권을 확보하는 Onion Model 구현
  • context.Context를 통한 Request-scoped 데이터 전달로 Middleware 간 상태 공유 체계 구축
  • Recovery Middleware를 최상위 레이어에 배치하여 하위 모든 레이어의 Panic을 포착하고 500 Internal Server Error로 응답하는 안정성 확보
  • Middleware 실행 순서 제어를 통해 RequestID 생성 후 Logger가 이를 참조하는 의존성 순서 확립

1. Middleware 체인 설계 시 데이터 의존성에 따른 실행 순서를 정의했는가

2. 조기 리턴(Early Exit) 시 next.ServeHTTP 호출을 방지하여 Double Response Panic을 차단했는가

3. 최상위 레이어에 Recovery Middleware를 배치하여 프로세스 크래시를 방지했는가

4. Handler 간 상태 공유 시 전역 변수가 아닌 Context를 사용했는가

원문 읽기