Golang의 Web Framework에 대해 비교해보려고 합니다.
Golang이 기본 라이브러리로 http를 지원하긴 하지만, 다양한 Web Service를 구축하기 위해서는 Web Framework을 사용하는게 낫다고 생각합니다.
(물론 모든 기능이 필요 없을 수도 있어서 만들어도 되긴 합니다.)
Golang으로 개발한 Web Framework는 종류가 정말 많습니다.
- Revel
- Iris
- Echo
- Gin
- Buffalo
- Gocraft
- Gorilla
- 등등...
그래서 전체적으로 Web Framework를 파악하기 위해서 여러 사이트를 뒤져보았습니다.
먼저, https://github.com/najeira/go-frameworks-benchmark 에서 benchmarking 테스트 한 것을 보면 다음과 같습니다.
BenchmarkBoneParam-4 1000000 1321 ns/op 1232 B/op 10 allocs/op
BenchmarkChiParam-4 2000000 952 ns/op 864 B/op 7 allocs/op
BenchmarkEchoParam-4 2000000 959 ns/op 592 B/op 9 allocs/op
BenchmarkGinParam-4 2000000 640 ns/op 480 B/op 5 allocs/op
BenchmarkGocraftParam-4 1000000 1342 ns/op 1064 B/op 12 allocs/op
BenchmarkGojiParam-4 2000000 968 ns/op 768 B/op 6 allocs/op
BenchmarkGorillaParam-4 500000 2401 ns/op 1712 B/op 14 allocs/op
BenchmarkHttpParam-4 1000000 1104 ns/op 848 B/op 7 allocs/op
BenchmarkKamiParam-4 1000000 1223 ns/op 1216 B/op 10 allocs/op
BenchmarkMartiniParam-4 200000 6145 ns/op 1680 B/op 20 allocs/op
BenchmarkSiestaParam-4 1000000 2209 ns/op 2025 B/op 23 allocs/op
위 표를 읽는 방법은 인덱스 별로 다음과 같이 하면 됩니다.
1. Web Framework 이름
2. Loop 횟수
3. Operation(1 Loop) 당 speed (ns 단위)
4. Operation(1 Loop) 당 할당된 byte
5. Operation(1 Loop) 당 메모리 할당
(4, 5번의 차이는 문서를 통해 확인해야 될 것 같습니다.)
이렇게 보면 확실히 성능은 Chi, Gin, Echo, Goji가 나아보입니다.
bone: 1456 Bytes
chi: 1168 Bytes
echo: 2736 Bytes
gin: 824 Bytes
gocraft: 1616 Bytes
goji: 40216 Bytes
gorilla: 4808 Bytes
http: 624 Bytes
kami: 1968 Bytes
martini: 82032 Bytes
siesta: 680 Bytes
그런데 각 Web Framework 당 할당된 byte를 보면 goji는 압도적으로 많은 메모리를 사용하는 것을 알 수 있습니다. (그래서 제외)
나머지는 비슷비슷하다는 건데...
결국은 각 Web Framework에서 제공해주는 기능에 따라 선택이 달라질 수 있습니다.
아래 표를 확인하겠습니다.
https://dev.to/speedwheel/top-6-web-frameworks-for-go-as-of-2017-34i
확실히 기능이 심플한 것도 있고 정말 여러 기능을 제공해주는 Framework도 있습니다.
결론적으로 제공하려는 서비스의 기능에 따라 Web Framework의 선택하면 됩니다.
첨언을 하자면..현재(2018년)를 기준으로 Echo와 Gin의 구도로 보이긴 합니다. (아래 Reddit 참조.)
https://www.reddit.com/r/golang/comments/84kszy/echo_vs_gin_just_for_fun/
'IT > Web' 카테고리의 다른 글
[GraphQL] SDL (Schema Definition Language) (0) | 2019.03.16 |
---|---|
[GraphQL] Architecture Pattern (0) | 2019.03.16 |
[GraphQL] Overview (0) | 2019.03.15 |
댓글