본문 바로가기
한걸음씩/생각정리

[생각정리] golang 프레임워크를 fiber 에서 gin 으로 바꾸며

by TLOWAC 2024. 11. 7.

🏃🏻 들어가며

go 를 처음 배울때는 gin - gorm 조합을 썼었다.

일정 기간 go 를 사용하지 않다가 다시금 go 를 쓰고자 연습을 하는 과정에서 gin 대신 node.js 의 express 와 유사하다고 홍보하는 fiber 를 보게 되었고, 보일러 플레이트 제작 및 연습 프로젝트 제작에 gin 대신 fiber 를 사용하였다.

 

 

API 문서 자료도 gin 보다는 fiber 가 휘황찰란하게 되어 있어 눈길이 더 갔던것도 사실이다.

Gin Docs (왼쪽) / Fiber Docs (오른쪽)

 

 

구현 예제 코드는 2개 다 잘 되어 있다.

무엇인가 구현하고자 한다면 대부분의 예시 코드를 해당 프로젝트에서 만들어 놓아 참고 하기 좋았다.

  1. https://github.com/gofiber/recipes
  2. https://github.com/gin-gonic/examples

 


 

✴️ 고민이 되었던 부분

문제는 gorilla/websocket 을 사용해서 화상채팅 프로젝트를 진행하는 과정에서 발생했다.

net/http 기반으로 제작된 Gin 의 경우 타고 들어가면 Request *http.Request / Writer ResponseWriter 가 존재하지만, 

fasthttp 기반으로 제작된 Fiber 의 경우 타고 들어가도 Request *http.Request / Writer ResponseWriter 가 존재하지 않아 해당 라이브러리 사용이 어려웠다.

 

 

 

 

https://github.com/gorilla/websocket/issues/640

 

 

https://github.com/gorilla/websocket/pull/98 

https://github.com/valyala/fasthttp/issues/18

 

 

 

 

이론상 net/http 보다 10x 빠르다고 설명되어 있는 Fasthttp 기반으로 제작된 Fibernet/http 기반으로 제작된 Gin 중에서 나는 결정을 내려야 했다.

 

golang 에서 거의 표준으로 사용하는 websocket 라이브러리는 gorilla/websocket 였고, 예제와 실섭 구현에 대한 이야기도 이쪽이 훨씬 더 많았기에 프레임워크를 Fiber 에서 Gin 으로 변경하고 gorilla/websocket 를 쓰기로 결정했다. ( Fiber 는 별도의 websocket 미들웨어를 제공 하고 있다. )

 

추후, 많은 기능을 필요로 하는 프로젝트 진행시에는 pion/webrtcgorilla/websocket 를 쓸 생각이다.

 


 

✅  Gin  / Fiber 의 Router 구현체 파고들기

1) Fiber Router ( fasthttp )

 

Router -> Handler

 

Handler -> Ctx

 

Ctx -> *fasthttp.RequestCtx

 

*fasthttp.RequestCtx

 

*fasthttp.RequestCtx

 

2) Gin Router ( net/http )

gin 의 경우 타고 들어가면 Request *http.Request / Writer ResponseWriter 가 존재한다.

 

Router -> HandlerFunc

 

HandlerFunc -> *Context

 

Context -> *http.Request / ResponseWriter

반응형

댓글