[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!")
}

위 코드에서 MyHandlerServeHTTP 메서드를 구현하여 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 서버와 클라이언트에서 다양한 요구사항을 처리할 수 있습니다.

참고 자료