Go(Golang) - Logging Handler 설명
오늘은 Golang의 표준 지원 패키지인 net/http의 웹 관련 지원 기능(Server & Client) 중 하나인
HandleFunc을 사용해서 커스텀 미들웨어를 작성해서 Logging Hanlder를 구현하는 예제를 해보겠습니다.
Go언어에서는 강력한 웹 관련 지원 패키지를 통해서 누구나 손쉽게 웹 서버 구축 및 어플리케이션 제작을
할 수 있도록 손 쉬운 설명의 레퍼런스 및 기능을 지원하고 있습니다.
가능하면 소스코드를 다운로드 받으셔서 IDE에서 반드시 실행해보시길 권장드립니다.
Go 관련 포스팅 : Golang 관련
Go 관련 포스팅 : Golang 관련
Go(Golang) - net/http 기본 흐름 구조
보통 Golang net/http 패키지 실행 흐름 구조는 아래와 같이 쉽게 나타낼 수 있으며, 관련 예제는 하단에서
설명합니다.
Golang Http 처리 기본 흐름 - 출처
Go(Golang) - 미들웨어(MiddlerWare) Logging 구현 예제 소스
Golang - net/http 패키지의 HandleFunc 메소드를 통해서 요청에 대한 서버측 Logging을 구현했습니다.
아래 예제를 통해서 기본 흐름을 익히실 수 있습니다.
go_http.go
1234567891011121314151617181920212223242526272829303132333435363738394041 //Go - net/http 미들웨어 - Log 사용 예제package main import ( "fmt" "log" "net/http") //미들웨어 함수 선언(Return : func)func logging(f http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { log.Println("MiddleWare Test(Log) : ", r.URL.Path) f(w, r) }} //요청1 핸들러func req_test1(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Requested : (/req-test1)")} //요청2 핸들러func req_test2(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Requested : (/req-test2)")} func main() { //핸들러 메소드 지정1 http.HandleFunc("/req-test1", logging(req_test1)) //핸들러 메소드 지정2 http.HandleFunc("/req-test2", logging(req_test2)) //기본 출력 fmt.Println("Golang WebServer Working!") //서버 시작 http.ListenAndServe(":9090", nil) } cs
- 4-8번 라인 : golang Http 예제 작성을 위한 필요 패키지 로드
- 10번 라인 : 미들웨어 함수 선언 -> 리턴 값은 함수(func)- 19번 라인 : 요청(/req_test1)에 대한 응답 핸들러 지정- 24번 라인 : 요청(/req_test2)에 대한 응답 핸들러 지정- 39번 라인 : 서버 시작 - 9090 포트
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 38 39 40 41 | //Go - net/http 미들웨어 - Log 사용 예제 package main import ( "fmt" "log" "net/http" ) //미들웨어 함수 선언(Return : func) func logging(f http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { log.Println("MiddleWare Test(Log) : ", r.URL.Path) f(w, r) } } //요청1 핸들러 func req_test1(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Requested : (/req-test1)") } //요청2 핸들러 func req_test2(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Requested : (/req-test2)") } func main() { //핸들러 메소드 지정1 http.HandleFunc("/req-test1", logging(req_test1)) //핸들러 메소드 지정2 http.HandleFunc("/req-test2", logging(req_test2)) //기본 출력 fmt.Println("Golang WebServer Working!") //서버 시작 http.ListenAndServe(":9090", nil) } | cs |
- 4-8번 라인 : golang Http 예제 작성을 위한 필요 패키지 로드
- 10번 라인 : 미들웨어 함수 선언 -> 리턴 값은 함수(func)
Golang - net/http 의 추가적인 상세 설명은 이 곳을 참고해 주세요.
Golang - net/http 의 추가적인 상세 설명은 이 곳을 참고해 주세요.
Go(Golang) - 미들웨어(MiddleWare) 실행 화면
아래 이미지로 실제 실행 화면을 확인하실 수 있습니다. 서버 실행 후 브라우저에서 테스트 해보세요.
실제 실행 화면
마무리
타 언어와 마찬가지로 기본적으로 제공되는 미들웨어(MiddleWare)를 제외한 나머지 커스텀 미들웨어는
직접 작성해서 관련된 동작을 수행해야 합니다.
Golang에서는 웹 서버 관련 커스텀 미들웨어를 쉽게 개발할 수 있는 기본적인 레이아웃이 정의되어
있어 필요한 기능들을 손쉽게 개발 가능하게 합니다.
하지만 위와같이 웹 서버를 개발하는 것 보다는 이미 검증되고 해외 대규모 사이트에서 사용하고 있는
Revel, Gorilla와 같은 범용 프레임워크를 사용해서 개발하는 것이 개발 생산성 향상과 안정성있게 개발
할 수 있다는 것을 꼭 알아두셨으면 합니다.
다음 시간에는 net/http 패키지의 다른 주요 기능에 대해서 포스팅 하겠습니다. 감사합니다.
소스코드 다운로드 : go_logging.zip
'언어 > Go' 카테고리의 다른 글
Go(Golang) - 자료구조 Stack(스택) 작성 예제 및 소스파일 (1) | 2018.10.02 |
---|---|
Go(Golang) - ioutil 활용 파일 읽기(Read), 쓰기(Write) 예제 및 소스파일 (2) | 2018.07.06 |
Go(Golang) - 웹 서버(Web Server) 기초 구현(Http) 예제 및 소스파일 (2) | 2018.06.27 |
Go(Golang) - 맥(Mac) 개발 환경 설치 및 기본 설정 정리(2) (0) | 2018.03.30 |
Go(Golang) - 맥(Mac) 개발 환경 설치 및 기본 설정 정리(1) (5) | 2018.03.27 |