[go] net/http 패키지를 사용한 사용자 정의 미들웨어 구현

Go 언어에서 웹 애플리케이션 개발을 할 때, net/http 패키지를 사용하여 미들웨어를 구현할 수 있습니다. 미들웨어를 사용하면 HTTP 요청을 처리하기 전과 후에 추가적인 로직을 수행할 수 있습니다. 이번에는 net/http 패키지를 활용하여 사용자 정의 미들웨어를 구현하는 방법을 알아보겠습니다.

1. 미들웨어 함수 작성

먼저, 사용자 정의 미들웨어 함수를 작성합니다. 이 함수는 http.Handler를 매개변수로 받아들이고, 새로운 http.Handler를 반환합니다.

예시:

func customMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // 미들웨어 로직 작성
        // 다음 핸들러 호출 전에 수행할 작업을 여기에 작성
        next.ServeHTTP(w, r)
        // 다음 핸들러 호출 후에 수행할 작업을 여기에 작성
    })
}

위의 예시에서 customMiddleware 함수는 next http.Handler를 받아들이고, http.HandlerFunc를 반환합니다. 반환된 함수는 원본 핸들러의 ServeHTTP 메서드를 호출하고, 추가적인 로직을 삽입하고자 합니다.

2. 미들웨어를 적용할 핸들러 정의

다음으로, 미들웨어를 적용할 핸들러를 정의합니다. 이 핸들러에는 미들웨어를 적용하고자 하는 실제 로직이 포함됩니다.

예시:

func mainHandler(w http.ResponseWriter, r *http.Request) {
    // 핸들러의 실제 로직 작성
    // 해당 핸들러에 대한 처리를 여기에 작성
}

위의 예시에서 mainHandler 함수는 사용자가 구현하고자 하는 실제 HTTP 핸들러를 나타냅니다.

3. 미들웨어 적용

마지막으로, customMiddlewaremainHandler를 사용하여 완전한 핸들러를 만들고, 서버에 등록합니다.

예시:

func main() {
    // mainHandler에 미들웨어 적용
    http.Handle("/", customMiddleware(http.HandlerFunc(mainHandler)))
    
    // 서버 실행
    http.ListenAndServe(":8080", nil)
}

위의 예시에서 http.Handle 함수를 사용하여 mainHandlercustomMiddleware를 적용한 후, 서버를 실행하는 방법을 보여줍니다.

이제 Go 언어에서 net/http 패키지를 이용해 사용자 정의 미들웨어를 구현하는 방법을 배웠습니다. 미들웨어를 활용하여 HTTP 요청을 처리하기 전후에 원하는 로직을 수행할 수 있습니다.

참고 자료