42서울 소프트웨어 경진대회 결과

작년엔 우수상이었지만, 올해는 최우수상을 받았다..! 내년엔 대상이겠지?

계기

사실 42서울 소프트웨어 경진대회가 열린다고 했을 때 딱히 ‘이걸 만들어야겠다!’ 하고 떠오르는 아이디어가 없어서 참여할 생각이 없었다. 그런데 집현전 개발 회의 중, “검색 기능 고도화”라는 주제로 경진대회를 나가면 어떨 것 같냐는 의견이 나왔고, 생각해보니 포트폴리오나 경진대회에도 밀리지 않을 것 같은 주제여서 같이 하자고 말씀드렸다.

예선

기획

아이템 선정

사실 집현전 웹사이트는 이미 서비스 중인 웹사이트였기 때문에, 정말 창의적인 아이템 아니면 개발 내용이 많고 질이 좋아야 할 것 같았다. 그리고 검색 기능 고도화라는 주제와 도서관이라는 집현전의 성격을 반영해야 했다. 따라서 구현하기로 한 아이템들은 아래와 같았다.

  • 검색어 자동 완성 및 도서 미리보기 제공 - 초성 검색 기능 도입
  • 추천 검색어
  • 사용자별 최근 검색어
  • 실시간 검색어 순위
  • 42 서클 별 추천 도서 큐레이션

서클 별 추천 도서 큐레이션에 인공지능을 이용하자는 이야기도 있었는데, 시간이 부족하다는 생각이 들어 내가 반대했다.
잠깐이지만 이미 난 Tensorflow로 인공지능을 다뤄본 적이 있다. 인공지능을 학습시키려면 데이터셋이 필요한데, 42 서클 별 추천 도서 데이터셋은 우리가 직접 모아야 한다.
데이터 레이블링은 그렇다 쳐도, 우선 당장 쓸만한 1,000건의 데이터도 없었다. 대출 기록이야 1,000건이 넘어가지만, 사용자가 그 도서를 빌리는 시점에 어떤 과제를 진행하고 있었는지에 대한 기록이 없다.
그렇다면 데이터를 새로 축적해야하는데, 약 1,400명의 카뎃이 있는 집단에서 많으면 하루에 10번 정도의 대출/반납이 발생한다. 그 시점에서 개발 기간으로 주어진 시간은 한 달 정도인데, 한 달만에 데이터 쌓아 자동으로 레이블링하는 API 만들어서 데이터 쌓고 모델 학습까지 시킨다? 절대 무리라고 판단했다. 그래서 인공지능은 아쉽지만 다음 기회로 미루기로 했다.
사실 내가 멤버가 된다면 레이블링할 데이터를 자동으로 축적하는 API 정도는 만들어 둘 생각이다.

문서 작업…

경진대회 문서들

경진대회에 사용한 문서들

당연히 참가 신청서가 있었고, 여기에 들어갈 문서를 작성했다. 예상 UI를 대충 keynote에서 뚝딱뚝딱 만들었다. 그리고 추후에 내가 어차피 개발하면서 볼테니 플로우차트도 미리 그려서 신청서에 첨부했다. 물론 DB 구상도 해두었다.
신청서 작업은 생각보다 오래 걸리지도 않았고, 그렇게 어렵지도 않았다. 진짜 문제는 개발 완료 보고서였지…

예선 통과 후

개발 시작

예선 통과를 확인하고, 우리는 전부 개발을 시작했다. 프론트 1명에 백엔드 3명이었고, 각자 역할을 분담하여 작업했다.

일정 관리는 보통 github의 Projects를 통해 이루어졌다. PR이나 issue를 올리면, 그곳에 시작일과 마감일을 세팅하여 한눈에 일정이 보이도록 세팅했다.

개발 회의의 경우, github의 Discussion을 이용했다. 이곳에 미리 프론트-백 내지는 백-백끼리 의논할 내용이 있으면 자유롭게 의견을 물어보고, 그 내용을 정리했다.

개발 과정이 순탄했던 점은, 아마 다들 집현전 멤버이기도 하고, 집현전 서비스 개발 경험이 있었기 때문이라고 생각한다. 그리고 이미 집현전에는 개발 컨벤션들이 다 자리잡혀 있었기도 했고.

서로 싸우는 일도 없었고, 기획도 흔들리지 않았고, 일정도 잘 관리했고, 각자 맡은 역할을 다했기 때문에 정말 별 탈 없이 개발은 진행됐다.

42시간 해커톤

사실 이거 때문에 대회 참여하는 데 망설여졌다. 이전에 minishell 과제를 하며 한 번 밤을 새보니 일주일 정도의 반동이 왔어서, 난 절대 밤을 새우면 안 된다는 것을 깨달았다. 근데 42시간 해커톤? 밤을 새운다? 절대 절대 반대.

다행히 굳이 밤을 새울 필요는 없었다는 보컬의 말씀과 함께 42시간 해커톤이 시작되어 키트를 받았다. 티셔츠랑 포춘쿠키, 명찰이었는데, 포춘쿠키에 적인 글이 꺼림칙했다. “양보하면 더 큰 걸 얻을 수 있다.” 대충 이런 내용이었던 걸로 기억한다.
저녁 식사 지원금이 걸린 골든벨에서 10문제 중 반도 못 맞춰서, 내가 포춘쿠키 다른 팀원에게 글귀 보여주면서 이거 양보하고 우리는 상을 받자고 얘기했었다.

첫 날은 우리 전부 22시에 집에 갔었다. 개발이야 이미 그 시점엔 끝난 상태였고, 이상한 에러만 잡으면 됐었다. 발표 준비에다가 개발 완료 보고서를 작성하고, UI만 조금 손 보면 됐다. 다음 날 10시에 모이기로 하고 그날은 그렇게 해산했다.

이튿날이 되고 해커톤의 마지막 날, 아침에 모여서 개발 완료 보고서도 작성했다. 나는 발표 준비 PPT도 야매로 슬라이드 레이아웃까지 만들어서 만들고 있었다.
그렇게 2시간만에 만든 PPT로 리허설(이라 쓰고 참가자 간의 발표라고 읽는다)을 했다. 스크립트는 당연히 준비하지 못했고, 그냥 즉석에서 했다. 어차피 내가 만든 PPT인데 말이야 그냥 하면 됐는데, 혼자 나가다보니 시연을 할 때 마이크를 껐다 켰다 하면서 들었다 놓는 불편한 점이 있었다.
그리고 내가 맡은 분야 외에는 깊게 전문적으로는 잘 알지 못해서 질문을 받을 사람이 한 명 더 필요하다 생각했다. 마침 나 대신 질문을 받으려 앞으로 나와준 팀원 한 분을 붙잡고, 결선 때 같이 발표 나가야겠다 말씀드렸다.

리허설이 끝나고 발표 순서를 정하는 사다리타기도 했는데, 우리가 마지막 순서였다. 난 앞쪽 순서를 원했는데, 도대체 무슨 상을 주려고 어디까지 양보하려 그러나 싶었다.
발표 순서를 정한 후에 우리 팀은 다시 개발 완료 보고서에 집중했다. 내용 구조를 조금 바꾸고, 예시를 참고하며 보고서를 작성해나갔다. 중간에 집현전 카뎃 분께서 몽쉘과 박카스, 비타500을 주고 가셔서 그걸로 당충전 하면서 버텼다(감사합니다!).
보고서 작성은 2시 조금 넘어서 끝났다. 14시가 아니라 02시 맞다. 막차는 끊기고 택시타면 당연히 5만원 넘게 나오니까 그냥 여기서 조금 있다가 첫차 타고 가야겠다 싶었다.
그래서 빈백 소파에 반쯤 누워서 2시간 정도 자고 5시에 일어났다. 그때 내가 꼬리뼈를 다친 상태였는데, 빈백에서 일어날 때 꼬리뼈 찢어지는 줄 알았다.
대충 세수하고, 아직까지 일어나있던 다른 팀원 분께 인사하고 나와서 첫차 버스를 타고 집으로 갔다.

집에 가서 씻고 누웠는데, 이상하게 밤을 새우면 오히려 잠이 더 안 온다. 그래서 2시간 정도 자고 일어나 다시 개포로 갔다. 가는 길에 PPT가 생각나 급하게 지하철에서 뚝딱뚝딱 만들었다.

결선

발표 준비

나와 같이 발표를 나가기로 한 팀원 분과 카페에서 얘기를 나눴다. PPT를 보여드리며 어떤 식으로 발표를 진행할지, 시연은 어떻게 진행되는지를 의논했다. 그리고 발표 연습을 했다.
나는 리허설 때, 따로 화면에 PPT를 띄워서 했기 때문에 결선 발표도 그런 식이겠지 싶어 포인터도 급하게 샀다. 그 포인터로 연습을 하는 동시에 팀원 슬랙에 PPT를 올려 피드백도 받아 PPT를 수정했다.

발표 시작 30분 전에, 우리는 오픈 스튜디오로 갔다. 가서 보니 화면을 안 쓰고, 단상 같은 곳에 노트북 연결해서 화면공유를 하고 있었다. 포인터 괜히 샀네 싶었다.

발표

우리 차례가 오고 발표와 시연을 전부 끝난 후에, 심사위원분들로부터 질문을 받았다. 그중에는 어떻게 구현했는지, …한 기능은 없는지 등의 프로젝트 관련 질문부터 집현전 웹사이트 자체에 대한 질문도 있었다. 한 심사위원분께서는 도서 관리 시스템이 필요한데 납품해달라는 말씀도 해주셨다.

그리고 여러 아이디어도 주셨다. 앞서 말한 인공지능으로 도서 큐레이션을 구현한 것이라든가, AR을 이용한 도서 검색 등의 재밌는 소재를 주셨다. 아마 다음 대회가 있다면 저 내용으로 가지 않을까..?

결과

결과는 화끈하게 당일날 공개됐다. 모든 팀의 발표가 끝나고 10분인가 지나자, 바로 결과가 나왔다. 우리는 위에 사진 올려놓은대로 최우수상을 받았다.
개인적인 경험상, 창의성과 완성도가 높다면 1등, 창의성은 조금 낮지만 완성도가 높다면 2등, 창의성은 괜찮은데 완성도가 아쉽다면 3등인 것 같았다. 예상한 대로 결과가 나와서 기분이 좋았다.
칼을 뽑았으면 뭐라도 베야지. 상 못 받았으면 밤을 새운 게 너무 억울할 것 같았다.

대회가 끝나고

위에 내가 밤을 새우면 반동이 온다고 했는데, 이번에도 어김없이 반동이 왔다. 생체 리듬이 박살나서 거의 일주일 간 아무것도 못하고 좀비처럼 지냈다. 거기에 꼬리뼈에 금도 갔어서 회복한다고 집에서 내내 쉬고 있었다(운동도 못 갔다..!).
지금이야 좀 나아져서 이렇게 회고도 작성하는데, 역시 난 절대 밤을 새우면 안 되겠다. 그런데 세상 일은 내 계획대로 되지 않는다.

이제 손 놓았던 개인 과제랑 프로젝트도 진행해야지… 이번이 42에서 열린 대회에 처음으로 참여했는데, 성적도 기대한 대로 나왔고 팀원들 간의 유대도 깊어진 것 같아서 많이 얻고, 또 배워가는 기회였던 것 같다.
제일 중요한 것은 이 대회에 참여한 것을 후회하지 않는다는 것이다. 대회 기간 내내 단 한 번도 참여 결정에 후회한 적이 없었기 때문에, 확신을 가지고 끝까지 달릴 수 있었다.
그리고 나만 달린 게 아니라 팀원들도 같이 달려서 지칠 것 같을 때마다 정신차릴 수 있었다.

아직 끝난 게 아니다..?

대회 끝난 지 6일 정도 뒤에 나한테 연락이 왔다. 이노베이션 아카데미의 행사인 이노콘에서 이 내용을 가지고 발표를 해줄 수 있겠냐는 내용이었다. 시상식도 그곳에서 진행한다고 한다. 당연히 내 입장에선 나쁠 게 없어서, 다른 팀원들과 얘기를 나누고 참여 의사를 말씀드렸다.

이 다음 글은 이노콘 후기가 되지 않을까 한다(2023-10-05).

댓글남기기