나는 어떻게 개발자가 되었나?

이 정도는 아니라고 믿고 싶지만...

우선 이 글에서도 썼지만 나는 실패한 스타트업의 창업자였다. 4년간의 긴 고생 끝에 마침내 창업이라는 무거운 짐을 벗어버렸고, 이제는 개발자로서의 인생을 두근거리는 마음으로 시작하려고 하고 있다. 나는 컴퓨터공학을 전공하긴 했으나 딱히 뭘 만들어보진 못했고, 이후 포르투갈어과로 편입한 이후에는 당연히 거들떠 보지도 않았다. 내가 처음으로 창업을 했던 2011년 1월 나는 그저 컴퓨터에 조금 관심있는 사람일 뿐이었지만, 2015년 5월 현재 개발자로서 취업을 앞두고 있다.

It all started with...

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

스터디그룹 SNS 그루플

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

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

그래서 망했어요

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

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

외주를 더 잘 시킬 수 있도록

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

이런데까지 써봤다

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

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

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

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

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

나의 시작

이 책을 보면서 좋은 팁을 알 수 있었는데 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를 배우면서 엘리베이터를 만들어보기도 하고 하다보니 꽤 자신이 붙었다.

jQuery 엘레베이터

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

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

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

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

나름대로 사용자도 있는 메모앱 MINIMO

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

지금은..

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

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

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

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

1번이야 뭐 워낙 간단하니 넘어가고 2번이 의외로 중요하다. 전술했듯이 중간 정도 수준의 자료는 양이 방대해 지기 때문에 무료 자료보다는 유료 강의가 압도적으로 품질이 좋다. 강의를 듣는 사람에 대한 배려도 잘 되어있고, 유료이다보니 피드백도 좋다. 아 그리고 가급적이면 영어 강의를 듣는것이 좋은데, 우리나라에도 좋은 강좌가 많지만 사실 국내 사정때문에 모 언어에 치우쳐있는 것이 사실이다. 내가 배우려는 것은 없을 가능성이 많다. 3번때문이기도 한데 영어를 못하고서 코딩을 배우는 것은 내 입장에서는 불가능에 가깝다. Google 이나 Stackoverflow 는 말할것도 없고 거의 모든 프레임워크는 영어로 문서화 되어 있다. 오래된 시스템이야 한글 자료도 있긴 하지만 한글인데 이해가 안돼 추천하고 싶진 않다. 써먹을 수 있는 자료의 양이 몇배 수준이 아니라 백배 이상 차이가 난다. 여튼 어느정도 실력이 쌓이면 API 문서를 읽어야 한다. 결국 예제에서 커버할 수 있는 것에는 한계가 있고, 예제를 따라하는 것 자체가 꽤 시간을 낭비하게 되는 때가 생각보다 빨리 온다. 어차피 맞을 매라면 어쩌겠는가 즐겨야지 빨리 익숙해져야지.

코딩은 즐겁다

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

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

쭈커버그횽

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