2021. 11. 19. 00:14ㆍChallenge/Go
Background
go-app은 기본적으로 go의 내장 모듈인 net/http 를 사용합니다.
net/http는 표준 라이브러리이며, 확장이 용이하고 매우 무궁무진하며 대중적이고 쉽고 간편합니다.
하지만 라우팅 부터 해서 많은 귀차니즘이 발생하기 때문에, 사람들은 대부분 외부 라이브러리에 의존합니다.
뭔가 말투가 번역같아보이는건 나만그런가..?
위 와 같은 이유로 대중적으로 많이 쓰이고 유명한 Gin, Echo, Chi 등이 있습니다.
Gin은 써본적이 있지만, 타 언어와 비교한다면 빠르고 유능한 프레임워크인것이 사실이지만, 제가 생각하는 기준 선상에서는 생각조차 하지 않을정도의 성능입니다...
그럼 뭐가 제일 빠른데?
먼저 Go언어의 빠른 프레임워크로는 fasthttp, fiber, gearbox, atreugo 등이 있습니다.
fiber(피버), gearbox(기어박스), atreugo(아트루고) 이 세 프레임워크는 모두 fasthttp를 기반으로 작성되었습니다.
그 외에도 gramework 라는 친구도 있지만, 공식문서가 없고 아직 성장세인 녀석이라 비교 선상에는 포함하지 않았습니다.
잠깐 fasthttp에 대해서 짚고 가자면,
fasthttp는 go의 내장 모듈인 net/http 대비 최대 10배나 빠른 퍼포먼스를 보여줍니다.
초 고성능을 목표로 개발이 된 프레임워크이며, 초당 수천개의 요청/응답을 처리하고 낮은 응답 지연시간(1~3밀리초)을 제공하기 위한 것 이 아니라면 적합하지 않을 수 있다고 공식적으로 작성되어 있습니다.
그 이유는 fasthttp는 net/http와 전혀 호환되지 않습니다. 인터페이스와 구조체가 다르기 때문에, 어댑터를 통해 변환하는 것 이 아니라면 net/http에서 작성한 Handler, HandlerFunc는 동작하지 않습니다.
또한, go언어로 작성된 여타프레임워크 들과는 다르게 fasthttp는 stdlib을 통해서 C로 작성된 모델입니다.
자세한 내용은 https://husobee.github.io/golang/fasthttp/2016/06/23/golang-fasthttp.html 여기서 확인해보실 수 있습니다.
그런데 여기서 특별한점은 fasthttp를 통해 만들어진, 다른 프레임워크들이 2021.11.19 techmpower 기준 더 높은 퍼포먼스를 보여준다는 현실입니다.
벤치마킹 퍼포먼스가 절대적인 지표는 아닙니다. 단지 참고용으로만 보아야 하는데도 불구하고 저기 높게 솟아오른 기둥들을 보시죠. 저 프레임워크들이 가장 높은 성능을 보여주고 있습니다. 근데 이그래프는 글자가 허구헌날 저렇게나와서 구분하기가 쉽지 않습니다.
fiber vs gearbox vs atreugo
Fiber는 fasthttp를 기반으로 만들었으며, express에 영감을 받고 탄생하였습니다. 솔직히 express.js보단 쓰기 좋은듯...
gearbox는 고성능에 초점을 두고, MSA를 구축하기 위한 프레임워크입니다.
Atreugo는 트래픽이 쏠리는 경로에 메모리 할당이 전혀 없는 고성능 및 확장 가능한 MSA 프레임워크입니다.
우리가 고려해야 할 대상은 먼저 내가 어떠한 목적으로 사용하는지가 가장 중요합니다.
단순히 공부용이고 삽질해도 문제가 없어! 라면 gearbox 와 atreugo를 추천합니다. 성장세를 이루고 있지만 2 프레임워크는 타 웹 프레임워크 대비 아직 Production으로 사용하기엔 많은 contributor가 존재하지 않습니다.
fiber의 가장 큰 장점은 대중적이고, 인기있고, 빠르고, 쉽고, 익숙하고, 공식문서가 존재합니다.
이미 비교선상이 아닌듯하군요...
go-app과 Fiber사용하기
go-app에서는 기본적으로 써있는 공식문서가 있지만... 다른 모듈을 붙여서 쓰려면 내용이 조금 부실한 편입니다.
go-app은 기본적으로 net/http 모듈을 통한 예제를 보여주는데, 이것을 fiber와 같이쓰려면 조금 귀찮은 작업을 필요로합니다. fiber와 go-app을 같이 쓰기 위한 방법은 3편에서 작성하겠습니다.
'Challenge > Go' 카테고리의 다른 글
[go-app/WASM] #4. Vite 사용하기 (0) | 2021.11.22 |
---|---|
[go-app/WASM] #3. Fiber 연결하기 (0) | 2021.11.21 |
[go-app/WASM]. - #1 WASM 그리고 Vugu와 go-app 비교 (0) | 2021.11.18 |
Go 다른 프로젝트 패키지 import (0) | 2020.07.07 |