본문 바로가기

golang

Go gin middleware 적용하기

middleware(미들웨어) ??

client <-> server 통신에서, 중복되는 일(인증, 로깅, ...)을 효과적으로 처리하기 위해 middleware를 활용합니다.
cleint <--> middleware <--> server

middleware(미들웨어)를 golang의 API Server 에서 적용시키는 예제를 확인합니다.

예제

지난 포스트 에서 gin 패키지를 이용한 API 를 만들었었는데 비슷하게 활용할 예정이다.

main.go

package main

import "github.com/gin-gonic/gin"

// middleware 구현
func DummyMiddleware() gin.HandlerFunc {
  // Do some initialization logic here
    return func(c *gin.Context) {
        fmt.Println("This is dummy middleware")
        c.Next()
    }
}

// API handler 구현
func requestPing(c *gin.Context) {
    fmt.Println("got ping")
    c.JSON(200, gin.H{
        "message": "pong",
    })
}

func main() {
  // router 초기화
  r := gin.Default()  
  // middleware 설정
  r.Use(DummyMiddleware())
  // handler 설정
  r.GET("/ping", requestPing)  
  // apiserver 실행
  r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")  
}

결과

API CALL

ping API 호출시 기존과 동일하게 pong message 를 확인할 수 있다.

$ curl localhost:8080/ping
{"message":"pong"}%
$ curl localhost:8080/ping
{"message":"pong"}%

server log

아래와 같이 middleware를 통해 API 호출마다 This is dummy middleware 가 프린트 되고있다.

그 외

미들웨어 함수도 일반함수와 동일하게 returning func 를 통해 initialize logic을 수행할 수 있다. 즉, API server 가 실행되며 middleware func 단위로 초기화 로직이 필요한 경우에 위 예제 코드에서 Do some initialization logic here 주석이 있는 곳에 작성하면 된다.
만약 fmt.Println("dummy middleware initialized") 를 작성하면, API server 가 호출될 때 한번만 프린트 된다.

반응형