It all started with…

모든 것은 문제로부터 시작되었다. 사업의 첫 창업 아이템이었던 grouple은 외주 개발로 만든 물건이었다. 졸업 즈음 이미 창업을 목표로 하고 있었고, 원래 아이디어였던 자전거 루트 지도 서비스를 만드려고 NHN과 미팅까지 진행했지만, 공개한다는 API는 일본 센다이 지진의 여파로 무기한 연기된 상황이었다. 그때는 공개한다는 것만을 믿고 브라질 통역 인턴으로 개발비를 확보하겠다는 생각에 브라질 아마존에서 일하고 있었다. 그래서 담당 팀장의 이메일을 듣고 꽤 좌절했었던 기억이 난다. 일단 돈은 만들었으니 아이템을 변경해야 했고, 그래서 스터디 그룹을 모아주는 그루플이라는 앱 서비스를 만들기로 했다.

how_become_developer_01

결과는 굳이 언급하지 않기로 하자. 눈물 나니까 어쩌면 그때 접었어야 하는데 미련을 접지 못하고 또 새로운 아이템을 발굴했다. 자전거 SNS 앱이 그것이었다. 반응도 그루플보다는 나았고, 나름대로 만들긴 했지만 회사를 유지할 수 있을 정도는 아니었다. 다만 그 과정에서 다행스러웠던 점을 하나라도 찾자면 문제가 무엇인지는 파악했다는 것이었다.

그루플이나 자전거 앱이나 아이디어라는 점에서는 결코 나쁘지 않았다고 생각한다. 그루플의 최종적인 목표는 네이버 밴드와 같은 폐쇄적인 SNS였고, 자전거 앱 또한 유사한 많은 앱들 중에서 적어도 디자인적으로는 돋보였었다. 그런데 문제는 개발 그 자체에 있었다. 개발자 출신도 아니고 그렇다고 IT 프로젝트 개발과정의 처음부터 끝까지 경험해본 적도 없었기 때문에 누구에게 일을 시키는 것조차도 쉽지 않은 일이었다. 그러다 보니 제대로 된 기능 설명이 어려웠고, 기획서가 수십 번을 바뀌는 건 예삿일이었다. 개발기간은 길어지고, 그러다 보니 일을 맡긴 개발자는 불만을 토로하게 된다. (지금도 그분들에게는 감사한 마음과 죄송하다는 말씀을 드린다.)

왜 망했냐 하는 질문에 대답은 여러 가지가 있을 수 있지만, 당시에 충분한 개발비가 없었다는 것이 가장 큰 이유가 되었다. 충분한 개발비가 없었기 때문에 개발이 원활하게 이루어지지 못했고, 그러다 보니 론칭은 해도 수많은 버그와 문제 투성이의 서비스는 정작 중요할 땐 동작하지 않았다. 론칭 이벤트도 열었으나 반응이 없던 건 둘째치고 제대로 반응을 파악할 수 조차 없었다. 지금 와서 생각해보면 어떻게 그렇게 무모하게 할 수 있었는지 황당하기 까지 하다.

충분한 돈이 없다는 것은 결국 우리가 개발할 수 있는 능력이 없다는 것과 연결되었다. 관심을 보인 VC(는 아니었던 것 같은데 어쨌든 투자회사) 조차도 제대로 작동하는 앱이 아니다 보니 의아하다는 표정을 비췄고, 그렇다 보니 제대로 투자가 이루어질 리 없었다. ‘제품 출시 → 투자 유치 → 지속적인 서비스 개발’이라는 그림은 나쁘진 않았으나 1단계에서 발목이 잡히니 2, 3 단계로 가는 것은 요원해 보였다.


외주를 더 잘 시킬 수 있도록

서론이 너무 길어졌다. 여하튼 그래서 개발을 배워야겠다는 생각이 들었다. 외주를 주는 것 까진 좋은데, 어느 범위까지 어떻게 만들어야 할지에 대한 가이드라인을 제대로 제시하고 싶었다. 정부지원사업에서 돈을 받을 자신은 있었고, elance 같은 데서 인도 개발자를 찾아 외주를 잘만 시키면 할만한 시도라고 생각했다. 진짜 여러가지 것들을 다 해봤다.

how_become_developer_02

그리하여 노닥노닥이라는 커뮤니티에서 K님의 보살핌 하에 스터디그룹이라는 형태로 코딩 공부라는 긴 여정을 시작했다. 1년 정도 배우면 뭐라도 만들겠지 라는 생각은 전혀 안 했고, 그냥 약간의 개인적인 만족에 가까웠던 것 같다. 일단 워낙 공부하는 건 좋아했으니까 외국어 배우는 기분으로 하다 보면 개발자들이랑 대화하는 건 더 편해지지 않을까? 하는 마음이었다.

Codecademy에서 운영하던 CodeYear라는 프로그램이 있었는데 (지금은 없어졌다) 매주 1가지 과제를 푸는 방식이었다. 주로 Javascript 를 배웠고 HTML과 CSS 도 코스의 하나였던 것 같다. 처음엔 4명으로 시작했다가, 중간에 사람이 빠졌다 들어가는 일이 있었고 총 10명 정도와 함께했던 것 같다.

어쨌든 3-4 개월쯤 진행하고 나니 Javascript로 클래스를 써서 계산기를 만드는 프로젝트까지 발전했다. 개념적으로나 사용법이나 뭐 대충 알겠는데 그걸 어디다 어떻게 써야 할지는 이해하기 어려웠다. 아니 그보다 좀 더 뭘 만들어야 할지 고민되기 시작했다.


모던 웹을 위한 Node.js 프로그래밍

그러던 와중 책 한 권을 소개받았다. 당시에는 Node.js 는 커녕 서버가 뭔지에 대한 개념조차 희박했다. 그냥 잘 모르니 해보라는 걸 해봤을 뿐인데 이것이 내가 처음으로 배우게 된 실제 개발 프레임워크가 된다. 물론 이전에도 Objective-C로 iOS 앱 소스를 수정(!) 해본 적은 있지만, 제로에서 출발하는 것은 처음이었다.

how_become_developer_03

이 책을 보면서 좋은 팁을 알 수 있었는데 IT 관련 기술서적을 고를 때의 3가지 원칙을 그분께서 알려주셨다. 지금도 그 원칙은 잘 지키고 있다.

1) 한국사람이 저자인
2) 예제 중심의
3) 두께가 얇은 책

이유는 한국사람이 저자가 아닌 번역서를 고르게 되면, 내용의 난이도나 품질을 떠나 번역면에서 문제가 있을 수 있다. 특히 처음 배우는 입장에서는 뭐가 잘못되었는지 파악하기가 어렵기 때문에 자칫하면 엉뚱한 고생을 할 수도 있다. 두 번째 예제 중심이되 예제가 구체적인 기능을 훑어볼 수 있는 수준인 것이 좋다. 어차피 전체적인 것을 이해하기에는 책은 부족하다, API를 서술해주는 방식의 책도 있으나 그 정도를 읽을 수 있으면 그냥 API 문서를 읽는 것이 빠르다. 두께가 얇다는 것도 의외로 중요한데, 그냥 전체적으로 훑어보는 수준에서 책을 봐야지, 두꺼운 기술 서적은 필요가 없진 않지만, 역시 API 문서를 추천한다. 검색도 되고 색인 및 다른 기능도 있다.

이 책을 빌려서 무작정 따라 했다. 4~5일 정도 걸렸는데 중간중간 오타와 버전이 달라진 부분에서 고생도 했지만 (다행히 지금은 개정판이 나왔다) 전체적인 스코프를 파악하는 데는 큰 도움을 주었다. 그리고 나만의 프로젝트를 시작했다.


이 책이 많은 도움이 되었다.

이 책이 많은 도움이 되었다.

첫 프로젝트

이것저것 하다가 만 것을 빼고 진짜 첫 번째 프로젝트라고 하면 자전거 앱 서버를 만든 게 기억난다. 처음 자전거 앱을 만들었을 땐 서버 개발비까지는 마련하기 힘들어서 bass.io라는 악몽 같은 서비스를 사용하고 있었다. 그러다 보니 확장성도 너무 떨어지고 API 문서나 예제가 부족해서 유지보수가 상당히 힘들었다. 지금은 잘 기억도 안 나지만 속도도 매우 느렸고, API 호출하는 클래스도 뭔가 난해한 구조라 앱의 반응성을 매우 떨어뜨렸다. 그래서 어차피 망한 서비스 서버나 좀 만들어볼까 하는 생각으로 프로젝트를 시작했다.

엄청나게 고생했다. Node.js도 Database도 웹서버의 구조도 아는 것이 전혀 없었다. 특히 어려웠던 건 개념적인 것들이 어려웠는데 http request/response 라거나 기본적인 web의 구조라거나 하는 것들은 물어도 보고 책도 보고 하면서 어렵게 배워나갔다.

물론 처음부터 내가 전부 만든 것은 아니었고, 남이 만들어놓은 코드를 분석하면서 하나씩 가져다 쓰는 것이 대부분이었다. 말이 분석이지 그냥 Copy & Paste 하고 조금씩 수정해서 안되면 다시 돌리고, 되면 그대로 두고 하는 정도였다. 그래도 조금씩 나아지고 있었고, 우여곡절 끝에 서버를 만들었다. 물론 엄청 잘 만든 서버라고 볼 수는 없겠지만 (여러 가지 면에서) 지금까지도 잘 동작하고 있고, 이 서버 API를 적용하기 위해서 아이폰 앱 소스를 뜯어본 것이 아이폰 개발의 기초가 되었다.


그리고 돈을 벌기 시작하다

그렇게 서버도 만들고 있었지만 거의 백수였다. 금전적인 도움은 어렵더라도 스터디를 하고 코딩을 배우게 해 준 노닥노닥 커뮤니티에 뭔가 배운 것으로 기여할 수 있는 것은 없을까 고민하였다. 그래서 스터디 멤버들과 작은 프로젝트를 하나 시작했다. CCMS가 그것이었는데 가상화폐를 만들어서 서로 주고받으며 재능 나누기를 유도하는 시스템이었다. 이 프로젝트는 서버는 직접 만들었고, 클라이언트 부분은 멤버들과 조금씩 나눠 개발했다. 또한 만든 소스를 스터디 그룹에서 함께 분석하는 식으로 공부했다.

이 또한 첫 프로젝트와 크게 다르지 않았는데, 아직 전체적인 이해도는 떨어져서 전에 해둔 것을 보고 이거 수정해보고 저거 수정하면서 조금씩 만들었다. 그래도 확실히 첫 번째 프로젝트보다는 많이 발전했고, 조금씩 나아지는 것을 느낄 수 있었다. 나름대로 소규모로 서비스를 해본 경험도 생겼고, 웹 서비스를 만들었다는 것에 참 기분이 좋았다. 지금 보면 이걸 서비스라고…

처음으로 내가 돈을 벌게 된 것은 오히려 Node.js 쪽이 아니었다. Node.js에서도 Express.js 모듈을 사용하는 것이 대부분이다 보니 웹 브라우저에서 호출을 대부분 jQuery로 작성하게 되었다. jQuery를 배우면서 엘리베이터를 만들어보기도 하고 그렇게 하다 보니 꽤 자신이 붙었다.

how_become_developer_05

그러던 와중 코딩 배우는 것을 도와주시던 K님이 같이 일해보지 않겠냐는 제안을 하셨다. 사실 개발자로 자리를 제안한 것은 아니었고, 내가 가진 서브컬처에 대한 사랑과 지식을 높이 사신 것으로 기억하는데, 게임을 만들기 위한 기획자가 필요했고 그에 대한 것을 나에게 부탁하신 것이었다. 그런데 게임 프로젝트는 생각보다 더디게 진행되었고 그러다 보니 자연스럽게 그 이후 들어온 외주 프로젝트에 참여하게 되었다.


나 스스로 조차 기대하지 않던 역할

아이폰, 안드로이드, API 서버, 관리자 서버 총 4가지를 개발하는 프로젝트였다. 내가 받은 건 관리자 서버에서 만화에 효과를 주는 에디터와 프리뷰를 개발하는 작은 부분이었다. 난이도가 크게 높진 않았지만, 그렇다고 마냥 쉬운 것도 아니었다. jQuery를 사용해서 개발했는데, 한 2주 동안은 해결이 안 되는 영역이 있어서 극심한 스트레스에 휩싸여 있던 적도 있었다.

물론 나를 포함한 우리 개발팀 누구도 내가 그 기능을 구현할 수 있을 것이라고 기대하지 않았다. 나도 사실하는 데까지 해보자는 입장이었지, 실제로 쓸 수 있는 수준까지 만들 거라고는 생각하기 힘들었다. 내가 지금까지 한 번도 해보지 않은 콘셉트였고, 차라리 API 서버라면 모를까 웹용 이펙트 에디터라니 (물론 매우 기본적인 수준이었다) 가당키나 한 얘긴가. 우리가 외주로 받아서 진행한 서비스 자체는 예상보다 훨씬 빠르게 종료되었지만 나 개인으로서는 돈을 받고 개발을 하게 된 생애 첫 번째 프로젝트였다.

how_become_developer_06

그 과정에서 가장 크게 느꼈던 것은 하면 되는구나 라고 정리될 수 있을 것 같다. 이후로 게임 개발에도 참여해봤고, MINIMOOpenShop, 4WORK 같은 프로젝트를 혼자 진행하면서 다양한 프레임워크에도 적응하고 있다. 해커톤에도 활발하게 참여했었고, 뭘 좀 만들게 되니까 그동안 하고 싶었던 것들을 조금씩 해왔던 것 같다. 모든 게 만족스럽진 않았지만, 나는 최선을 다했고 많이 성장했다.


지금은…

먼 길을 숨 가쁘게 달려왔다. 아무것도 모르는 기획자 출신 창업가에서, 실력이 어느 정도인지는 잘 모르겠지만 만들어 놓은 것은 꽤 있는 개발자가 되었다. Junior Developer 가 되었다고 말하면 약간 과장일까?

생각보다 글이 좀 길어졌는데 오랜만에 예전 일을 떠올리게 되었다. 코딩을 조금 배우고 나서 막막했던 것이라거나, 그게 좀 풀리자 신나게 만들었던 거라거나, 그러다가 안 되는 것들에 막혀 깊은 좌절을 경험하기도 했었고, 그래도 포기하지 않고 열심히 해온 것은 자랑스럽다. 이 글은 외국의 블로그를 우연히 보게 되면서 쓰게 되었는데 다음번에 기회가 되면 전문을 번역해보고 싶다. 이 블로그에 따르면 나는 4번째 The Upswing of Awesome 단계에 있다고 생각한다. 개발자로 성장하느냐 그렇지 못하느냐의 사이에 있는 것이다.

개발을 배우는 것은 결코 쉽지 않다. 인터넷에는 거의 모든 자료가 있긴 하지만, 쉬운 자료는 너무 쉽고 어려운 자료는 너무 어렵다. 중간 정도 수준의 자료가 있지 않냐고? 사실 중간 정도 수준의 자료는 글로 쓰자면 너무 길고 동영상 또한 갈길이 너무나 멀다. 내가 추천하고 싶은 것은 3단계 방법이다.

1) Getting started 혹은 Hello world를 훑어보자.
2) 유료 동영상 강좌를 찾아보자.
3) 문서를 읽자.

1번이야 뭐 워낙 간단하니 넘어가고 2번이 의외로 중요하다. 전술했듯이 중간 정도 수준의 자료는 양이 방대해 지기 때문에 무료 자료보다는 유료 강의가 압도적으로 품질이 좋다. 강의를 듣는 사람에 대한 배려도 잘 되어있고, 유료이다 보니 피드백도 좋다. 아 그리고 가급적이면 영어 강의를 듣는 것이 좋은데, 우리나라에도 좋은 강좌가 많지만 사실 국내 사정 때문에 모 언어에 치우쳐있는 것이 사실이다. 내가 배우려는 것은 없을 가능성이 많다. 3번때문이기도 한데 영어를 못하고서 코딩을 배우는 것은 내 입장에서는 불가능에 가깝다.

Google이나 Stackoverflow는 말할 것도 없고 거의 모든 프레임워크는 영어로 문서화되어 있다. 오래된 시스템이야 한글 자료도 있긴 하지만 한글인데 이해가 안 돼 추천하고 싶진 않다. 써먹을 수 있는 자료의 양이 몇 배 수준이 아니라 백배 이상 차이가 난다. 여하튼 어느 정도 실력이 쌓이면 API 문서를 읽어야 한다. 결국 예제에서 커버할 수 있는 것에는 한계가 있고, 예제를 따라 하는 것 자체가 꽤 시간을 낭비하게 되는 때가 생각보다 빨리 온다. 어차피 맞을 매라면 어쩌겠는가 즐겨야지 빨리 익숙해져야지.


코딩은 즐겁다

어릴 적부터 우리는 뭘 꾸물거리면서 만드는 것을 하나의 놀이로 받아들인다. 모래로 두꺼비집을 짓는다거나, 프라모델을 조립한다거나 정도의 차이는 있어도 이러한 취미는 한 번씩은 다 경험한다고 생각한다. 그러나 성인이 되고 직업을 가지면 놀이는 이제 소비로 대체된다. 휴대폰을 사고 컴퓨터를 맞추고 자동차를 바꾸는 것이 하나의 즐거움으로 다가오게 되고 이러다 보니 쇼핑이라는 것이 단순히 필요한 것을 구매하는 과정이 아니라 취미가 되는 현상까지 생긴다. 워낙 소비가 미덕이 되고 마케팅 등의 기술도 발달하다 보니 요즘은 아이들도 뭘 만들 생각을 하지 않고 사달라고 하기 바쁘다.

Maker 시대가 왔다고는 하지만 극소수 중에서도 극소수에 지나지 않다. 대부분 사람들은 사서 소비하고 버리는 것에 익숙하다. 하지만 정말로 작은 것이더라도 만드는 것은 확실한 만족감이 있다. 결과물이 허접해도 만드는 과정에서 느끼는 희열은 다른데서 느끼기 어려운 감정이라고 생각한다. 하다못해 종이비행기를 만들려고 해도 종이가 필요하지만, 코딩의 장점은 컴퓨터만 있으면 웬만하면 거의 다 만들 수 있다는 것이다. 재료도 기술도 모두 컴퓨터 안에서 찾을 수 있다. 만든 것을 남들한테 보여주기도 아주 좋다!

how_become_developer_07

나는 그렇게 무엇인가를 만들기 위해 코딩을 시작했다. 그러다 보니 일거리가 들어왔고, 지금은 그때 익힌 기술로 일자리를 찾고 있다. 코딩은 기술이 아닌 예술이라는 표현을 하기도 한다. 그림은 어릴 때 많이 그리고, 노래도 쉽게 생각하지 않나? 그렇다면 코딩은 못할게 뭔가? 난 이렇게 개발자가 되었다. 당신도 못할 건 없다. 위에 청년(마크 주커버그)도 그저 좋아서 시작했다고 하지 않나.