체력 대신 효율로, 열정 대신 무게감으로 해커톤에서 살아남기
부트캠프 강사로서 일하다 보면 항상 내가 잘 가르치고 있는지, 내가 이 사람들에게 무언가를 가르칠 자격은 있는 건지 항상 의구심이 든다. 늘 평가를 받긴 하지만 그건 실력적인 측면보다는 운영적인 측면에 대한 점수에 더 가깝다. 강사라는 걸 내려놓고 진짜 프로그래머로서의 평가를 받아보고 싶다는 생각. 그게 해커톤에 참가하게 된 동기였다.
자기 자신에 대해서 객관적이게 되는 건 너무 힘들다. 아무리 그래도 나는 내 삶에서는 내가 주인공이니까. 처음에는 뭔가 남의 기회를 빼앗는 건 아닌가 싶기도 했지만 오히려 이런 생각이 자아가 비대한가 싶어졌다. 그런데 이런 망상은 오래가지 않았다.
개인적으로 프런트엔드보다는 백엔드를 더 좋아하기 때문에 백엔드로 지망했다. 그러고서 곧 후회했다. 온라인 코딩 테스트를 본다고 해서 오랜만에 알고리즘 푸나 싶었는데 실제로는 과제 테스트에 더 가까웠다. 테스트에 대해서 자세한 건 이야기하기 힘들지만, 절대 만만하지 않았고 ChatGPT의 도움이 없었더라면 마감도 못했을 것이다. 그래서 그냥 참가 자체를 좋은 추억으로 남기려고 했는데...
짧은 기쁨 뒤에는 긴 걱정이 온기를 빠르게 식혔다. 강사라고 하면 당연히 사회성이 높겠지 싶을 수 있지만, 그건 돈을 받으니까 수강생들과의 커뮤니케이션이 원활하게 하기 위해서 각고의 노력을 하는 것이다. 그런데 팀 빌딩을 해야 했다. 그것도 자유 팀빌딩을.
기획자 1, 디자이너 1, 백엔드 개발자 1, 프런트엔드 개발자 1, 총 4명이 팀을 이뤄야 했다. 다른 이들의 부족함은 내가 서포트한다고 생각하고 있었기 때문에 자발적이고 능동적인 팀이길 원했고 + 뭔가 너무 계산이 많거나 하지 않고 호쾌했으면 좋겠다고 생각했다.
이튿날에 걸쳐 여러 사람들과의 몇 번의 대화가 끝나고, 약간의 피곤함과 허무함이 쌓였을 즈음. 어떤 분이 먼저 연락을 주셨다.
Meet Up Day와 주제 선정
디스코드로만 소통하다가 실제 만난 팀원들은 생각한 것보다 어렸고 정확히는 내가 늙었고 기대했던 것만큼 적극적이었다. 물론 사람을 상대하는 것이 그렇게 어렵지 않지만 아무래도 코딩을 통한 문제해결을 해야 하는 상황에서 사람으로 스트레스받고 싶진 않았다. 특강, 레크리에이션 등을 하면서 많이 친해졌고 오랜만(?)에 수평적인 커뮤니케이션이라서 그런지 스스로가 꼰대 같은지 계속 자기 검열을 하곤 했다.
그 후에는 주제 선정을 하기 위해서 밋업 데이를 다음날부터 이틀 정도 추가적으로 회의를 진행했다. 대회 주제는 'AI에 마음을 담다'였는데 마음 그거 어떻게 담는 건데? AI를 쓴다는 것을 제외하면 거의 풀어놓아준 거나 다를 바 없었다. 이틀 동안 밤마다 모여서 토의하고 추가적인 자료조사를 하는데 조금 헛도는 느낌이 들어서 테스트해 볼 수 있는 프로토타입을 만들어서 아이디어를 검증해 보았다. 그 결과 처음 아이디어는 기각.
결과적으로는 감정노동을 하는 사람들을 위한 서비스를 만들자는 의견이 나왔고 인스타그램 같은 SNS에서 댓글 관리에 도움을 줄 수 있는 서비스를 만들자고 의견을 모았다. 그러고 나서는 각자 포지션에 맞춰서 PM은 요구사항을 짰고, 프런트엔드와 디자이너는 화면을 만들고, 백엔드는 API를 준비했다.
해커톤 당일이 되었다. 토요일 10시부터 시작해서 다음날 오후 12시까지 마감. 2주 정도의 준비시간이 있었지만 정작 당일이 되고 보니 많은 것이 모자랐다. 나는 프런트엔드에 병목을 발생시키고 싶지 않아서 엔드포인트를 먼저 모킹 해서 정리하는 작업을 먼저 했고, 그 결과 나는 26시간 동안 DB 세팅, JWT 같은 걸 문제없이 처리해야 했다. 그를 위해 우선 백엔드 자체 개발에서의 공수를 줄이기 위해 FastAPI를 사용해서 Swagger를 자동생성하여 테스팅 과정과 프런트엔드에게 전달하는 명세서를 겸했고, uv를 사용해서 개발 환경을 정리, pm2로 배포를 간단하게 처리했다. 많은 것이 주최 측에서 전달해 준 인스턴스와 API 선에서 처리가 가능했고 아낀 시간만큼 시스템의 안정성에 대해서 더 신경을 많이 썼다.
솔직히 그 26시간 동안 뭐 했는지 잘 기억이 나진 않는다. 뭔가 먹는 걸 계속 줬고, 마셨다. 카페인은 자체로 조달해야 했다. 아메리카노도 마시고, 캔커피도 마셨다. 가끔 눈을 껌뻑하면 옆에 있던 조원들이 있다가 없다가 했다. 처음에는 벡터 DB나 RAG 같이 평소에 꼭 적용해보고 싶던 기술적 욕심들이 있었는데 후반부에 가니 그냥 너무 지연되지 않고 버그 없이 서빙하는 것에 집중하게 되었다. 모든 메이커들이 마주하게 되는 진실의 시간이랄까?
다행히도 백엔드였기 때문에 발표의 책무에선 벗어났다. 기술적 질문에만 조금 서포트를 하면 되는지라 다른 부차적인 것들은 모두 무시하고 개발에 집중할 수 있었다. 현업에서 일할 때도, 강사로서 무언갈 준비할 때도 혼자서 2~3인분을 해야 했던지라 누군가와 협업하고 그들에게 의존한다는 건 어찌 보면 즐겁기까지 했다.
어느새 제출이 끝나고 본선 심사가 진행되었다. 4명의 심사위원분들이 돌아다니면서 심사를 했다. 가격 정책을 묻는 분, 아이디어를 칭찬해 주시는 분, 기술적 한계와 의존성이 명확하다는 분, 우리의 제품과 비슷한 영역의 다른 제품들에서의 경험을 말해주시는 분... 피드백을 받을 때마다 나도 다음엔 저런 식으로 피드백해봐야 하지 하는 생각이 들었다.
잘 먹었고 재밌었으니 이제 미련 없다... 싶었는데 이게 모람, 최종 6팀에 선정되었다는 것 아닌가?
이쯤 오면 좋은 결과가 있으니까 글을 썼겠지 싶을 것이다. 맞다.
개인적으론 결과야 어쨌든 러닝 포인트와 페인 포인트를 발견했다면, 그리고 그것을 바탕으로 한층 개선될 수 있다면 그 경험은 기록할 가치가 있다고 생각한다.
아래는 내가 파악한 우리 팀의 강점/성취이자 이후 팀을 이루고 운영할 때 명심할 것들이다.
백엔드가 프런트엔드의 병목만 일으키지 않으면 프런트엔드의 역량이 100% 이상 발휘된다.
기획과 디자이너를 온전히 믿자. 개발자는 왈가왈부할 것 없이 가능/불가능 여부만 빠르게 말해주면 된다.
기능과 페이지가 많다고 좋은 게 아니다. 완벽보다 완성이 더 중요한 상황에서 복잡한 설계는 독이다.
끝까지 부산하게 움직이는 것보단 적당한 부분에서 끊고 차분히 정리하는 과정이 있어야 한다.
아래는 이번에 스스로에게 느꼈던 아쉬운 점이다.
체력 이슈가 심했다. 아무리 밤을 새웠다고 해도 후반부에는 거의 언데드였다.
집중력이 모자랐다. 마음먹는데 30분씩 썼고, 그나마 1시간을 유지하지 못했던 것 같다.
틈틈이 네트워킹을 해도 좋았을 텐데 너무 팀만 보고 갔다.
아무리 일정이 급했다고 하더라도 후반부에 타협이 너무 아쉬웠다. 준비가 모자랐다.
돌이켜 보면 그저 운이 좋았다. 모든 팀원이 제 역할을 다했고, 시장성과 기술적 도전을 고루 갖춘 주제를 골랐다. 완벽에 대한 욕심보단 완성에 대한 열의가 더 강했다. 좋은 팀 분위기가 깨지지 않도록 서포트하는 것이 이토록 좋은 일이구나 싶었다. 이번 경험을 바탕으로 타인을 가르치는 내 실력도 무언가 나아졌지 않았을까.