04 Dec 2013
“양재대로103길”은 어디에 있을까요~?
- “양재”대로니까 양재동이나 서초구쯤일 것이다.
- 양재대로“103”길이니까 해당 도로에서도 상당히 먼 곳일텐데 어딘지는 모를 것이다.
아마 도로명주소에 익숙해져도 1번과 2번 정도나 떠올릴지, 설마 강동구 한복판 근처라고 유추할 수 있을 것 같진 않다.
기존에는 동과 같이 면으로 지역을 인지했는데, 새 주소는 도로라는 선으로 지역을 인지해야 한다. 다시 말해, 예전에는 “성내동”으로 인지하면 될 지역을 새 주소법으로는 성안로, 올림픽로, 성내로, 풍성로, 양재대로 등을 구성해야 지역을 유추할 수 있다.
이것이 내가 새로운 주소법인 도로명주소를 좋아하지 않는 이유. 지역을 인지하는 데 너무 많은 걸 알아야 한다. 그나마 도로명주소에 기대하는 것이 길을 찾는 것인데(길로 주소가 매겨져 있으니 길을 찾기 쉬울 것이라는 기대), 그런 기대도 자동차 운전자에게나 유용하지 도보로 걷는 사람은 혼란스러울 것 같다.
18 Nov 2013
갓 창업했을 때 우리는 한 무리였다. 각자 개성을 가진 두 사람이 모여있는, 단지 그 상태였다. 그리고 약 1년 가까이 시간을 보낸 시점에 이르러 비로소 우리는 팀으로 호흡 맞춰 움직이게 되었다.
1. 그때 이야기
작은 외주 프로젝트
함께 개발 작업을 한 첫 프로젝트는 외주였다. 2010년 3월에 시작하여 5월에 끝났는데, 아이폰용 웹앱(web app)과 웹을 개발하는 프로젝트였다. 총 500만 원짜리 프로젝트였는데, 가격 대비 손이 꽤 들어가는 프로젝트였다. 나는 웹 프론트엔드쪽(앞단, web frontend)을, Spikeekips는 백엔드(뒷단, backend)를 맡았다. 난 xhtml/html5와 css 3, jquery를 사용했고, Spikeekips는 python과 django를 사용했다.
우리에겐 사무실이 없었다. 첫 사무실은 이장님이 창업한 협업공간 CO-UP을 이용했지만1, 곧 나왔기 때문이다. 개발 초기, 일주일에 한 번에서 두 번 정도 만났지만, 주로 온라인상에서 비동기로 협업했다. 그리고 우린 함께 개발한 경험이 없어서 서로의 일하는 방식이나 성향을 몰랐다. Spikeekips는 설계를 공고히 쌓아가고 있었는데, SVN(Subversion, 버전 관리 도구)으로 프로젝트 소스 코드를 받아봤지만 내 수준으로 그가 짠 소스를 제대로 이해하기 어려웠다. 이런 여러 이유로 나는 프로젝트 진행 상황을 명확히 파악하기 어려웠다.
얼마 후 우리는 사무실을 얻을 수 있었다. 내가 존경하는 분이 Bikely라는 자전거 스토어(store)를 갓 개장2하셨는데, 매장 일부를 쓸 수 있게 기꺼이 내주셨다. 원래는 두 명이 들어가 작업하는 작은 Lab실 용도였는데, 무상으로 기꺼이 공간을 내주셨다.
책상 두 개 들어가 있는 작은 공간이지만, 우리의 공간이 다시 생겨서 기뻤다. 실제 작업 효율에 도움되는 걸 떠나서 서로를 알아가는 시간을 만들어주는 소중한 공간이었다.
프로젝트는 큰 문제 없이 진행됐다. 프로젝트에 들어가는 기술 난도는 높지 않았고, 웹 개발 프로젝트 경험이 많은 Spikeekips가 기반 시스템을 공고히 만든 덕에 작업도 수월했다. 프로젝트 중반부터 나는 모바일 웹 프론트엔드 개발을 전담했는데, Spikeekips의 개발 영역과 겹치는 부분이 많지 않아 편했던 점도 있었다.
프로젝트를 마칠 때쯤은 시기상으로 봄이었지만, 우리에겐 여전히 혹독한 겨울이었다. 내 통장 잔액은 곧 바닥날 예정이었고, 우리에겐 여전히 돈이 없었다.
좀 더 큰 프로젝트
작은 외주 프로젝트를 마치고 얼마 후, 좀 더 큰 외주 프로젝트를 논의하기 시작했다. 역시나 프로젝트 규모와 비교하면 금액은 적어서 우린 아쉬워했다. 하지만 회사 설립과 초기 자금으로 삼을만한 돈은 되었기에 난 내심 기뻤다. Spikeekips는 기술 및 개발 측면에서 재밌는 도전 영역을 발견하고는 아쉬운 마음을 달랬다. Spikeekips는 Twisted나 XMPP 등을 내게 들려주었고, 그런 대화를 나누는 시간이 즐거웠다.
하지만 프로젝트는 점차 우리에겐 매력을 잃어갔다. 이런저런 이유로 프로젝트는 축소되었는데, 축소될 때마다 프로젝트 착수일은 미뤄졌다. 하지만 프로젝트 완료 시기는 변동되지 않았다. 프로젝트를 논의한 지 수 개월이 지난 뒤에 계약했는데, 기대 수익도 많이 줄었고, 기술 측면에서 도전 요소도 일정이 빠듯하여 대부분 쳐내야 했다.
이번 프로젝트에서 나는 아예 처음부터 모바일 프론트엔드를 맡기로 했다. 아이패드에서 수기로 글씨나 그림을 입력받고, 이걸 서버로 전송하는 게 주요 기능이었다. 개발 기간이 너무 촉박했기 때문에 모바일 프론트엔드를 웹으로 개발하기로 했다. 처음엔 SVG 기술을 이용하여 웹에서 2차원 벡터(Vector) 그래픽을 구현하였는데, 아이패드1 성능이 만족스럽지 않았다. 그래서 수기 상황에서는 HTML5 기술인 Canvas로 그래픽을 구현하고, 수기로 그린 경로 데이터를 따로 저장한 뒤 이를 SVG로 데이터로 만들어 서버로 보내기로 했다. 서버는 XML 형식인 SVG 파일을 클라이언트로 받아서 이를 PNG 파일로 변환하여 웹 렌더링 영역에서 출력했다.
백엔드쪽은 처음에 계획했던 서버 푸시 기술을 취소하고, 서버 폴링(polling) 기술을 택했다. 클라이언트는 대단히 짧은 시간 간격으로 서버에 데이터나 상태를 요청하여, 서버가 빠르게 응답만 해준다면 마치 서버가 클라이언트로 데이터를 밀어(push) 넣어주는 것처럼 보인다. 다시 말하면 서버가 아주 빠르게 응답을 해줘야 한다. Spikeekips는 제한된 환경 안에서 요구사항을 정확하게 구현해내어 서버는 아주 빠르게 응답하여 클라이언트 요청에 대응했고, 마치 실시간 서버 푸시 기술이 동작하는 것 같았다.
프로젝트 규모가 좀 더 크다보니 우리도 크고 작은 갈등을 겪었다. Spikeekips는 꼼꼼하게 설계하며 눈에 안 보이는 부분도 신중히 개발했다. 사소한 기능이더라도 test code를 짜서 검증하였다. 성격과 업무 특성상 눈에 보이는 작업이 많은 나로서는 답답했다. 지난 프로젝트 때 진행 상황을 제대로 파악하기 어려웠던 기억이 나서 마음이 더 다급해졌다. 그런 나를 보며 Spikeekips는 너무 다급해하지 말라고 했고, 지난 프로젝트에서 Spikeekips가 한 방식대로 한 것이 결과적으로 작업 안정성이나 시간 효율이 좋다는 걸 알고 있었는데도, 마음은 다급해졌다.
나와 Spikeekips가 충돌했던 일은 내가 그의 코드를 임의로 수정해서 일어났다. Spikeekips가 부재할 때 고객사(우리의 갑이 아닌 프로젝트의 고객사, 즉 최종 갑)가 어떤 의견을 제시하거나 동작을 요구했고, 마냥 Spikeekips를 기다릴 수 없던 나는 실제 작동하는 서버 소스 코드를 어떠한 검증 과정도(test code) 거치지 않고 바로 수정해 SVN 저장소에 추가하였다. 그는 무척 화가 났고, 나는 Spikeekips에게 전화 연락이 안 되었다고 볼멘 소리를 냈다. 하지만 명백히 내 잘못이었다. 난 사과했다. 그나마 다행인 점은, 난 내가 잘못했다고 생각하는 일에 대해서 사과하는 일에 스트레스 받거나 망설이지 않는다. 그 이후로도 우리는 부딪힐 때마다 고객사 건물 옥상이든 건물 밖이든3 가능한 곧바로 나가서 이야기를 나눴다. 프로젝트 후반으로 갈수록 밖에 나가는 일이 잦았다.
우리는 석 달 예상한 작업을 두 달 만에 완료했다. 프로젝트를 진행하는 동안 많은 일이 있었다. 우리는 법인으로 회사를 설립했고, 여전히 돈은 없었다. 랩탑이 고장 났지만 고칠 돈이 없어 랩탑 하나를 돌려가며 작업하거나 다른 사람 랩탑을 빌려 쓰기도 했다. 가족 등 주변 사람이 아프다는 소식이 들려올 때엔 무력감에 빠져 일에 집중하기 힘들었다. 외주가 아닌 우리의 제품(Product)를 시작했지만, 프로젝트를 마치기 전에 우리가 망하는 날이 더 빨리 올 것 같았다.
(팀 세우기 마지막 편(4편)에서 계속...)
2. 돌이켜보기
혼합물과 화합물
나와 Spikeekips는 함께 창업하기 전에 친분을 쌓고 서로에게 호감이 갔지만, 함께 일해본 적은 없었다. 서로 커피 한 잔, 술 한 잔 나누는 건 각자의 성격, 가치관 등 생각을 나누며 혼합물을 만드는 것이다. 하지만 어려운 상황에서 함께 일하며 부딪히는 건 화합물로 만들어진다고 생각한다. 팀이라는 화합물은 나와도 다르고 공동 창업한 그 사람과도 다르다. 하지만 나와 그 모두를 품고 있다.
창업 초기 팀은 반드시 창업과 팀 세우기라는 화학 과정을 거쳐 화합물로 거듭나야 한다. 예전 직장에서 함께 일했던 경험으로는 화합물로 거듭날 수 없다. 온도와 압력 등에 따라 물질이 화학적으로 결합하는 데 변화가 생기듯이, 돈이나 사람, 시간을 가진 게 없는 환경에서 새로이 결합해야 한다. 이 결합 과정에서 기화해 흩어질 수도 있고, 다이아몬드가 탄생할 수도 있다. 어렵게, 힘들게 영입한 개발자가 이 과정을 못 견디고 뛰쳐나갈 것 같다면, 일 더 크게 벌이지 말고 그 단계에서 결합을 깨뜨리는 게 낫다.
만약 그런 힘들고 어려운 과정을 넘어서 팀이라는 화합물로 거듭난다면, 정말 단단한 팀이 될 준비가 되었다고 자부심을 가져도 좋다고 본다. 안타깝게도 대부분 팀은 이 과정을 못 넘거나 넘지 못했는데 넘었다고 잘못 생각하기 때문이다.