Go Web Programming: [03/02] Build a Simple Web Server
Build a Simple Web Server
앞 절에서 Web은 http 프로토콜에 기반한 서비스
라고 설명 했습니다.
Go 언어에서는 net/http
패키지를 통해서 웹에 대한 전반적인 기능을 제공하고 있습니다.
http 패키지
를 통해서 Web 서비스를 아주 쉽게 작성할 수 있습니다.
이와 동시에 이 패키지를 사용해서 쉽게 Web 라우팅 정적 파일, 템플릿, cookie 등의 데이터에 대해서 설정하고
조작 할 수 있습니다.
http 패키지로 Web 서버 제작
package main
import (
"fmt"
"net / http"
"strings"
"log"
)
func sayhelloName(w http.ResponseWriter, r *http.Request) {
r.ParseForm() // 옵션을 분석합니다. 기본적으로 분석하지 않습니다.
fmt.Println(r.Form) // 서버의 분석 데이터를 출력됩니다.
fmt.Println("path"r.URL.Path)
fmt.Println("scheme"r.URL.Scheme)
fmt.Println(r.Form ["url_long"])
for k, v := range r.Form {
fmt.Println("key :", k)
fmt.Println("val :", strings.Join(v, ""))
}
fmt.Fprintf(w,"Hello XenoStream!") // w에 기록하는 것이 클라이언트에 출력 됩니다.
}
func main () {
http.HandleFunc("/", sayhelloName) // 접근 라우팅을 설정 합니다.
err := http.ListenAndServe(": 9090", nil) // 대기하는 포트를 설정 합니다.
if err != nil {
log.Fatal("ListenAndServe :", err)
}
}
위의 코드를 Web.go로 저장하고, go build web.go
명령으로 빌드한 후, web.exe
를 실행하면
9090 포트에서 http 연결 요청
을 모니터링하며 대기 합니다.
웹 브라우저에서 http://localhost:9090
을 입력하고 엔터키를 입력하면, 웹 브라우저의 화면에
Hello XenoStream!
이라는 문자열이 출력된 것을 알 수 있습니다.
웹 브라우저의 주소입력란에서 다음과 같이 입력하시길 바랍니다.
http://localhost:9090/?url_long=111&url_long=222
웹 브라우저에 출력 되는 내용은 무엇일까요? 서버에서 출력되는 내용은 다음과 같습니다.
그림 3.8 사용자가 Web에 액세스하여 입력한 정보를 서버에서 출력하는 정보
위의 코드에서 알 수 있듯이 Web 서버
를 제작하는 것은 단지, http 패키지
의 두가지 함수를 호출하는것
으로만 처리됨을 알 수 있습니다.
만약 PHP 프로그래머 였다면, 이런 궁금증이 생길수도 있겠습니다. nginx, apache와 같은 별도의 웹서버는 필요
하지 않나요? Go
언어에서는 net/http
패키지에서 직접 tcp 포트를 감시하기 때문에 별도의 웹서버가 필요하지
않습니다. 예제에서 사용한 sayhelloName()
함수는 php의 컨트롤러(controller) 함수와 유사합니다.
만약 Python 프로그래머 였다면, tornado
를 알고 있을 것입니다. 예제 코드와 유사함을 알 수 있습니다.
Go
언어는 Python
과 같은 동적 언어와 비슷한 특성
을 가지고 있습니다.
이렇듯, Go
를 이용해서 Web 응용 프로그램
을 작성하는 매우 간단하고 편리하기 까지 합니다.
만약 Ruby 프로그래머 였다면, ROR의 /script/server
를 사용하는 것과 약간 유사함을 알 수 있습니다.
Go
언어를 통해서 간단한 몇 줄의 코드를 입력하는 것만으로도 web 서버를 제작할 수 있을을 알게 되었습니다.
또한 이렇게 생성된 Web 서버는 내부에서는 멀티스레드 특성을 지원 합니다.
이어지는 두 절에서 Go
에서 Web 멀티스레드를 어떻게 구현해서 처리하는지를 자세히 설명 합니다.