Go web framework 생각

Developer:Bird·2022년 3월 17일
3

Go

목록 보기
1/2

1.web Framework 소개

1.Gin

Gin은 웹 개발을 위한 중요한 작업을 수행하기 위해 만들어진 매우 간단한 프레임워크입니다. 프레임워크는 빠르고 충돌이나 패닉을 포착하고 복구할 수 있으며 라우팅 기능(웹 응용 프로그램의 모양을 만들 수 있음)이 있고 HTTP 요청에서 오류를 수집하고 렌더링을 수행한다. Gin은 초보자 개발자를 도울 수 있는 GitHub에 대한 광범위한 문서를 보유하고 있다. 그러나 Gin은 대규모 백엔드 애플리케이션이나 엔터프라이즈급 솔루션에서는 작동하지 않는다. httprouter를 이용해서 빠르다.

  • Fast
  • Middleware support
  • Crash-free
  • JSON validation
  • Routes grouping
  • Error management
  • Rendering built-in
  • Extendable

2.Beego

  • 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

3.Iris

Iris는 강력한 기능 세트를 갖춘 효율적이고 잘 설계된 크로스 플랫폼 웹 프레임워크이다. 무한한 잠재력과 이식성을 기반으로 하는 고유한 고성능 웹 애플리케이션 및 API를 구축할 수 있다. ExpressJs와 비슷하다. Iris 기반 웹 애플리케이션은 서버리스로도 배포할 수 있습니다 . AWS 및 Netlify 에서 실행된다.

  • FAMILIAR API
  • SOLID
  • FAST
  • COMPATIBILITY
  • POWERFUL ROUTING
  • LOGGING
  • SCALABLE SESSIONS
  • SCALABLE WEBSOCKET
  • MVC
  • FILE SERVER
  • SMART COMPRESSION
  • VIEWS
  • GRPC
  • CONTENT
  • API VERSIONING
  • SITEMAP
  • AUTHENTICATION AND AUTHORIZATION
  • LOCALIZATION
  • TESTING
  • LOCALHOST

4.Echo

확장 가능한 미들웨어가 있고 중앙 HTTP 오류를 처리하고 렌더링을 수행하고 RESTful API를 빌드하는 데 도움이 되며 TLS 인증서가 포함된다. Net/Http기반이다.

  • Middleware

    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

  • Optimized HTTP router which smartly prioritize routes
  • Build robust and scalable RESTful APIs
  • Group APIs
  • Extensible middleware framework
  • Define middleware at root, group or route level
  • Data binding for JSON, XML and form payload
  • Handy functions to send variety of HTTP responses
  • Centralized HTTP error handling
  • Template rendering with any template engine
  • Define your format for the logger
  • Highly customizable
  • Automatic TLS via Let’s Encrypt
  • HTTP/2 support

5.Fiber

Fiber는 Go용 가장 빠른 HTTP 엔진인 Fasthttp를 기반으로 구축된 Go 웹 프레임워크다. 제로 메모리 할당 및 성능을 염두에 두고 빠른 개발을 용이하게 하도록 설계되었고 Expressjs에 영감받은 만큼 쓰기 편하게 만들어 졌다. 또한 git에 한국어 지원을 한다. 다만 fast/http기반이므로 net/http, HTTP/2에 대한 지원과 잘 호환되지 않고 사용하기 번거로운면이 있다. stdlib을 따르지 않고 자체 framework을 따른다.

  • Robust routing
  • Serve static files
  • Extreme performance
  • Low memory footprint
  • API endpoints
  • Middleware

    Basic Auth
    Cache
    Compress
    CORS
    CSRF
    Encrpy Cookie
    Etag
    Expvar
    Favicon
    FileSystem
    Limiter
    logger
    Monitor
    Pprof
    Proxy
    Recover
    Request
    Session
    Skip
    TimeOut

  • Rapid server-side programming
  • Template engines
  • WebSocket support
  • Server-Sent events
  • Rate Limiter
  • Translated in 15 languages
  • And much more, explore Fiber

2. Fact

  • Git OverView

FrameworkCommitStarForkExampleDocumentationLatest ReleaseLast Commitopen issueRelease Cycle
Gin142356.5k6.4kYesYes6 month ago4 hours ago393108 days
Iris225122k2.4kYesYes16 days ago6 days7320 days
fiber293719k1kYesYes9 days ago2 days ago2314 days
beego422027.9k5.4kYesYes2 month ago12 days ago18107 days
echo151021.9k1.9kYesYesyesterdayyester day4659 days
  • google trend

3. BenchMark

테스트 방식:tps://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview

PlainText

고성능 플랫폼의 용량을 보여주기 위해 설계된 요청 라우팅 기본 사항만을 연습한 것이다. 요청은 HTTP 파이프라이닝을 사용하여 전송된다.

Data Updates

Update 명일때의 Orm의 영속성 객체와 database driver 테스트를 진행한다.

Single Query

프레임워크의 ORM(객체 관계형 매퍼), 난수 생성기, 데이터베이스 드라이버 및 데이터베이스 연결 풀을 실행한다.

Multiple Queries

데이터베이스 드라이버와 연결 풀을 더욱 극적으로 압력을 가하기 위해 여러 행을 가져온다. 테스트된 가장 높은 요청당 쿼리(20)에서 데이터베이스 활동이 증가함에 따라 모든 프레임워크가 초당 요청 0을 향한 수렴을 보여준다.

JSon Serialization

연결 유지 지원, 요청 라우팅, 요청 헤더 구문 분석, 개체 인스턴스화, JSON 직렬화, 응답 헤더 생성 및 요청 카운트 처리량을 포함한 프레임워크 기본 사항을 테스트한다.

동시성 클라이언트

5000개의 클라이언트에서 동시적으로 요청해본다. 0,10,100,500ms의 프로세스시간을 임의로 설정한후 요청해본다.

  • 초당 요청수
  • 처리시간
  • 할당 메모리

4.사용하는 기업들

Gin

34개의 회사

iris

2개의 회사

Echo

50개의 회사

Fiber

5개의 회사

Beego

2개의 회사

5. 결론

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/

profile
끈임없이 발전하자.

0개의 댓글