[go] net/http 패키지의 핸들러와 미들웨어 개념
Go의 net/http
패키지는 HTTP 웹 서버와 클라이언트를 작성하는 데 사용됩니다. 이 패키지의 두 가지 중요한 개념은 핸들러와 미들웨어입니다.
핸들러 (Handler)
http.Handler
인터페이스는 HTTP 요청을 처리하고 응답을 생성하는 데 사용됩니다. 모든 HTTP 핸들러는 ServeHTTP
메서드를 구현하여 요청을 처리합니다. 핸들러는 네트워크 연결로부터 직접 호출되고 개별 요청에 따라 응답을 반환합니다.
예를 들어, 다음은 핸들러의 기본 구현입니다.
type MyHandler struct {}
func (h *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// 요청 처리
fmt.Fprint(w, "Hello, World!")
}
위 코드에서 MyHandler
는 ServeHTTP
메서드를 구현하여 HTTP 요청을 처리하고, http.ResponseWriter
를 통해 클라이언트에 응답을 반환합니다.
미들웨어 (Middleware)
미들웨어는 핸들러 함수의 앞 뒤로 실행되는 기능을 추가하는데 사용됩니다. http.Handler
를 매개변수로 받아들이고, 다시 새로운 http.Handler
를 반환하는 함수를 미들웨어 함수라고 합니다.
예를 들어, 다음은 간단한 로깅 미들웨어의 예입니다.
func LoggerMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Printf("접속 : %s %s", r.Method, r.RequestURI)
next.ServeHTTP(w, r)
})
}
위의 예시에서 LoggerMiddleware
함수는 http.Handler
를 인자로 받아들이고, 로깅을 수행한 뒤에 원래의 핸들러를 호출하는 새로운 http.Handler
를 반환합니다.
이러한 핸들러와 미들웨어의 개념을 이용하여 HTTP 서버와 클라이언트에서 다양한 요구사항을 처리할 수 있습니다.