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 가 호출될 때 한번만 프린트 된다.
반응형
'golang' 카테고리의 다른 글
golang 조건문 사용시 주의할 점 ! (0) | 2023.08.09 |
---|---|
golang gin API + swagger 적용하기 (0) | 2022.11.15 |
API server를 위한 go Gin 설치하고 사용하기 (예제) (0) | 2022.04.14 |
[golang] go routine과 chan 이용한 메세지 입력 (0) | 2022.03.15 |
[golang] defer, panic, recover (0) | 2022.02.28 |