요즘 Rust를 추천 하는 글들이 많이 올라오니 Go에 대해서도 추천하는 글을 써봅니다.
By SeukWon Kang
TLDR python 에서 행복했던 분들은 Go를 C++/Java 에서 행복했던 분들은 Rust를 고민해 보는 것도 좋을 것으로 생각합니다.
go에 대한 해외의 평가는 C++을 잡으려고 go를 만들었더니 python을 잡고 있다. 라고 하더군요. ^^ C++ 프로그래머는 go로 전향하는 경우가 적은데 python 프로그래머는 go로 전향하는 비율이 꽤 높답니다.
구글+ 에 올린 http://kasw.blogspot.kr/2015/02/goguelike.html “python에서 죽어라 고생해도 달성할수 없던 것을 너무 간단히 달성해서 허탈할뿐.. " 이란 멘트에 달린 Go가 좋은 가요? 란 (의미의) 질문에 아무생각없이 “추천할만 합니다.” 란 글을 달고 보니 이런 저런 생각이 나서 적는 글입니다.
저는 C/C++은 10년 넘게 (과거에) 썼었고 python역시 그이후에 10년 정도를 실무에 사용한 경험이 있습니다.
python으로 전향한 이유는 C++의 그 답안나오는 복잡도와 떨어지는 생산성때문이었고 ( 요즘 C++은 많이 좋아 진것 같더군요. ) python으로 실무를 하면서 같이 일하던 친구들을 가르쳐서 실무를 시켜보기도 했습니다.
이 과정에서 같이 python으로 작업했던 친구들 (대부분 C++을 중급이상으로 쓸수 있는 친구들이었습니다. ) 모두가 만족스러워 했습니다.
다만 모두가 한 목소리로 “속도만 좀 어떻게 되면 C++따위는 집어 칠텐데라고 했구요.” 저도 그거에 동의하는 편입니다.
그래서 python으로 어디까지 성능을 올릴수 있는지에 대해 꽤 많은 작업들을 했습니다. 간단히 이야기해서 pypy, cython, swig, greenlet(stackless, eventlet, 등의 coroutine ), twisted, multiprocessing 등을 모두 테스트 해보고 일부는 적용했었습니다.
그 결과는 실무에 필요한 80%정도의 일은 python으로 해결 가능하다 였습니다.
하지만 이를 얻기 위해 python에서 포기해야 하는 장점도 많았지요. 그리고 그럼에도 불구하고 넘을수 없는 성능상의 벽이 존재했습니다.
그리고 나서 go를 보게되고 1년 정도 공부하고 테스트 해보고 “이건 되겠다.” 고 결론을 내리고 실 프로젝트를 진행했습니다.
2012년 9월 부터 쓴 5개의 글이 그 기록이지요. http://kasw.blogspot.kr/2012/09/go.html http://kasw.blogspot.kr/2012/09/go-2n.html http://kasw.blogspot.kr/2012/09/go-3n.html http://kasw.blogspot.kr/2012/10/go-4n.html http://kasw.blogspot.kr/2013/08/go-5n.html
그리고 나서 go4game , goguelike의 프로젝트를 진행해봤습니다. 제 입장에선 둘다 go의 능력을 파악하기위한 기술실증용 프로젝트였습니다. ( goguelike는 12000라인 정도에 60여개 모듈로 구성되어 있습니다. )
그러고나서 네트웍 벤치를 실행해보니 “python에서 죽어라 고생해도 달성할수 없던 것을 너무 간단히 달성해서 허탈할뿐.. " 입니다. ( 뭐 대충 예상은 하고 있었지만요. )
예를 들자면 타쿠미가 이니셜D에서 86으로 위험을 감수해 가며 고생해서 달성했던 속도를 임프레자로 쉽고 안전하게 달성하고서 느끼는 허탈감일 겁니다. ( 좀 오버겠지만 )
분명히 go는 강력하고 쉽습니다. 하지만 python 만큼 간단한 언어는 아니지요. 다만 python의 능력을 마지막까지 쥐어짜내보고 만족하지 못했던 분들은 python의 “단아함"을 크게 해치지 않는 수준에서 더 강력함을 느낄수 있습니다. 덤으로 C++이 망쳐버린 C언어의 간결함도 느껴볼수 있지요. 하지만 그정도까지의 성능이 필요하지 않거나 첫 프로그래밍 언어를 고르려는 경우는 python을 선택하는 것이 더 좋다고 생각합니다.
다시 Rust 이야기로 돌아가면 Rust를 강력 추천하는 분들이 많아서 공부를 조금 해봤는데 제 느낌은 Go는 C++을 대치하기 힘들지 몰라도 Rust는 (C++대치가)가능할지도 모르겠다 였습니다. 다만 Go 만큼 성장할지 ( 뒤를 봐주는 기업의 크기가 다릅니다. 구글과 모질라 니까요. ) 잘 모르겠습니다. 게다가 C++과 python은 엄청난 성능 차가 있지만 go와 rust는 그렇게 성능 차이가 나지도 않을것이구요. 결국 취향의 차이, 기반을 두고 있는 언어의 차이에 따라 선택이 갈릴것이라고 생각하고 있습니다.