GO · 함수
미들웨어 패턴
함수를 감싸는 미들웨어 패턴으로 로깅, 인증, 복구 등 횡단 관심사를 분리합니다.
함수고급middlewarechaindecoratorhandler
핵심 설명
함수를 감싸는 미들웨어 패턴으로 로깅, 인증, 복구 등 횡단 관심사를 분리합니다.
Go code
package main
import (
"fmt"
"time"
)
type Handler func(req string) string
type Middleware func(Handler) Handler
func logging(next Handler) Handler {
return func(req string) string {
start := time.Now()
result := next(req)
fmt.Printf("[LOG] %s → %v\n", req, time.Since(start))
return result
}
}
func recover_(next Handler) Handler {
return func(req string) (result string) {
defer func() {
if r := recover(); r != nil {
result = fmt.Sprintf("ERROR: %v", r)
}
}()
return next(req)
}
}
func chain(h Handler, mws ...Middleware) Handler {
for i := len(mws) - 1; i >= 0; i-- {
h = mws[i](h)
}
return h
}
func main() {
handler := func(req string) string { return "OK: " + req }
wrapped := chain(handler, logging, recover_)
fmt.Println(wrapped("/api/users"))
}학습 팁
미들웨어 체인은 역순으로 적용되므로 chain(h, A, B, C)는 A(B(C(h)))가 됩니다. 실행 순서는 A → B → C → h입니다.
주의할 점
미들웨어에서 next를 호출하지 않으면 체인이 중단됩니다. 의도적 중단(인증 실패 등)이 아니라면 반드시 next를 호출하세요.
자주 묻는 질문
미들웨어 패턴란 무엇인가요?
함수를 감싸는 미들웨어 패턴으로 로깅, 인증, 복구 등 횡단 관심사를 분리합니다.
미들웨어 패턴 학습 시 주의할 점은 무엇인가요?
미들웨어에서 next 를 호출하지 않으면 체인이 중단됩니다. 의도적 중단(인증 실패 등)이 아니라면 반드시 next 를 호출하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.