python/golang의 web framework전쟁.
By SeukWon Kang
(제목은 반이상 낚시성 )
블로그에 쓰기는 좀 정리가 덜된 글이라 페북에 끄적끄적 하려다 길어 질것 같아 블로그로 작업. ^^ ( 그래서 반말 투입니다. )
golang의 매력에 푸~~욱 빠져서 조강지처 python을 버리고(?) golang으로만 작업을 하고 있는 중에 web작업을 할일이 생겨 golang용 web framework을 찾아보다 생각난 것들..
python에서는 django 가 대규모 작업 시장에서 절대 강자의 위치를 차지하고 있는중에 ( 대항마이었던 turbogear를 귀도가 죽여 버려서) flask가 호시탐탐 기회를 노리고 있고 web2py라고 하는 걸출한 all-in-one이 신규 개발자를 노리고 있는 상황이었다면 ..
아직 어린 언어인 golang은 각지의(다른언어의 프레임웍에 익숙한) 영웅들이 각자의 취향/신념을 걸고 각각 web framework을 만들어 전쟁중인 상황이다.
golang은 (원 개발 사가 google이라 ) 기본적으로 제공되는 http/template 라이브러리가 대단히 강력한 편이라 web framework이 필요할까 생각하고 있었는데 실제로 web 작업을 하게 되니 자잘하게 필요한 것이 꽤 많이 있어서 찾아보았다.
일단 저번 프로젝트에서 websocket을 잘 썼던 gorilla가 있는데 http://www.gorillatoolkit.org/ 이것은 flask/webob 보다 더 minimal해서 거의 해주는 것이 없을 뿐 아니라 이번에 써보니 개발자가 web 개발에 익숙하지 않은듯 session쪽이 영 이상하다. ( session 개념을 헛갈리고 있는 듯한 느낌.. )
그래서 다른 것을 찾아 봤더니 3개 정도가 유명한듯 하다.
revel : http://revel.github.io/index.html beego : http://beego.me/ martini : http://martini.codegangsta.io/
아마도 첫번째로 유명해진 것은 martini 인것 같은데 당신이 martini를 쓰지 말아야 하는 이유 (https://stephensearles.com/?p=254) 같은 글이 있을 정도로 특이한 형태로 구현을 한듯 하다. golang의 type system을 무시하고 injection을 사용 했다고 문제라는 데 아마도 개발자가 dynamic language에 익숙해서 그런게 아닐까 라고 생각해볼수 있겠다.
revel과 beego는 benchmark 이야기가 나오는 것으로 보아 martini는 그 구조 때문에 속도도 그렇게 빠르지는 않은듯..
속도는 revel에 제일 빠르다고 주장하는 데 그건 직접 해봐야 할것 같고.
최근에 많이 보이는 것은 beego인데 아마도 가장 최근에 개발되어 세를 불리고 있는 듯 하다.
일단 현재 작업 중인 gorilla의 한계가 보여 다른 것을 찾아 봤는데 어느 것을 사용할지는 좀더 고민해 봐야 겠다.
어느것을 사용하던 기존에 gorilla로 작업한 것을 걷어낼 생각을 하니 한숨만..
2014.10.17 (다음날 추가) 편견을 가지기에 충분할 만한 정보 들 일단 martini는 제외하고 ( 쓸생각이 없음 )
까먹고 있었는데 boogo는 중국(대만인지도)계 개발자 가 만든 것이고 ( 문서가 영어와 중국어로 존재 - 주사용 회사들도 다 중국관련) - 중국 IT 의 약진을 보여 주는 것일지도. 일단 소스가 open이니 불안해할 이유는 없을듯.
재미있는 것은 revel, beego 둘다 rails 류의 프로젝트 생성을 지원하는데 revel은 django, beego는 web2py의 향기가 살짝 난다는 거 ^^
http://www.techempower.com/benchmarks/#section=data-r9&hw=i7&test=query 같은 사이트에 bench 가 올라가 있는 것을 보면 revel쪽이 더 성숙한 프로젝트인 것 같다.