[Go] Go Web Programming Basic 01
Build a basic web server
Go 언어는 가볍고 빠르며, 효율적인 자원 사용으로 현재 매우 인기가 급상승하고 있는 프로그래밍 언어이다.
서버 개발 및 웹 서비스까지 매우 다양한 용도로 이용되고 있으며, 이번 아티클에서는 간단하게 웹 서비스를 수행할 하는 예제를 작성해 볼 것이다.
Go http 모듈
우리는 우선 간단한 웹 서버를 만들어 볼 것이다.
https://godoc.org/net/http 에서 net/http 모듈을 사용하여 간단한 웹 서버를 만든다.
Hello World 서버
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World")
})
fmt.Println("Server start on port: ", 8080)
log.Fatal(http.ListenAndServe(":8080", nil))
}
위 코드는 가장 기본적인 HelloWorld 를 응답하는 코드이다.
- net/http: 특정 서버로 web 요청을 보내거나, 웹 서버를 생성할 수 있는 모듈이다.
- http.HandleFunc: http.HandleFunc를 이용하면 특정경로 “/” 로 요청이 들어오면, 다음 파라미터인 func 가 수행되되어 응답이 처리된다.
- w http.ResponseWriter: 서버 처리 결과를 응답으로 내려 보내기 위한 Writer 이다.
- r *http.Request: 요청을 담고 있는 포인터 객체이다. 요청이 들어오면 요청의 URI, 파라미터, body 등의 내용을 참조할 수 있다.
- http.ListenAndServe: 웹 서버를 수행한다. 첫번째 파라미터는
호스트명:포트
이며, 두번째 파라미터는 Handler 이다.
Handler 는 타 웹 프로그램에서 컨트롤러로 불리기도 하며, 한마디로 요청에 대한 처리를 담당하는 함수를 말한다.
테스트 하기.
콘솔 화면에서 다음과 같이 실행하자.
✗ go run main.go
Server start on port: 8080
서버가 정상으로 기동 되었다.
✗ curl http://localhost:8080
Hello, World
원하는 응답을 받았다는 것을 확인할 수 있다.
URI 추출하기.
이번에는 요청한 URI 를 추출하여 URI 패스를 반환하는 예제를 확장해보자.
main.go 파일에 다음과 같이 핸들러를 추가하자.
... 생략
http.HandleFunc("/path/value", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Your request path is :%q", html.EscapeString(r.URL.Path))
})
... 생략
위 내용에서 달라진 것은 html.EscapeString … 이 부분이다.
- html.EscapeString(r.URL.Path): Request 객체에서 요청한 URL 을 조회하고, 그중 Path 를 통해서 URI 를 조회한다. 이후 스트링을 Escape 처리한다.
- EscapeString: 특수한 캐릭터 문자를 변환한다. <, >, &, ‘ and “ 값을 안전한 문자로 변경한다.
결과 확인하기.
다시 go run main.go
를 수행하고 다음과 같이 요청을 보내보자.
curl http://localhost:8080/path/value
Your request path is :"/path/value"
경로만 반환되었음을 알 수 있다.
Wrap Up
지금까지 go 를 이용하여 간단한 웹 서비를 만들어 보았다.
이미 제공하는 내장 모듈을 사용하여 쉽게 구현할 수 있었다. 그러나 위처럼 순수하게 http 모듈만을 이용해서는 웹 개발을 하기 위해서 조금 손이 고생해야한다.
다음번에는 라이블러리를 이용하여 웹 서버를 구현해 볼 것이다.
관련 Git 에서 소스코드를 확인 가능