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 공식 문서를 참고하세요.