해커톤. 해커와 마라톤을 더한 이 단어는 어떠한 주제를 가지고 짧은 시간 몰두하여 프로덕트(Product 제품) 을 만드는 행사다. 필자는 지난 2017년 5월부터 커뮤니티 STEW 에서 ‘코딩소모임’ 을 만들고 HTML, CSS, Javascript, Python 등. 웹서비스를 만들기 위한 기본 스킬들을 함께 배웠다.
반년간 컴퓨터 스킬을 배웠지만, 도대체 이 스킬이 어떤식으로 사용되는지 모르는 친구들을 위해 우리가 속한 커뮤니티 STEW 에 도움이 될 서비스를 만들기로 했다.
 
커뮤니티 STEW 는 현재 7년간 운영되는 커뮤니티로, 매년 1월 모임에서 스스로의 한 해를 기획하고 한 해를 아우르는 ‘올해의 단어’ 를 만든다. 우리는 이 ‘올해의 단어’ 를 매달 회원들에게 이메일로 발송해주고, 생각날 때마다 들어가서 볼 수 있는 웹페이지를 만들기로 했다.
개발자들에겐 너무도 간단해 보일지 모르지만, 코딩을 처음 배운 친구들에게 그리고 단 한번도 실제 사용되는 서비스를 만들어보지 못한 친구들에게는 그저 막연한 일이었다.
 

<STEW 코딩소모임 해커톤 목표>

  1. 매달 STEW 회원들에게 ‘올해의 단어’ 를 메일로 발송해주는 서비스.
  2. STEW 회원들이 ‘올해의 단어’ 를 확인할 수 있는 웹 페이지.

 
반년간 코딩을 배운 STEW 코딩소모임은 이 서비스를 만들기 위해 2017년 12월 22일 20시. 해커톤을 시작했다.
 

<STEW 코딩소모임 해커톤을 위해 모인 멤버들 | 벤처스토리움 브이아크>

<STEW 의 멘토님과 코딩에 집중하는 멤버들. 그리고 해커톤에서 빠질 수 없는 피자. :D>

 
STEW 코딩소모임의 멤버는 총 4명으로 7년차 앱개발자인 필자와 6년차 서버개발자, 그리고 코딩을 올해 배우기 시작한 2명의 멤버다. 사실 우리가 만들려는 서비스는 필자를 비롯한 개발자들에게는 매우 간단 할지도 모른다. 하지만, 이 해커톤은 우리가 반년간 배운 것을 검증하고 우리의 성과를 자축하기 위한 것 이기에 이미 개발을 하고 있는 필자와 개발자 멤버가 모두 만드는 것은 무의미했다.
우리는 그동안 개발을 배운 친구들과 ‘함께’ 만드는 것에 큰 의미를 부여했고, 때문에 원래의 개발 속도가 나기는 힘든 상황이었다. 또한 해커톤의 분위기를 최대한 내고 싶었기에 함께 개발에 참여할 수 있고, 개발을 도울 수 있으며 함께 융화 될 수 있는 최적의 개발자 게스트 두 명을 추가로 초대했다.
 
그렇게 4명의 STEW 코딩소모임 멤버와 2명의 개발자 게스트, 멘토님 그리고 마지막 히든카드 게스트까지 STEW 코딩소모임은 총 8인이 참여했던 해커톤을 시작했다.
 
 

세션 0. 내게 STEW 해커톤 이란?


 
필자는 STEW 의 운영진이자 STEW 코딩소모임의 운영진. 그리고 이번 해커톤의 주최자로써 사실 엄청난 부담이 있었다. 그저 우리끼리 즐기면 될 일이라고 생각하기도 했지만, 그것은 구성원의 마음가짐으로 충분했다. 그들의 그러한 생각이 즐거움으로, 뿌듯함으로, 행복감으로 이어지기를 원했다.
약 5 년전 쯤 필자는 Startup Weekend 라는 행사에 참여한 적이 있다. 그때의 인연은 아직까지 이어지고 있는데, 필자의 개발자 커리어 에서 그 행사는 매우 중요한 역할을 해주었다. 당시 만 1년도 안 된 초짜 개발자였던 필자는 당시 해커톤 행사에서 ‘아무 것도 개발하지 못했다.’
핑계는 상당히 많았다. ‘저는 앱개발자에요.’ ‘공통소스가 없는 환경에서 개발을 안해봤어요…’ ‘서버가 없어요’ ‘기획이 안되었잖아요?’ 그랬다. 그저 초짜 개발자인 필자는 주어진 환경에서 ‘기능’ 만을 개발했을 뿐, 제품 전체를 만들어본 적이 없었다. 결국 그 해커톤 행사에서는 ‘기획’ 만 하다 끝났고, 상당히 자존심이 상했던 기억이 있다. 그리고 아직도 개발 중 삽질 할 때면 귓가에 들리는 누군가의 음성이 있다.
 

오세용씨는 근데, 개발자 맞아요?

 
이번 해커톤을 기획하면서 그때의 안좋은 추억이 떠올랐다. 과연 나는 그 뒤 5년간 얼마나 나아졌는가? 혼자서 만들지도 못하면서 팀을 꾸려서 프로젝트를 진행할 수 있을까? 내가 그런 자격이 될까? 이들에게 내가 느꼈던 안좋은 추억을 그대로 느끼게 해주는건 아닐까? 이 해커톤을 통해서 코딩에 더 두려움을 갖게되면 내 책임이 아닐까?
사실 해커톤 날짜를 확정하고 나서 이 해커톤을 취소하고 싶은 마음이 몇 번이고 올라왔다. 부담이 되었다. 온갖 핑계를 내세우며 취소하고 싶었다.
하지만 그럴 수 없었다. 그러한 핑계 끝에 돌아오는건 결국 잊혀지지 않는 상처일 뿐이라는 걸. 결국 되돌릴 수 없는 추억으로 남는다는 걸 지난 Startup Weekend 를 통해서 확실히 알고 있었다.
 
그래서 진행했다. 부족한 점이 분명히 나올 것을 알지만, 프로젝트는 원래 그렇다는 것도 알기에. 지난 반년간의 노력을, 그 결실을 얻기 위해 우리 멤버들에게 그 ‘맛’ 을 알게 해주기 위해 진행했다.
멀리서 보면 고작 하룻밤의 코딩일 뿐이겠지만, STEW 코딩소모임 해커톤은 내게 지난 반년간의 노력의 결실이자 5년 전의 상처를 만회 할 매우 중요한 도전이었다.
STEW 코딩소모임 해커톤은 내게 그런 기회였다.
 
 

세션1. STEW 올해의 단어 기획


 
필자는 지난 6년여 개발자 커리어간 십 수개의 앱을 개발했다. 프로젝트의 크기는 각양각색 이었다. 5억 이하의 작은 프로젝트 부터 10억대, 20억대의 다소 큰 프로젝트도 있었다. 수백명의 개발자가 투입되는 ‘차세대 프로젝트’ 도 해봤고, 시간이 흘러서는 작은 파트를 리딩 하기도 했다. 물론, 사이드 프로젝트를 주말을 활용해 진행하기도 했고 창업 후 비즈니스를 위한 프로젝트도 진행해봤다.
어떠한 프로덕트를 만들기 위한 프로젝트에서 ‘기획’ 은 너무도 중요하다. STEW 코딩소모임 멤버들은 의기투합 하여 의견을 주고받고 밤새 만들 STEW 올해의 단어 서비스를 기획했다.
 

<피자를 먹으면서 기획 회의하는 STEW 코딩소모임 멤버들 | 이것은 마치 실리콘밸리>

 
우리의 생각은 이랬다.
그동안 HTML, CSS, Javascript, Python 을 배웠지만, 웹서비스를 만들기 위한 리눅스 환경, 데이터베이스, Django, 등은 배우지 않았다. 개발자로 일하는 멤버들이 그것들을 최대한 커버하면서 Task 를 분배했다.
 

<STEW 올해의 단어 이메일 보내기 프로세스>

  1. 데이터베이스를 다루지 못하기에 ‘Google Sheet’ 를 활용해 데이터베이스를 대체한다.
  2. Google Sheet 에 있는 데이터를 Python 코드로 가져온다.
  3. 가져온 데이터에 있는 ‘이름’, ‘올해의단어’, ‘이메일’ 을 활용해 Python 코드로 이메일을 보낸다.
  4. 이메일 발송 후 성공 로그를 ‘Google Sheet’ 에 기록한다.
  5. 이 프로세스는 Crontab 을 활용해 실행되고, 매달 이메일을 발송한다.

 
<STEW 올해의 단어 웹사이트 프로세스>

  1. 데이터베이스를 다루지 못하기에 ‘Google Sheet’ 를 활용해 데이터베이스를 대체한다.
  2. Google Sheet 에 있는 데이터를 Python 코드로 가져온다.
  3. 가져온 데이터에 있는 ‘이름’, ‘올해의단어’, ‘이메일’ 을 Django Framework 를 활용해 웹페이지를 띄운다.

 
<STEW 올해의 단어 개발환경>

  1. 소스 관리는 GitLab 으로 한다.
  2. 서버는 STEW 홈페이지가 있는 AWS CentOS 로 한다.

 
생각보다 순조롭게 기획이 완료되었다. 그동안 온라인으로 틈틈히 기획을 해왔고, 미리 Task 를 분배해 사용 될 API 및 라이브러리를 숙지하고 온 상태였다.
그래, 이미 개발이 완료 된 것 처럼 이때까지는 아주 행복했다.
 

<멘토님이 사주신 사과와 귤을 들고 행복해하는 ‘두개의 심장’ | 금새 끝날 줄 알았지…>

 
 

세션2. 개발 시작. 고통의 시작


 
해커톤을 앞두고 멤버들의 상태는 정말 스펙타클했다.
필자는 매우 스트레스를 받은 상태였고, 한 친구는 당일 야근이 잡혀 22시가 되서야 왔다. 한 친구는 당일 시험이 잡혀 역시 22시가 넘어서야 도착했다. 온갖 일정을 소화하고 온 상태의 멤버들은 피곤에 찌들어 있었고, 그 상태에서 다시 새로운 일정을 시작했기에 모두가 힘들어 있었다.
 

<22시가 넘어서야 다 모인 해커톤 멤버들 | 안 힘든척>

 
역시나 프로젝트는 생각처럼 되지 않았다. Git 을 스터디 하긴 했지만, 완벽히 숙지가 되지 않은 상태였다. 며칠 전 포맷을 한 친구는 Git 자체가 설치되지 않아 Git 설치를 위한 삽질을 시작했고, 이메일 발송을 담당한 친구는 시험을 망쳤다며 회로가 마비 된 상태였다. 야근을 하고 온 개발자 친구는 매우 날카로운 상태였다.
Python 강사로 활동하는 게스트는 23시에 귀가하기 전 3시간 동안 해커톤에 엄청난 힘이 되어줬다. 이미 우리가 만들 기능을 테스트 해본 상태였고, 무려 자신의 ‘강의’ 콘텐츠와 매우 비슷하다고 했다. 우리가 해야 할 기능들의 몇몇 예제들을 보내주었고, 회로가 마비된 친구는 이 예제들을 분석하며 정상 컨디션을 찾기 시작했다.
 
Git 을 쓰기 시작한 친구들은 소스를 커밋했네, 커밋이 안되었네 하며 싸우기 시작했고, 스터디 때는 볼 수 없었던 ‘개발의 맛’ 을 보기 시작했다. 그렇다. 내 친구들은 서서히 ‘개발자의 모습’ 을 보여주기 시작했다. 그들은 마치 하나의 그래이색 같았다.
 

<개발에 집중하는 친구들 | 그래이색을 입은 개발자들 | 나만 빼고 다 ‘그래 이색’ 이다.>

 
더할 나위 없었다. 생각보다 우리의 신입 개발자들은 잘해주었다. 처음 프로젝트에서 써보는 Git 도 훌륭히 다뤄주었고, 드디어 이메일이 발송 되었다며 덩실덩실 춤을 췄다. 그야말로 해커톤에서 기뻐하는 개발자의 모습이었다.
개발자들이 행복을 느끼며 달릴때 쯤, 해커톤에는 치킨이 빠지면 안된다며 히든카드 게스트가 찾아왔다. 역삼역 근처에 스타트업을 운영하는 필자의 지인이 일정을 마치고 치킨을 사들고 달려와주셨다. 오고가는 치킨 속에서 우리는 마치 이미 프로젝트가 끝난 양 행복했다 😀
 

<치킨을 들고 나타나신 대표님 | 그렇게 그들은 행복했습니다.>

 
정작 문제는 필자였다. Spring 을 활용해 웹서버를 만들어본 적은 있지만, Django 로 서비스를 만드는건 처음이었다. 지난 달 몇몇 테스트를 해보긴 했지만, 몇 주 흘렀다고 또 다 까먹었더라.
삽질에 삽질을 거듭했다. Django 로 서버를 띄우고, 페이지를 띄우고 나니 Google Sheet 에서 데이터를 가져오기 기능이 완료되어 있었다. 거듭 박수를 치며 소스를 받아 낑겨넣었다.
 
 

세션 3. STEW 올해의 단어 개발 성공


 

<Google Sheet 의 데이터를 Python 으로 가져오기 성공적 | 장하다 코딩소모임>

 
그렇게 데이터를 가져왔건만, 웹페이지에 뿌려보니 정말 디자인이 ‘똥’ 같았다. 하하… 그래, 우리는 디자이너가 없다. 급하게 게스트 친구들이 Bootstrap 을 활용해서 간단히라도 만들어라. 이대로는 봐주기 힘들다며 외쳐댔지만, 후… Bootstrap 은 필자를 본격 괴롭히기 시작했다.
아놔, 이거 빼면 저게 안되고, 저거 빼면 이게 안되고. 그래… 필자는 안드로이드 개발자라서 프론트엔드의 똥같은 상황을 잘 안다. 앉아서 엄청난 집중력을 발휘하기 시작했다. 왜 안되는가!!! 왜 이게 안되는가!!! 그렇게 시간은 3시를 넘어갔다.
 

<저 멀리 보이는 고통받는 필자와 새벽 3시를 외치는 호우형>

 
이런 필자를 곁에서 지켜보던 우리의 임선생. “에잇 나와바여~” 를 시전 하더니만, 결국 자리에 앉았다. 임선생으로 말할 것 같으면 무려 ‘머신러닝’ 을 코딩소모임에서 친히 강의를 해주셨고, 챗봇을 만드는 스타트업에서 일하며, 다수의 해커톤에 참가한 개발자 중의 개발자.
이날 또한 해커톤에서 없으면 안될 중요한 역할을 해주었다.
 

<초상권 보호를 요청한 임선생 | 알 만한 사람은 다 안다는 개발자 | 사기캐릭>

 
기능 개발을 다 마친 후에도 우리는 서버 환경 및 Crontab 설정, Django 설정 등 세팅에 개발 시간 만큼을 더 공들였다. 그래, 사실 개발은 세팅이 반이다…
결국 Crontab 이 정상 작동하지 않아 급히 Django Background Task 를 활용해 이메일을 발송했고, 빠뜨린 몇몇 디테일 요소를 급히 수정했다. 이메일은 발송은 정상 작동하였고, 필자의 이메일에 테스트 이메일이 꽂히는 순간 우리는 프로젝트 이름인 Woy 워이! 를 외치며 춤을 췄다.
워이 워이!!!@@@!!!
 
그렇게 만들어진 웹사이트를 여러분에게 공개한다.
 

<STEW 올해의 단어 웹페이지 | http://bit.ly/2DDVKPN>

 
생각보다 굉장히 일찍 프로젝트를 마칠 수 있었다. 사실 해커톤 공간을 24시간 그러니까 23일 토요일 20시까지 빌렸다. 6년차 개발자 멤버와 필자는 이 시간내에도 끝내기 힘들 것 같다며 걱정을 하기도 했다.
하지만, 신입 개발자 멤버들의 활약과 두 게스트의 화려한 서포팅 속에서 STEW 코딩소모임 해커톤은 11시간만에 성공적으로 서비스를 오픈 후 마무리 할 수 있었다.
그렇게 우리가 기획했던 STEW 올해의 단어 서비스는 아래와 같이 마무리 되었다.
 

<STEW 올해의 단어 이메일 보내기 프로세스>

  1. 데이터베이스를 다루지 못하기에 ‘Google Sheet’ 를 활용해 데이터베이스를 대체한다.
  2. Google Sheet 에 있는 데이터를 Python 코드로 가져온다.
  3. 가져온 데이터에 있는 ‘이름’, ‘올해의단어’, ‘이메일’ 을 활용해 Python 코드로 이메일을 보낸다.
  4. 이메일 발송 후 성공 로그를 ‘Google Sheet’ 에 기록한다.
  5. 이 프로세스는 Crontab 을 활용해 매달 발송한다. Django Background Task 를 활용해 매달 발송한다.

 
<STEW 올해의 단어 웹사이트 프로세스>

  1. 데이터베이스를 다루지 못하기에 ‘Google Sheet’ 를 활용해 데이터베이스를 대체한다.
  2. Google Sheet 에 있는 데이터를 Python 코드로 가져온다.
  3. 가져온 데이터에 있는 ‘이름’, ‘올해의단어’, ‘이메일’, ‘프로필사진’ 을 Django Framework 를 활용해 웹페이지를 띄운다.
  4. Bootstrap 을 통해 디자인한다.

 
<STEW 올해의 단어 개발환경>

  1. 소스 관리는 GitLab 으로 한다.
  2. 서버는 STEW 홈페이지가 있는 AWS CentOS 로 한다.

 
개발을 아는 사람은 ‘정말 별 것 아니다’ 라고 말할지 모르겠다. 하지만, 이 기능을 만들기 위해 기초적인 Python 문법이며, Git 등 소스관리 협업 개념 등 생각보다 알아야 할 것이 많다. 다시 말하지만 STEW 코딩소모임에서 처음 개발을 배우는 친구들이 만든 것이며, 이들이 ‘개발적 사고’ 를 하기 시작했다는 것은 무척 의미가 있다고 생각한다.
또한, 우리는 이제 시작이다. 이제 우리는 함께 개발을 할 수 있게 되었고, 이제 이 웹페이지를 기반으로 확장을 시작 할 것이다. 필자는 친구들이 무척 자랑스럽다.
 
그렇게 우리는 으쌰으쌰 하며 프로젝트를 마무리 했고, 피곤에 찌는 몸을 가지고 최대한 밝은 표정을 지으며 11시간 끝의 프로젝트 완성을 자축했다.
 

<STEW 코딩소모임 해커톤을 성공적으로 마친 멤버들 with 임선생>

 
감회가 새로웠다. 반년간의 노력이 간단하지만 의미있는 웹페이지 한 장으로 완성되었다. ‘개발자 맞냐?’ 며 내게 던져진 5년 전의 상처가 말끔히 씻겨 내려갔으며, 그동안 함께 해준 친구들에게 정말 깊은 감사를 표했다. 정말이지 이 해커톤을 스스로 포기 했더라면 정말 아쉬웠을 거라며 스스로를 다독였다.
개발을 못하던 STEW 코딩소모임의 멤버가 Python 을 우리와 함께 배워, Google Sheet 에서 가져와 웹페이지와 이메일 발송에 데이터를 제공했다. 지난 반년간 스스로도 포기하고 싶었을 만큼 괴롭기도 했다. 이런 필자를 믿고, 멤버들을 믿고 끝까지 완주해준 STEW 코딩소모임의 ‘두개의 심장’ 을 2017 STEW 코딩소모임 MVP로 선정했다.
 

<2017 STEW 코딩소모임 MVP ‘두개의 심장’ | 상품은 소프트웨어 전문 매거진 마이크로소프트웨어>

 
 

세션 4. 2017 STEW 코딩소모임 해커톤을 마치며


 
그렇게 우리는 11시간의 해커톤을 마치고 귀가했다.
돌아오는 동안 나는 피곤하지 않다며 쎈척을 해댔지만, 친구들이 지하철에서 내린 뒤 스르륵 잠이 들어 집에 돌아오지 못할 뻔 하기도 했다. 그래… 친구들이 모두 내리니까 그제서야 긴장이 풀리더라.
 
집에 돌아와 씻고 빠르게 잠을 청했다. 몇 시간 뒤 오전 9시에 발송을 맞춰 둔 STEW 올해의 단어 이메일이 정상적으로 발송 되었음을 확인했다. 그래, 우리 지난 반년간 참 고생 많았다.
 

<STEW 올해의 단어 이메일 수신 | 필자의 올해의 단어는 Balance>

 
개발을 해보지 않은 사람은 알지 못하는 그런 뿌듯함이 있다. 이미 수많은 앱과 프로젝트를 해온 필자 였지만, 우리가 만든 팀에서 우리가 만든 코드로 우리를 위한 서비스를 만들었다는 것은 그동안의 뿌듯함과는 또 다른 뿌듯함 이었다.
다시금 친구들에게 고마움을 표한다.
 
해커톤도 그러했지만, 사실 코딩소모임 자체를 그만 할까 고민도 많이했다. 개발자로 일하기에 코딩을 당연히 해왔지만, 개발을 모르는 사람이 개발을 배우는 것은 생각보다 어려운 일이었다. 반년간 모임을 운영하며 두 명의 친구가 그만두기도 했고, 여러 사건들이 겹치며 말로 다 할 수 없는 피로감이 몰려오기도 했다. 하지만, 그럼에도 우리는 완주했다.
2017년을 며칠 남긴 오늘. 그동안의 2017년을 돌아보며 스스로가 잘했던 것을 꼽자면 단연 코딩소모임을 그 중 하나로 꼽을 수 있겠다. 일요일 아침에 모여 피로를 참아가며 공부했던 우리들. 그들에게 참 잘했다고, 이렇게 말해줄 수 있어서 참 다행이다.
 
STEW 코딩소모임 해커톤.
짧고도 긴 11시간. 우리는 성공적으로 목표를 달성했음을 알리며, 자랑스럽게 리뷰를 마친다.