[go] net/http 패키지를 사용한 HTTP 서버 구현

Go의 표준 라이브러리에는 HTTP 서버를 구현하는 데 사용할 수 있는 net/http 패키지가 있습니다. 이 패키지를 사용하면 간단하게 HTTP 서버를 작성하고 실행할 수 있습니다.

1. 기본 서버 구현하기

다음은 최소한의 구성으로 HTTP 서버를 구현하는 예제 코드입니다:

package main

import (
	"fmt"
	"net/http"
)

func hello(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, 웹!")
}

func main() {
	http.HandleFunc("/", hello)
	http.ListenAndServe(":8080", nil)
}

위 코드에서 http.HandleFunc 함수를 사용하여 요청 경로와 핸들러 함수를 연결하고, http.ListenAndServe 함수를 사용하여 서버를 시작합니다. 위 예제 코드는 루트 경로(/)로 들어오는 모든 요청에 대해 hello 함수를 실행하여 “Hello, 웹!”을 출력합니다.

2. 정적 파일 서빙하기

net/http 패키지를 사용하면 정적 파일을 서빙할 수도 있습니다. 다음은 정적 파일을 서빙하는 예제 코드입니다:

func main() {
	fs := http.FileServer(http.Dir("static"))
	http.Handle("/static/", http.StripPrefix("/static/", fs))
	http.ListenAndServe(":8080", nil)
}

위 코드에서 http.FileServer 함수를 사용하여 정적 파일을 제공할 디렉터리를 지정하고, http.Handle 함수를 사용하여 요청 경로와 핸들러를 연결합니다.

3. 미들웨어 적용하기

net/http 패키지를 사용하면 미들웨어를 적용하여 요청을 처리할 수 있습니다. 다음은 미들웨어를 적용하는 예제 코드입니다:

func logger(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		fmt.Println("접속 로그:", r.RequestURI)
		next.ServeHTTP(w, r)
	})
}

func main() {
	http.Handle("/", logger(http.HandlerFunc(hello)))
	http.ListenAndServe(":8080", nil)
}

위 코드에서 logger 함수는 http.Handler를 반환하며, 요청을 처리한 후에 로그를 출력합니다. 이 함수를 사용하여 원래의 핸들러 함수를 감싸 미들웨어를 적용합니다.

Go의 net/http 패키지를 사용하면 간단하게 HTTP 서버를 구현하고 운영할 수 있습니다. 다양한 기능을 제공하므로 웹 애플리케이션을 개발하는 데 유용하게 활용할 수 있습니다.

더 자세한 내용은 Go 공식 문서를 참고하세요.