[go] net/http 패키지를 사용한 로깅 처리

Go 언어로 웹 애플리케이션을 개발할 때, 로깅 처리는 매우 중요합니다. net/http 패키지를 사용하여 HTTP 요청과 응답에 대한 로깅을 쉽게 처리할 수 있습니다. 이 포스트에서는 net/http 패키지를 사용하여 로깅을 구현하는 방법을 살펴보겠습니다.

net/http 패키지 소개

net/http 패키지는 Go 언어에서 HTTP 웹 서버 및 클라이언트를 구현하기 위한 핵심 패키지입니다. 이 패키지를 사용하면 간단한 웹 서버를 만들거나 HTTP 클라이언트를 구현할 수 있습니다.

요청 로깅

먼저 HTTP 요청에 대한 로깅을 구현해보겠습니다. 아래의 코드는 요청이 들어왔을 때 요청 URL과 메소드를 로그에 출력하는 예제입니다.

package main

import (
	"fmt"
	"log"
	"net/http"
)

func loggingMiddleware(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		log.Printf("Request URL: %s, Method: %s", r.URL, r.Method)
		next.ServeHTTP(w, r)
	})
}

func main() {
	http.Handle("/", loggingMiddleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "Hello, World!")
	})))
	http.ListenAndServe(":8080", nil)
}

위의 예제에서 loggingMiddleware 함수는 http.Handler를 반환하며, 이는 요청에 대한 로까을 처리하는 역할을 합니다.

응답 로깅

이어서 HTTP 응답에 대한 로깅을 구현해보겠습니다. 아래의 코드는 응답이 완료되었을 때 상태 코드를 로그에 출력하는 예제입니다.

func loggingMiddleware(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		next.ServeHTTP(w, r)
		log.Printf("Response Status: %d", w.(interface{ Status() int }).Status())
	})
}

위의 예제에서는 ResponseWriterStatus() 메소드를 사용하여 응답 상태 코드를 가져와 로그에 출력하고 있습니다.

결론

net/http 패키지를 사용하면 HTTP 요청과 응답에 대한 로깅을 간단히 처리할 수 있습니다. 위의 예제 코드를 참고하여 웹 애플리케이션에서 로깅을 구현해보세요. 로깅을 통해 애플리케이션의 동작을 모니터링하고 디버깅하는 데 도움이 될 것입니다.

참고 자료

이상으로 net/http 패키지를 사용한 로깅 처리에 대해 알아보았습니다. 추가적인 질문이 있으시면 언제든지 물어봐주세요.