대구SW고에서의 연말 해커톤을 되돌아보며

Eric·2022년 1월 2일
0
post-thumbnail

🏫 개요

2021년 12월 29일, 대구 SW고에서 전교생을 대상으로 하는 연말 해커톤이 개최되었습니다.
이번 해커톤은 저번 학기와 달리, 2학년 선배들과 함께하지 않고 따로 진행한지라 상당한 부담감이 있었습니다.

대신 저희 학교를 졸업하신 선배들이 멘토로 참가하였습니다.

👋 팀 매칭

이번 해커톤에서 팀 매칭은 자율적으로 진행되었습니다. 백엔드 개발자인 저는 같은 동아리 소속의 프론트 개발자 친구 2명과, 발표를 담당할 친구 1명, 그 이외에 1명과 함께 팀을 꾸렸습니다.

팀명은 lessf!ow로 정하게 되었습니다. (왜 lessf!ow인지는 1일차에 나오게 됩니다)

🔥 진행 과정

1일차

1일차에는 해커톤 주제 발표와 멘토 소개 등이 있었습니다.

해커톤 주제 공개

해커톤 주제는 "우리를 이롭게 하는 소프트웨어"였습니다. 사실 이 주제가 발표되기 전에 저희는 "학생들이 뉴스에 관심을 가져 지식의 폭을 넓힐 수 있도록, 뉴스를 요약하고 이를 영상화해주는 플랫폼"을 계획하고 있었는지라, 이 아이디어를 그대로 사용하기로 결정했습니다.

사실 저희의 팀명이었던 lessf!ow도 위 플랫폼 아이디어에서부터 비롯되었습니다. 바로 "적게"를 의미하는 less와, "흐르다"를 의미하는 flow를 합친 것이었는데요, 불필요하고 긴 내용을 "적게" 만들고, 유용한 정보만이 사용자에게 잘 "흐르게" 해 주고자 하는 저희의 소망을 담은 것이었습니다.

멘토 소개

해커톤 멘토로는 무신사에서 근무하시는 프론트 개발자를 비롯해 여러 분야에서의 수많은 실력자 선배님들이 참여해 주셨습니다. 1일차에는 "우리가 이 분들의 도움을 받을 일이 잘 없지 않을까?"라는 생각을 했었지만.. 1일차부터 이 생각은 오판이 되어버렸습니다.

UI 디자인

이후 시작된 개발 시간에서는, 본격적인 디자인과 기능 계획 작업에 착수하였습니다.

먼저 디자인의 경우 Figma를 이용해서 팀원 전체가 디자인에 참여하는 방식으로 진행했습니다.

시간이 제한된 해커톤 상황이었기에 가능한 개발이 간단하면서도 아름다운 UI가 나오도록 디자인을 신경쓰게 되었고, 총 3개의 프론트 페이지를 디자인하게 되었습니다.

본격적인 개발

1시간 가량을 소모해 대략적인 디자인을 완성하고 나서, 백엔드 담당인 저는 핵심 기능인 뉴스 요약기능 구현에 들어갔습니다.

먼저 뉴스를 요약하기 전에, 뉴스 기사를 수집하는 것이 필요했기에 먼저 Selenium을 이용해 기사를 스크래핑 하는 기능을 먼저 구현하였습니다.

이 스크래핑 기능을 구현할 때, 클릭과 관련된 문제로 인해 결국 멘토 선배님들의 도움을 받게 되었습니다. 멘토 선배님들은 이 문제를 보시고, "특정 시간동안 클릭할 element 위에 무언가가 생겨서 그런거 같은데, 이 무언가가 사라질 때 까지 클릭을 시도하는 함수를 만들면 어떨까?" 라는 조언을 주셨습니다. 저는 멘토 선배님들의 조언에 따라 코드를 작성해 보았고, 이 문제를 해결할 수 있었습니다. (이 때 재귀함수를 이용해서 구현하였는데, 멘토분께서 이걸 보시고 "내가 설명한 걸 잘 구현했다"며 칭찬해 주셔서 힘을 받을 수 있었습니다.)

이후 기사를 요약하는 방법에 대해 고민하던 저는 예전에 만들었던 "KOMORAN 기반 라이브러리"를 떠올려 냈고, 이 라이브러리의 코드를 응용해 뉴스 기사를 요약할 수 있었습니다. 대략적인 성능을 측정해 본 결과, 평균적으로 기존의 50%까지 요약해내는 것을 확인할 수 있었습니다.

이제 기사도 요약했겠다.. 영상을 만드는 것이 관건이었는데, 사실 기사 요약보다 이 과정이 어려웠습니다. 영상 렌더링을 소프트웨어로 하는 방법을 찾아야 했는데, 구글링을 하던 도중 React를 이용해 영상을 렌더링 할 수 있는 Remotion이라는 프레임워크를 찾았습니다.

🔗 Remotion 공식 사이트

이렇게 발견한 프레임워크를 통해, 아까 요약한 데이터를 연동시켜 영상을 렌더링하는 기능도 대략적으로 마무리 할 수 있었습니다.

1일차가 끝나가던 오후 10시 즈음에는 팀원들과 함께 노래를 들으면서 백엔드-프론트 간 연동을 시도해보고, 당일 작업을 깃허브에 백업하며 마무리하는 시간을 가졌습니다.

2일차

갑자기 찾아온 버그

어느 정도의 구현을 완료했던 저희는 비교적 여유로운 마음을 가지고 작업하고 있었습니다. 1~2시간이 흐른 뒤, 모든 기능을 완성한 저희는 마감이 3시간 남은 시점에서 슬슬 시연영상을 준비하려고 했습니다.

그런데.. 시연 영상을 위해 작품을 테스트하는 도중, 기사를 크롤링하던 셀레니움이 멈춰버리게 되었습니다. 프로세스 충돌 문제일까, 혹은 크롬드라이버 문제일까 재부팅도 해보고 크롬드라이버도 재설치 하였지만 여전히 문제는 계속 발생했습니다.

결국, 저희는 또 다시 멘토 분들께 도움을 요청하였습니다. 이번에는 멘토 분들마저도 문제의 원인을 파악하시는 데에 어려움을 겪으시게 되셨습니다. 결국 문제를 파악하는 동안 남은 시간은 2시간으로 줄어들게 되었고, 멘토 분들도 깊은 고민에 빠지게 되셨습니다.

그러던 도중, 한 멘토분께서 Python을 통해서 저희가 작성한 Kotlin 기반 코드를 시도해 보셨고, 이를 통해서 다행히 문제를 해결할 수 있었습니다. 다만 그 멘토분께서도 문제만 해결하셨고, 원인은 모르겠다고 하셨습니다. 저희는 오류를 해결하는 데에 큰 도움을 주신 멘토 분들께 감사 인사를 드리고, 재빨리 자리로 돌아가 시연 영상을 촬영하게 되었습니다.

마무리

3분에 달하는 시연 영상을 촬영 후, 저희는 마감 1분을 앞두고 발표자료/소스코드와 함께 제출을 완료했습니다. 결과물 제출 사이트의 "업로드 완료" 메시지가 뜨는 순간 저희는 안도의 한숨을 내쉬었고, 서로에게 수고했다며 격려의 한마디를 나누었습니다.

🎉 결과

수상은 각 학년별로 우수상 3팀, 최우수상 2팀, 대상 1팀이 시상을 받을 수 있었습니다.

저희는 긴장한 상태로 결과를 기다리게 되었고, 마침내 대상 수상팀을 호명하는 순간 "lessf!ow"라는 단어가 불리게 되었습니다. 저희는 기쁜 마음으로 단상 위에서 교장 선생님으로부터 상과 부상인 갤럭시 버즈2를 받았습니다.

이렇게 2일 간의 해커톤 대장정은 막을 내리게 되었습니다.

📘 소감

사실 대상을 받을 거라고는 생각조차 하지 못했던 해커톤에서, 이렇게 대상을 받으니 기쁨이 가시질 않았습니다. 이번 해커톤에서 여러가지 기술적 고난도 있었지만, 팀원들과 멘토 분들의 도움 덕분에 잘 해결해 나갈 수 있었고, 좋은 결과를 얻을 수 있지 않았나 생각합니다.

이번에 대상을 얻은 것으로 만족하거나 자만하지 않고, 다음에는 더 좋은 아이디어와 실력으로 또다시 대상 자리를 지켜내 보려 합니다.

+ 다음 날, 지디넷코리아와 전자신문에 연말 해커톤이 보도된 것을 발견했습니다. 그것도 무려 저와 제 팀원들이 나온 사진이 썸네일로 된 기사들이었습니다.. ㅎㅎ 저희 팀 우승소식이 언론에도 나와 더욱 더 기분이 좋았던 거 같습니다. 2021년 마지막 선물이라고 생각되기도 했고요. 아무튼 정말 좋은 경험이었다 생각합니다.

profile
Backend Engineer | 코드로 우리의 세상을 어떻게 바꿀 수 있는지 고민합니다

0개의 댓글