피드로 돌아가기
Dev.toBackend
원문 읽기
http.Handler 인터페이스 기반 Onion Model 구조의 Middleware 설계
Go HTTP middleware explained: what it is, how it works, and how to build your own
AI 요약
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를 사용했는가