Hello, Golang!
TL;DR
Golang할고랭
시작하기 전에
시작하기 전에 진부하지만 내가 이 블로그에 글을 쓰는 이유를 간단히 적어보려고 한다. 물론 가장 주된 이유는 내가 좀 더 재밌게 개발하기 위해서다. 이 방식이 얼마나 효과가 있을지는 아직 모르겠다. 하지만 본래 목적에 실패하더라도 적어도 두 가지는 얻을 수 있을 것 같다. 글이라는 것을 규칙적으로 쓸 기회(요즘 쓰는 거라고는 코드 밖에 없어서..), 내가 공부한 것에 대한 기록. 어쩌면 지금 나는 글을 쓰고 싶다는 욕구가 개발을 잘하고 싶다는 욕구보다 클지도 모르겠다. 그래서 길고 진부한, 읽혀지기 위한 글보다 쓰여지기 위한 글을 종종 쓰게될 것 같다. 이런 이야기로 시작하는 것은 첫 글이 아무래도 그런 방향으로 흘러갈 것 같아서 미리 고백하는 것이다.
그럼 본론으로
내가 블로그에서 하고 싶은 것 중에 하나가 회사에서 쓰이지 않는 것하면서 놀기 였다. 근데 그걸 찾는게 참 힘들더라. 일과 관련된 것 중에도 공부할 게 많고 그냥 해야할 일도 많아서 아예 다른 걸 생각하기가 쉽지는 않았다. 그러다가 문득 생각난게 새로운 언어를 배우는 것이다. 매년 새로운 언어 하나씩은 공부하고 싶다는 욕심이 있는데 작년에는 아무것도 못했다. 그래서 올해는 해보기로! 세상에 수많은 언어가 있지만 그 중에 Golang을 택했다. 생각보다 굉장히 메이저해서 과연 노는 것인가? 하는 의구심이 들기도 하지만…왜 하필 새로운 언어를 배우는 건지, 왜 하필 고랭인지는 아래 더 자세하게 이야기하려고 한다.
이렇게 포부와 다짐으로 가득한 글로 시작하는 건 사실 어느정도 시간을 끌기 위함이다. 글을 쓰려면 글감이 있어야 하는데 지금 나는 고랭에 대해서 아는 것이 거의 없다. 일단 Go in Action, The Go Programming Language 책 두 권을 사뒀다. A Tour of Go라는 교육용 사이트(?)가 있다는 것을 발견했다. 책도 몇 페이지 읽다 말았고 고 투어도 몇 발짝 못갔다. 그러니 나는 고랭에 대해서 쓸 수 있는게 아무 것도 없다. 그래서 지금 내가 이야기할 수 있는 건 왜? 정도 밖에 없다. 그럼 진짜 시이이이작!
왜 새로운 언어인가
지금 쓰고 있는 언어에 대해서 얼마나 완벽하게 알고 있고 더 공부할게 없으면 다른 곳으로 시선을 돌리냐고 할지도 모르겠다. 사실 그런 이야기를 할 사람이 있을까 하는 의구심도 있음. 그도 그럴 것이 이미 내 주변의 많은 개발자들이 새로운 기술, 새로운 패러다임, 새로운 언어에 관심을 가지고 있다.
왜 새로운 것에 자꾸 관심을 갖게 되는가? 왜 가져야하는가? 꼭 가져야할까? 하는 생각이 들 때가 있다. 내 대답은 ‘그렇다’이다. 나는 개발자란 문제를 해결하는 사람이라고 생각한다. 어쩌면 문제를 해결하는데 중독된 사람들일지도 모른다. 그런데 개별 개발자가 처한 현실적인 제약사항에 따라 문제를 바라보는 관점이 달라진다. 또 사람 자체가 다르기 때문에 같은 문제에도 다양한 해결 방법이 나올 수 있다. 모든 기술, 언어, 패러다임은 누군가 어떤 문제를 해결하기 위해 엄청나게 고민한 것이 일련의 패턴이 되고 구체화 되어 만들어진 것이다. 때문에 새로운, 즉 내가 지금껏 잘 알지 못했던 것에 대해서 학습하면서 현재 겪고 있는 문제 혹은 겪게될 문제에 대해서 새로운 관점에서 바라보고 해결책을 찾기 위한 통찰력을 얻는데 도움이 된다. 마치 책을 읽음으로써 내가 살아볼 수 없는 다른 사람의 삶에 대해 간접체험할 수 있고 세상을 바라보는 폭이 넓어질 수 있다고 이야기하는 것과 비슷하다고 할까!
왜 Golang인가.
힙해보여서
이게 무슨 말인가 싶겠지만 사실이다. 새로운 기술을 좇는 것에 대해 비판적인 사람들도 있다. 물론 나도일을 할 때는
단순히 새롭고 힙해보인다는 이유만으로 신기술을 도입하는 건 싫다. 그렇지만 지금은 일하는 거 아니니까! 그래서 왜 해야하는지 다른 사람을 설득시킬 필요도 없고 내가 하고 싶은 것을 마음대로 할 수 있으니 단순히 새롭고 힙해보인다는 이유만으로 새로운 것을 배워보려고 한다. 새로운 기술에 관심을 가지고 가지고 노는 건 개발자로서 굉장히 즐거운 일 아닌가. :-) 이미 힙할대로 힙했던 언어라 Innovator에게는 더 이상 힙하지는 않은 것 같기도 하지만…Late Majority에게는 힙하다는 자부심!쓰는 사람이 많아서(1번과 완전 반대되는 이유인가?)
예전에 함수형 프로그래밍에 관심이 생겨 C모 언어를 잠깐 본 적이 있다. 그때 가장 힘들었던 점 중에 하나는 잘 짜여진 함수형 프로그램은 어떤 형태인가? 그와 비교해서 내 코드는 어느 점이 부족한가? 를 알 수 없다는 점이었다. 내가 엯촋이라서 척보면 착하고 알아차리면 좋겠지만 그렇지 못했고…누군가와 같이 코드를 보고 좀 더 나아지기 위해서 논의하는게 쉽지 않았던 것 같다. 회사에서도 주변에 C모 언어로 개발하는 사람도 없었고 ㅠ,ㅠ 해당 언어의 사용자 그룹이 있지만 아주 활성되어 있지는 않았다. Golang의 경우 주변에 Golang에 대해 관심을 가지고 있는 사람들이 있고 또 Golang 유저 그룹이 비교적 활발하게 동작하는것 같아 보인다.내가 관심있는 서비스가 Golang 기반이어서
아주 잠깐 동안 Infrastructure as a Code 라는 개념에 관심을 가졌던 적이 있다. 참 많은 것에 참 짧게도 관심을 가지는 듯 하지만…그 때 보았던 몇몇 서비스가 Go 기반으로 만들어져 있었다. Terraform나 Kubernetes을 회사 업무에 적용시키면 어떨까 같은 생각을 했다. 물론 그 서비스가 만들어진 언어를 알지 못해도 간단하게 논리 흐름을 읽는 것은 가능할지도 모르겠다. 하지만 지금까지 몇몇 오픈 소스를 써오면서 이슈가 있어 수정해서 써야하거나 PR을 올려야하는 경우가 종종 있었다. 그럴 때 언어가 가지고 있는 미묘한 특성을 파악해서 봐야하는 경우가 있고…는 약간 포장이고…내가 그 수준까지 쓰게 될지도 모르는데..그냥 내가 현시점에 관심있고 궁금한 솔루션에서 쓰인 언어라고 하니 한 번 배워보고 싶었다. 훨씬 담백한 걸!회사에서 안써서
위에서도 말했던 것처럼 회사에서 쓰지 않는 것을 하고 싶었다. 나는 아주 평범한 자바 개발자라서 Golang으로 뭔가 만들어서 밥벌이를 할 수 있는 날이 올지는 모르겠음 ㅎㅎㅎ 솔직히 자바만 하기도 벅참 ㅎㅎㅎ 그래서 더 끌렸다.그럼에도 불구하고…먹고 사는데도 나름 도움이 될 것 같아서
이제는요즘 핫한 키워드
라고 할 수도 없이 아주 기본적인 요소가 되어버린 것 중에 하나가 동시성/병렬 처리다. (아직 자세히 안해봐서 모르지만 주워 듣기로는) Golang은 이 문제에 대해 Golang 나름의 솔루션을 내놓았고 꽤 괜찮다는 평을 듣고 있다.
지금까지 일하면서 동시성/병렬 처리까지 고려해본 적이 딱히 없는 것 같다. 그래서 깊게 고민해볼 기회도 없었다. 내가 생각을 안하고 관심을 안두고 있었던 것인지도 모르겠다는 반성도 들지만…늘 어떻게하면 보다 효율적이고 안정적으로 밀려오는 트래픽을 처리할 수 있을 것인가? 혹은 대용량의 데이터에 대해 복잡한 처리를 거쳐 내가 원하는 데이터를 얻을 수 있을 것인가? 에 대한 고민을 좀 해보고 싶다는 생각이 있었다. 아무래도 당장 해결해야하는 문제가 아니니 와 닿지는 않겠지만 언젠가 써먹을 수 있지 않을까 하는 기대로~C 언어에 진 마음의 빚을 좀 갚을까 싶어서
이 블로그의 멤버(?)들이 모두 그러하듯이..문돌이 출신, 회사에 들어와서 처음 개발 시작, 자바 개발 n년차라서 나는 C와 C+, C++, C#이 뭔지 뭐가 다른지도 잘 모른다. C는 프로그래밍 언어의 아주 기본이라서 개발자라면 한 번쯤 배워야 할 것 같았다. 자바에서 Stack Trace 따라가다보면 한번쯤은 만나는 Native code를 보면서 도대체 어떤 일이 벌어지고 있는건지 궁금하기도 했고. 공부를 안해본 건 아닌데 책을 몇 페이지 읽고 덮어버렸다. 괜히 어렵다는 이미지가 있어서인가? (이것도 주워들은 거라 정확하지 않지만) Golang이 C와 문법적으로 비슷한 부분도 많아서 세련되게 잘 정리된 C같다고 했다. Golang을 쓸 줄 알게되면 적당히 C를 아는 척도 할 수 있지 않을까…대화에는 낄 수 있지 않을까…하고오오 해보련다.
마무리하며
생각보다 많은 이유가 있다는데 놀랐을지도 모르겠다. 이 글을 시작하고 마무리하는데까지 꽤 오랜 시간이 걸렸음에도 여전히 Golang의 g도 못 봤다. 그 동안 좀 공부했어야 했는데…다음 글 써야하니 급하게 공부해야할 것 같다. 아이고!
이 글을 시작으로 한 언어에 관심을 갖게 되고 공부를 하게 되고 지금까지 알았던 다른 언어들과 어떻게 다른지 비교도 해보고 실제 무언가를 만들어 보기도 하는 과정을 기록으로 남겨보려고 한다. 이제 겨우 힌 언어에 관심을 갖게 되고
까지 간 것 같다. 한 단계씩 천천히 재밌게 즐기면서 계속해 이어져서 내년에 또 다른 새로운 언어 배우기로 다시 찾아오길…부디…..