티스토리 뷰

golang

Golang Gin Gonic - 5. Middleware

주먹불끈 2021. 10. 5. 16:48

간단한 API 서버를 제외하고는 웹서비스의 전형적인 HTTP API server 실무에서 개발한 적이 없다. 유튜브에서 Golang 대표적인 web framework Gin 이용한 좋은 강좌를 만나 이를 하나씩 따라하려고 한다. 

 

다섯 번째로 미들웨어에 대해 알아본다.

 

Playlist: Rest API in Golang using Gin Gonic: https://bit.ly/3hsZKbv

YouTube. Grouping Rest API's in Golang using Gin: https://youtu.be/sh80Do4yIqA

 

구현해본 GitHub repo: https://github.com/nicewook/gin-gonic-study

이번 블로그 포스팅 소스코드: https://github.com/nicewook/gin-gonic-study/tree/main/middleware-5

 

 

개요

 

미들웨어는 request 처리하기 전에 사전작업을 하는 것이라 보면 된다.

이때 API group 대해 미들웨어를 적용하면 해당 그룹의 모든 API 대한 request 처리하기 전에 미들웨어를 거치게 된다.

 

예제에서는 v1 API그룹에 대해서는 header "auth-token" key 대해 "secret-token" 이라는 value 있는 체크하는 authenticateMiddleware 적용하고

v1 API 그룹 중에서도 user API 그룹에 대해서는 "age" key 대해 18이상의 값인지를 체크하도록  ageCheckMiddleware 적용해 보았다.

 

authenticateMiddleware, ageCheckMiddleware

 

v1.Use() authenticateMiddleware 사용하겠다고 등록했다. 따라서 하위 그룹인 user, product 그룹의 모든 API들이 미들웨어를 거치게 된다.

user.Use() ageCheckMiddleware 사용하겠다고 등록했다. 경우는 user API 그룹 전체가 미들웨어를 거치게 된다.

 

미들웨어들 간의 적용순서는 .Use() 등록된 순서를 따른다.

 

미들웨어 구현을 보자

 

authenticateMiddleware 경우 header "auth-token" key 대한 값이 있는지, 값이 "secret-token"인지를 확인하고 처리한다 그리고 값이 있다면 c.Keys "received-token"이라는 key value 넣어준다.

 

ageCheckMiddleware 경우 header "age" key 대한 값이 있는지, 값이 18이상 인지를 확인하고 처리한다

그리고 나서 c.Keys "user-age"라는 key value 넣어준다.

 

user group 테스트 해보자

 

"auth-token" 없으면 미들웨어를 통과하지 못한다

"auth-token" 값이 "secret-token" 아니면 미들웨어를 통과하지 못한다

"auth-token" 맞아도 "age" 18보다 적으면 미들웨어를 통과하지 못한다

"auth-token" 맞고 "age" 18이상이면 미들웨어를 통과한다

이때, server 측의 log 보자

- c.Keys 통해 값들이 전달된 것을 있다.

- 또한 중요한 것은 미들웨어의 실행 순서이다.

- authenticateMiddleware가 먼저 처리된 다음 c.Next() 통해 다음 미들웨어인 ageCheckMiddleware가 실행된다.

- 다시 ageCheckMiddleware의 c.Next() 처리되어 실제 handler 전달이 되고

- 그제서야 ageCheckMiddleware의 c.Next() 다음 라인, 다음 authenticateMiddleware의 c.Next() 다음 라인이 실행된다.

2021/10/05 16:32:39 authenticateMiddleware passing
2021/10/05 16:32:39 ageCheckMiddleware passing
2021/10/05 16:32:39 received token: secret-token, user age: 18
2021/10/05 16:32:39 ageCheckMiddleware passed already
2021/10/05 16:32:39 authenticateMiddleware passed already

 

 

product group 테스트 해보자

 

header "age" 정보가 없어도 미들웨어를 통과한다

 

반응형
반응형
잡학툰 뱃지
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
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
글 보관함