Go(Golang) - Http 서버 내용 설명
오늘은 Golang의 표준 지원 패키지인 net/http의 웹 관련 지원 기능(Server & Client)에 대해서 간단하게
예제를 작성해보면서 설명드리겠습니다.
Go언어에서는 강력한 웹 관련 지원 패키지를 통해서 누구나 손쉽게 웹 서버 구축 및 어플리케이션 제작을
할 수 있도록 손 쉬운 설명의 레퍼런스 및 기능을 지원하고 있습니다.
특히, ListenAndServer, HandleFunc, Handle 등의 메소드의 기능을 정확하게 이해 및 숙지해야 Golang의
Http 패키지의 기능을 사용할 수 있습니다.
간단한 예제를 통해서 Request(요청) 및 Response(응답)에 대한 기능을 살펴보겠습니다.
가능하면 소스코드를 다운로드 받으셔서 IDE에서 반드시 실행해보시길 권장드립니다.
Go 관련 포스팅 : Golang 관련
Go 관련 포스팅 : Golang 관련
Go(Golang) - Http 활용 기본 설명
보통 Golang net/http 패키지 실행 흐름 구조는 아래와 같이 쉽게 나타낼 수 있으며, 관련 예제는 하단에서
설명합니다.
Golang Http 처리 기본 흐름 - 출처
Go(Golang) - Http 활용 예제 소스 코드
Golang - net/http 패키지의 ListenAndServe 메소드를 통해서 서버를 실행 한 후 기본 요청에 대해서
응답 후 관련 Log 내용을 콘솔(Console)에 출력하는 쉬운 예제입니다.
아래 예제를 통해서 요청과 응답의 기본 흐름을 익히실 수 있습니다.
go_http.go
12345678910111213141516171819202122232425262728293031323334353637 package main //필요 패키지 임포트import ( "fmt" "log" "net/http" "strings") func defaultHandler(w http.ResponseWriter, r *http.Request) { r.ParseForm() //Get 파라미터 및 정보 출력 fmt.Println("default : ", r.Form) fmt.Println("path", r.URL.Path) fmt.Println("param : ", r.Form["test_param"]) //Parameter 전체 출력 for k, v := range r.Form { fmt.Println("key:", k) fmt.Println("val:", strings.Join(v, "")) } //기본 출력 fmt.Fprintf(w, "Golang WebServer Working!")} func main() { //기본 Url 핸들러 메소드 지정 http.HandleFunc("/", defaultHandler) //서버 시작 err := http.ListenAndServe(":9090", nil) //예외 처리 if err != nil { log.Fatal("ListenAndServe: ", err) } else { fmt.Println("ListenAndServe Started! -> Port(9090)") }} cs
- 4-8번 라인 : golang Http 예제 작성을 위한 필요 패키지 로드
- 11번 라인 : 기본 Url 요청(/)에대한 Response Handler(처리 함수) 선언- 14-16번 라인 : Get 방식의 Url요청에 대한 Path(경로), Parameter 등 출력- 18-21번 라인 : Get 방식 Request의 Parameter에 대한 모든 Key, Value 값 출력
- 30번 라인 : 서버 시작 - 9090 포트- 32-36번 라인 : 서버 시작 실패 시 예외 처리
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | package main //필요 패키지 임포트 import ( "fmt" "log" "net/http" "strings" ) func defaultHandler(w http.ResponseWriter, r *http.Request) { r.ParseForm() //Get 파라미터 및 정보 출력 fmt.Println("default : ", r.Form) fmt.Println("path", r.URL.Path) fmt.Println("param : ", r.Form["test_param"]) //Parameter 전체 출력 for k, v := range r.Form { fmt.Println("key:", k) fmt.Println("val:", strings.Join(v, "")) } //기본 출력 fmt.Fprintf(w, "Golang WebServer Working!") } func main() { //기본 Url 핸들러 메소드 지정 http.HandleFunc("/", defaultHandler) //서버 시작 err := http.ListenAndServe(":9090", nil) //예외 처리 if err != nil { log.Fatal("ListenAndServe: ", err) } else { fmt.Println("ListenAndServe Started! -> Port(9090)") } } | cs |
- 4-8번 라인 : golang Http 예제 작성을 위한 필요 패키지 로드
- 11번 라인 : 기본 Url 요청(/)에대한 Response Handler(처리 함수) 선언
Golang - net/http 의 추가적인 상세 설명은 이 곳을 참고해 주세요.
Golang - net/http 의 추가적인 상세 설명은 이 곳을 참고해 주세요.
Go(Golang) - Http 실제 실행 화면
아래 이미지로 실제 실행 화면을 확인하실 수 있습니다. 서버 실행 후 브라우저에서 테스트 해보세요.
실제 실행 화면
마무리
이번 포스팅에서는 Golang의 net/http 패키지의 기본 사용 방법을 알아보았습니다.
여기에서 세션, 쿠키, 데이터베이스 연결, 라우팅(Routing) 기능등을 추가하면 훌륭한 웹 어플리케이션을
제작할 수 있습니다.
아울러 Golang 언어만이 가지고 있는 고유의 동시성 프로그래밍(Gorutine) 등의 활용을 통해서 성능적으로
월등하게 제작할 수 있습니다.
하지만 위와같이 웹 서버를 개발하는 것 보다는 이미 검증되고 해외 대규모 사이트에서 사용하고 있는
Revel, Gorilla와 같은 범용 프레임워크를 사용해서 개발하는 것이 개발 생산성 향상과 안정성있게 개발
할 수 있다는 것을 꼭 알아두셨으면 합니다.
다음 시간에는 net/http 패키지의 라우팅 기능에 대해서 포스팅 하겠습니다. 감사합니다.
소스코드 다운로드 : go_http.zip
'언어 > Go' 카테고리의 다른 글
Go(Golang) - ioutil 활용 파일 읽기(Read), 쓰기(Write) 예제 및 소스파일 (2) | 2018.07.06 |
---|---|
Go(Golang) - 웹 서버(Web Server) Logging 구현(Http) 예제 및 소스파일 (0) | 2018.06.29 |
Go(Golang) - 맥(Mac) 개발 환경 설치 및 기본 설정 정리(2) (0) | 2018.03.30 |
Go(Golang) - 맥(Mac) 개발 환경 설치 및 기본 설정 정리(1) (5) | 2018.03.27 |
Go(Golang) - 윈도우 개발 환경 설치 및 기본 설정 정리(2) (4) | 2018.03.24 |