package middleware import ( "log" "net/http" "time" ) // Logger HTTP 요청 로깅 미들웨어 func Logger(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() next.ServeHTTP(w, r) log.Printf("%s %s %s", r.Method, r.RequestURI, time.Since(start)) }) } // Recovery 패닉 발생 시 500 응답으로 복구하는 미들웨어 func Recovery(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { defer func() { if err := recover(); err != nil { log.Printf("패닉 복구: %v", err) http.Error(w, "내부 서버 오류가 발생했습니다.", http.StatusInternalServerError) } }() next.ServeHTTP(w, r) }) } // Chain 여러 미들웨어를 순서대로 체인 func Chain(h http.Handler, middlewares ...func(http.Handler) http.Handler) http.Handler { for i := len(middlewares) - 1; i >= 0; i-- { h = middlewares[i](h) } return h }