Gin은 웹 개발을 위한 중요한 작업을 수행하기 위해 만들어진 매우 간단한 프레임워크입니다. 프레임워크는 빠르고 충돌이나 패닉을 포착하고 복구할 수 있으며 라우팅 기능(웹 응용 프로그램의 모양을 만들 수 있음)이 있고 HTTP 요청에서 오류를 수집하고 렌더링을 수행한다. Gin은 초보자 개발자를 도울 수 있는 GitHub에 대한 광범위한 문서를 보유하고 있다. 그러나 Gin은 대규모 백엔드 애플리케이션이나 엔터프라이즈급 솔루션에서는 작동하지 않는다. httprouter를 이용해서 빠르다.
Beego에는 인터페이스 및 구조체 임베딩과 같은 보다 구체적인 기능이 있다. 프레임워크는 테스트, 패키징 및 배포를 자동화하여 웹 앱 구축을 더 빠르게 만든다. 또한 QPS, 메모리 및 CPU 사용량, 고루틴 상태를 모니터링하여 개발자가 웹 앱을 완전히 제어할 수 있다. 게다가, Beego는 소프트웨어 데이터베이스를 구성하는 프로세스를 상당히 단순화하는 자체 ORM(Object-Relationship Map)을 가지고 있다. 광범위한 기능과 복잡한 코어로 인해 초보자에게는 적합하지 않을 수 있지만 동일한 명령줄로 Django 사용자를 놀라게 할것이다.
RESTful support
MVC architecture
Modularity
orm
session
logs
config
cache
context
admin
httplib
task
i18n
Auto API documents
Annotation router
Namespace
Powerful development tools
Full stack for Web & API
Iris는 강력한 기능 세트를 갖춘 효율적이고 잘 설계된 크로스 플랫폼 웹 프레임워크이다. 무한한 잠재력과 이식성을 기반으로 하는 고유한 고성능 웹 애플리케이션 및 API를 구축할 수 있다. ExpressJs와 비슷하다. Iris 기반 웹 애플리케이션은 서버리스로도 배포할 수 있습니다 . AWS 및 Netlify 에서 실행된다.
확장 가능한 미들웨어가 있고 중앙 HTTP 오류를 처리하고 렌더링을 수행하고 RESTful API를 빌드하는 데 도움이 되며 TLS 인증서가 포함된다. Net/Http기반이다.
Basic Auth
Body Dump
Body Limit
Casbin Auth
CORS
CSRF
Decompress
Gzip
Jaeger
JWT
Key Auth
Logger
Method Override
Prometheus
Proxy
Rate Limiter
Recover
Redirect
Request ID
Rewrite
Secure
Session
Static
Timeout
Trailing Slash
Fiber는 Go용 가장 빠른 HTTP 엔진인 Fasthttp를 기반으로 구축된 Go 웹 프레임워크다. 제로 메모리 할당 및 성능을 염두에 두고 빠른 개발을 용이하게 하도록 설계되었고 Expressjs에 영감받은 만큼 쓰기 편하게 만들어 졌다. 또한 git에 한국어 지원을 한다. 다만 fast/http기반이므로 net/http, HTTP/2에 대한 지원과 잘 호환되지 않고 사용하기 번거로운면이 있다. stdlib을 따르지 않고 자체 framework을 따른다.
Basic Auth
Cache
Compress
CORS
CSRF
Encrpy Cookie
Etag
Expvar
Favicon
FileSystem
Limiter
logger
Monitor
Pprof
Proxy
Recover
Request
Session
Skip
TimeOut
Framework | Commit | Star | Fork | Example | Documentation | Latest Release | Last Commit | open issue | Release Cycle |
---|---|---|---|---|---|---|---|---|---|
Gin | 1423 | 56.5k | 6.4k | Yes | Yes | 6 month ago | 4 hours ago | 393 | 108 days |
Iris | 2251 | 22k | 2.4k | Yes | Yes | 16 days ago | 6 days | 73 | 20 days |
fiber | 2937 | 19k | 1k | Yes | Yes | 9 days ago | 2 days ago | 23 | 14 days |
beego | 4220 | 27.9k | 5.4k | Yes | Yes | 2 month ago | 12 days ago | 18 | 107 days |
echo | 1510 | 21.9k | 1.9k | Yes | Yes | yesterday | yester day | 46 | 59 days |
테스트 방식:tps://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview
고성능 플랫폼의 용량을 보여주기 위해 설계된 요청 라우팅 기본 사항만을 연습한 것이다. 요청은 HTTP 파이프라이닝을 사용하여 전송된다.
Update 명일때의 Orm의 영속성 객체와 database driver 테스트를 진행한다.
프레임워크의 ORM(객체 관계형 매퍼), 난수 생성기, 데이터베이스 드라이버 및 데이터베이스 연결 풀을 실행한다.
데이터베이스 드라이버와 연결 풀을 더욱 극적으로 압력을 가하기 위해 여러 행을 가져온다. 테스트된 가장 높은 요청당 쿼리(20)에서 데이터베이스 활동이 증가함에 따라 모든 프레임워크가 초당 요청 0을 향한 수렴을 보여준다.
연결 유지 지원, 요청 라우팅, 요청 헤더 구문 분석, 개체 인스턴스화, JSON 직렬화, 응답 헤더 생성 및 요청 카운트 처리량을 포함한 프레임워크 기본 사항을 테스트한다.
5000개의 클라이언트에서 동시적으로 요청해본다. 0,10,100,500ms의 프로세스시간을 임의로 설정한후 요청해본다.
34개의 회사
2개의 회사
50개의 회사
5개의 회사
2개의 회사
go framework에 대한 논의에서 어떤 Framework를 사용하는게 좋은지에 대한 심의높은 토론이 이루어졌고, Go의 경우 표준 라이브러리가 잘돼있고, Framework의 필요성을 느껴본적이 없는 경우가 많았다.
응답속도가 중요한 프로젝트의 경우에는 fasthttp 기반의 iris나 Fiber를 사용하는 것이 좋은 선택일 수 있을 것 같다.
빠른 개발이 필요할 경우는 미드 웨어가 잘 구성돼있는 Beego, Echo가 좋은 선택일 것 같다.
프레임워크를 쓰는 순간, 프레임워크에 틀을 맞추고, 특정 라이브러리에 의존하게 되는 문제가 생겨서 안 쓰는 것도 하나의 방법이다. 즉 개발을 진행하다 어려운 점이나 개발의 생산성을 떨어트리는 포인트가 생길 때, 프레임워크가 하나의 해결책으로 생각하는 게 좋을 것 같다.
참조:
https://github.com/kataras/iris
https://github.com/gin-gonic
https://github.com/gofiber/fiber
https://github.com/beego/beego
https://github.com/labstack/echo
https://echo.labstack.com/
https://blog.logrocket.com/5-top-go-web-frameworks/
https://docs.gofiber.io/extra/benchmarks
https://gofiber.io/
https://dev.to/ja7ad/best-golang-web-framework-for-larg-projects-29b
https://www.reddit.com/r/golang/comments/krkbf5/which_go_framework_should_i_learn/giaj5zx/