본문 바로가기
회고/개발

[해커톤] SPARCS 서비스 해커톤 2024 참가 및 최우수상 수상 후기

by 민됴리 2024. 2. 28.
반응형

시작하며

상 받고 신난 우리들

  2월 중순, 2박 3일간 대전에서 진행된 ‘SPARCS Service Hackathon 2024’에 참가했습니다. 톡기(현채), 하나, 동경이와 음성 기반 AI 자서전 코디네이터 ‘인생기록’이라는 서비스를 만들었습니다. 짧은 시간 동안 매우 완성도가 높은 결과물이 나왔습니다. 조금만 손 보면 바로 출시까지 준비할 수 있을 정도로요. 코딩도 재미있게 했는데, 운이 좋게 최우수상인 카이스트 총장상도 받았습니다. 하지만 무엇보다 뿌듯한 건, 제가 개발을 시작한 이래 처음으로 ‘제가 사용자로서도 즐겁게 사용할 수 있는 프로덕트’를 만들었다는 것입니다. 이 글은 제가 해커톤에 참여하게 된 계기부터 해커톤이 끝나고 서울에 도착하기까지의 여정을 담은 긴 글입니다. 간략한 후기는 톡기의 블로그에서 읽을 수 있습니다.

 

SPARCS Service Hackathon 2024이란

  이번 해커톤은 KAIST의 컴퓨터 동아리인 SPARCS에서 작년에 이어 두 번째로 주관한 해커톤입니다. 대전광역시와 KAIST가 주최, 엘리스, 위메이드, 매쉬업벤처스 등 쟁쟁한 곳에서 후원한 대규모 해커톤입니다. SPARCS는 KUCC, SCSC, YCC와 함께 컴퓨터 동아리들의 연합 단체인 SKYST를 구성하고 있는 동아리 중 하나입니다. 다른 컴퓨터 동아리와는 다르게 동아리 연합회 소속이 아니라 총학생회 산하 특별기구입니다. 그래서 엄밀히 말하면 동아리는 아닌데, 다들 그냥 동아리라고 부르는 것 같습니다. 그리고 크래프톤의 창업자인 장병규 의장님을 비롯해 많은 유명 인사들을 배출한 곳이기도 합니다. 이러한 특수성으로 인해 전국 규모의 해커톤을 개최할 수 있었던 것 같습니다.

 

참가하게 된 계기

  저는 작년 11월에 개최된 SKYST 컨퍼런스에서 SPARCS를 처음 알게 됐습니다. 저와 같은 트랙에서 발표하신 OTL의 PM이신 조유민님의 강연을 되게 인상 깊게 들었는데, 이때 OTL이 SPARCS에서 출시하고 15년 이상 관리한 서비스라는 것을 알게 됐습니다. OTL 이외에도 동아리 자체적으로 많은 프로젝트를 진행하고 있으며, 이것들이 단발성으로 끝난 게 아니라, 실제 사용자들을 보유하고 있다는 사실과 SPARCS가 정말 좋은 동아리라는 것을 알 수 있었습니다.

  원래부터 해커톤을 좋아하던 저는 이러한 이유로 인해서 SPARCS에서 해커톤을 주관한다는 소식을 듣고 정말 참가하고 싶었습니다. 하지만, 일정이 너무 빠듯해서 신청하지 않으려고 했습니다. 그런데 KUCC에서 만나 이제는 저의 가장 친한 친구 중 한 명이 된 톡기가 해커톤을 나가자고 했습니다. (톡기라고 쓴 이유는 그 친구가 자주 쓰는 닉네임이 r4bb1t이기도 하고, 자신의 블로그에 저를 카피바라, 쿼카, 웜뱃, 뉴트리아 등으로 지칭했기 때문입니다...) 톡기와는 예전에도 해커톤을 몇 번 나갔는데 항상 재미있었기 때문에 갈지 말지 갈등하다가 참가하기로 했습니다.

 

해커톤에 신청하다

(왼쪽)모집 공지 / (가운데)행사 합격 문자 / (오른쪽)단톡방 공지

  전국에서 워낙 많은 인원이 참가를 희망하는 해커톤이라, 참가 신청할 때 ‘신청서’를 작성해야 합니다. 항목이 4~5개 정도 있었던 거 같습니다. 제가 어떤 내용을 작성했는지는 기억이 나지 않지만, 글자수를 꽉꽉 채워서 정성껏 작성했습니다. 2월 1일에 선발 결과가 문자로 공지됐으며, 2월 6일에 해커톤 단체톡방으로 초대됐습니다. 저와 톡기는 3조에 배정됐으며, 바로 다른 팀원들에게 연락하여 3조 톡방을 팠습니다.

 

팀 구성

발표 자료에 넣은 팀 소개

  SPARCS 해커톤은 개인 또는 최대 두 명이서 신청 가능하고, 운영진 측에서 포지션을 고려해서 팀당 4명을 배정해줍니다. 저는 백엔드로 톡기는 '프론트엔드, 디자인, 백엔드(포지션도 정말 많다) '로 신청했습니다. 저희 팀에는 저희처럼 친구끼리 신청한 동경이와 하나가 매칭됐습니다. 둘 다 서울대 자유전공학부인데 동경이는 경영, 하나는 컴퓨터로 전공을 정한 점이 신기했습니다. 동경이는 기획, 하나는 프론트로 신청했습니다. 기획 1명, 프론트 2명, 백 1명. 그리고 다들 기획, 디자인, 다른 개발 분야 등 서브 포지션도 가지고 있습니다. 4명이 한 팀이 되어 참여하는 해커톤에 이보다 더 이상적인 팀 구성은 없을 것 같네요. 

 

다들 친구가 돼 버렸다

  팀 단톡방이 파져서 서로 자기소개를 했는데, 톡기가 동경이의 이메일에 '00'이 들어간 것을 보고 갑자기 다들 00년생이냐고 물어봤습니다. 이를 보고 하나가 말을 편하게 하자고 해서 얼떨결에 다들 말을 놓게 됐습니다. 뭔가 저는 해커톤에서 말을 놓는 게 익숙하지 않...지는 않구나. 암튼 굳이 말을 놓을 생각은 없었는데 말을 편하게 하게 됐습니다. 하지만, 덕분에 더 화기애애한 분위기에서 재미있게 할 수 있었고 돌이켜보면 아주 좋은 선택이었다고 생각합니다.

 

해커톤 전 기획 회의

(왼쪽)주제 및 미션 공지 / (오른쪽)전체일정

  2월 8일에는 주제와 상세 일정이 공지됐습니다. 테마는 '지역 사회 문제 해결하기' 였습니다. 데이터 분석 및 시각화 미션이 '대전광역시의 특징이나 문제점 발굴하기'여서 주제는 사실상 '대전의 지역 사회 문제 해결하기'였습니다. 그리고 2월 11일부터는 코딩을 시작할 수 있도록 GitHub의 ' SPARCS-Service-Hackathon-2024' Organization에 초대됐습니다. SPARCS측에서도 미리 아이디에이션이나 개발을 하라고 장려했는데, 해커톤이 14일 부터 시작인 걸 생각하면 준비 기간이 상당히 넉넉했습니다. 하지만, 저희 팀원들은 다들 바빴기 때문에 해커톤 전에 개발까지 할 여유는 전혀 없었고 주제라도 확정 짓는 것을 목표로 두 차례 회의했습니다. 첫 회의인 12일에는 '대전의 문제점'을 리스트업하고, 두 번째 회의 전까지 문제점을 투표하고, 두번째 회의인 13일에는문제점을 해결할 서비스를 도출하기로 했습니다.

 

1차 회의 전 카톡 일부

  첫 회의 전에 팀 단톡방에서 어떤 식으로 첫번째 회의를 준비하면 좋을지 얘기해봤는데, 모두가 적극적으로 자신이 생각하고 있는 것들을 공유해줬습니다. 다들 협업 경험이 많은 것을 알 수 있었고, 좋은 팀원들과 함께하게 됐다는 것을 느낄 수 있었습니다.

 

1차 회의

  첫 회의 때 재미있는 해프닝이 일어났습니다. 아침 11시가 회의 시작이었는데 톡기가 동방에서 자고 있더라고요. 그래서 제가 동방까지 가서 톡기를 깨우고 바로 회의를 시작했습니다 (진짜 저 같은 팀원 없습니다..!) 첫 회의는 2시간 정도 진행됐는데 회의 때도 다들 적극적으로 참여해줬고, 회의가 정말 스무스하게 필요한 것만 딱딱 이루어져서 너무 좋았습니다. 1차 회의를 통해 저희가 도출한 대전의 문제점은 다음과 같습니다.

  • 못난이 농산물
  • 고령화 문제
  • 동대전과 서대전 간의 교육 격차
  • 지역사회 소통 부재
  • 노잼 도시
  • 외국인 유학생들의 불편함

  이렇게 문제를 도출한 뒤 각자의 경험을 토대로 솔루션에 대해서도 얘기해봤습니다. 예를 들어서 '어떤 문제를 해결하기 위해 어떤 솔루션을 만든 창업팀을 봤었다', '내가 써 본 앱 중에 어떤 기능이 있었는데 이 문제를 해결하기 좋은 거 같다', '외국에는 이러이러하게 하는 서비스도 있다더라' 등. 그렇게 해서 나온 솔루션들 중 일부는 다음과 같습니다.

  • 시니어를 위해서 '자서전 제작'
  • 교육격차를 줄이기 위해 'AI 기반 문제 생성'
  • 외국인 유학생을 위한 '위치 기반 관광 가이드'
  • 시니어들을 위한 '한눈에 정책 확인'
  • 노잼 도시라는 오명을 없애고 관광을 활성화하기 위해 '동네 기반 퍼즐모으기'

 

고도화한 솔루션

  좋은 솔루션들이 너무 많이 나와서 회의 시간에 하나를 확정 짓기에는 무리가 있을 것 같았습니다. 그래서 각자 밤까지 마음에 드는 솔루션들을 고도화한 후, 고도화된 것들을 바탕으로 투표를 진행하기로 했습니다. 

 

솔루션 투표

  투표 결과는 위와 같습니다. 이번에도 하나의 솔루션으로 좁혀지지 않아서, '시니어 - 자서전 제작'과 '교사/교육자 - AI 문제 생성 중' 하나를 다음 날 있을 2차 회의 때 고르기로 했습니다. 저는 두 개의 솔루션 모두 마음에 들었는데 시니어 자서전 제작을 더 하고 싶었습니다. 왜냐하면, 제가 속한 창업팀 '다정'에서 가족들을 위한 포토북을 제작해줬는데, 포토북이 단순히 추억 남기기용이 아니라 가족 소통 활성화에도 큰 효과가 있는 것을 봤기 때문입니다.

  2차 회의를 하면서 'AI 문제 생성'은 LLM의 한계로 인해서 영어 공부에는 도움을 줄 수 있겠지만, 국어나 수학 문제를 생성하는 데는 한계가 있으며,  EBS에서 이미 '단추'라는 맞춤형 학습 콘텐츠 제공 서비스를 운영한다는 것을 알게 돼서 저희가 뭔가 할 여지가 많지 않다고 결론이 났습니다. 그래서 시니어를 위한 자서전 제작 서비스 '인생기록'을 개발하기로 확정됐습니다. 

  솔루션이 확정되니까 다들 해당 솔루션을 고도화시키기 위해 전념했는데, 너무 좋았습니다. 그리고 남은 시간 동안 솔루션을 구현하기 위한 기술 스택 선정 및 해커톤 전까지 각자 할 업무에 대해 논의했습니다. 저는 백엔드 세팅 및 streamlit 공부, 톡기는 프론트엔드 세팅, 하나는 streamlit 공부 및 데이터 분석 미션 준비, 동경이는 와이어프레임을 제작하기로 했습니다.

  그렇게 해커톤 전날 2차 회의를 마치고 각자 만반의 준비를 했습니다.

 

Day 1

대전으로 가는 길

오랜만에 방문한 서울역

  아침 일찍 서울역으로 갔습니다. 기차를 타러 서울역으로 방문한 건 반년 만이네요. 대전에서 점심을 해결하기에 시간이 좀 빠듯해서 서울역 던킨도너츠에서 빵을 포장해서 기차에서 먹었습니다. 빵의 도시 대전으로 가는데 던킨도너츠를 먹는 나란,,,

 

오랜만에 방문한 대전

  세종 살 때는 대전에 종종 방문했었는데, 서울 올라온 이후로는 처음 와본 것 같습니다. 마지막으로 방문한 게 2021년 10월이니까 벌써 2년이 훌쩍 넘었네요. 그렇지만 그렇게 크게 변화했다고 느끼지 못했습니다. 대전역에서 카이스트까지 버스 타고 갔는데 되게 오래 걸렸습니다. 외부에서 카이스트를 방문하는 게 막 엄청 쉽지는 않은 것 같습니다.

 

입장

처음 방문한 카이스트

  해커톤이 진행되는 대회장은 IT융합빌딩 N1 안에 있습니다. 후문에서 걸어서 3분 정도밖에 걸리지 않습니다. 카이스트 방문은 이번이 처음이었습니다. 카이스트하면 뭔가 건물이 낡았을 것 같다는 막연한 생각을 하고 있었는데, 전혀 그렇지 않았습니다. 개성을 가진 멋진 건물들이 많았고, 건물마다 간격도 되게 넓어서 여유가 있어 보였고 아무튼 좋았습니다. 카이스트 짱... 대회장도 넓어서 좋았고, 대회장 바로 옆에 무인 매점도 있어서 좋았습니다. 유일하게 아쉬웠던 점은 한 번 건물 밖으로 나가면 재입장하기 위해 운영진을 불러야 한다는 것이었습니다. 그런데 이건 카이스트가 국가 보안 '나'급 시설이라는 것을 듣고 바로 '오... 인정'하게 됐습니다.

 

넓고 쾌적한 해커톤 대회장

  저는 12시가 좀 넘었을 때 도착했는데 저보다 일찍 도착한 사람이 5명도 채 되지 않았습니다. 주변을 둘러보면서 시간을 보내니 이윽고 하나와 톡기가 왔습니다. 톡기는 대전에서 열리는 친구 생일 파티에 참석하러 전날 먼저 와 있었고, 함께 생일파티에 참석한 찬휘님이랑 같이 대회장에 왔습니다. 동경이는 너무 슬프게도 당일 코로나 확진 판정을 받았습니다. 그런데 해커톤 내내 저희와 물리적으로 같은 장소에만 없었을 뿐이지, 자신에게 주어진 일을 100% 이상해줘서 심리적으로는 바로 옆에 있다는 느낌을 받았습니다. 아플 텐데도 최선을 다해준, 동경이, 너무 감사하다... 이런 동경이를 동경할 수밖에 없는 저희들.

 

단체 사진

1시에 개회식이 시작됐고 2시부터 본격적으로 개발을 시작했습니다.

 

개발 시작

1일차 현장

  저희가 첫날 진행한 업무는 다음과 같습니다

  • 본인: 백엔드 프로젝트 세팅, 서버/DB/CI/CD 아키텍처 설계, CI/CD 파이프라인 구축 및 배포 준비
  • 톡기: 프론트엔드 세팅, 프론트엔드 개발 시작
  • 하나: streamlit으로 '데이터 분석 및 시각화 미션' 진행
  • 동경: 와이어프레임 완성, 기획 고도화 및 발표 준비

 

동경이가 만든 와이어프레임

  동경이는 아픈 와중에도 해커톤 전까지 인생기록의 기획 부분을 정리해서 저희에게 전달해줬습니다. 그리고 이걸 본 저희의 피드백을 토대로 첫날 와이어프레임을 완성했습니다. 와이어프레임을 보고 동경이가 얼마나 좋은 기획자인지 알 수 있었습니다. 개발 쪽과 UX/UI에 대한 이해가 부족하면 나올 수 없는 디자인이었기 때문입니다.

 

ERD와 CI/CD 파이프라인 다이어그램

  저는 가장 먼저 아키텍처들을 설계했습니다. 동경이가 만들어준 와이어프레임을 보고 ERD를 그렸고 어떤 식으로 서버를 만들지, CI/CD 파이프라인을 구현할지 등을 설계했습니다. 설계가 끝난 후 CI/CD 파이프라인 구축 작업을 시작했습니다. 현재 동아리에서 진행하는 프로젝트에서 사용할 자원들을 카카오 클라우드에서 후원해줬는데, 사용법을 더 익히기 위해서 이번 해커톤 때는 '카카오 클라우드'를 주로 사용하려고 했습니다. NCP, AWS, GCP 등 주요 클라우드 서비스들의 서비스들을 어느 정도 사용해봤기 때문에 카카오 클라우드도 쉽게 사용할 수 있을 것 같다고 생각했습니다. 그런데 쉽지 않았습니다. 큰 흐름은 비슷했는데 세부적으로 다른 부분들이 많았습니다. 동아리 프로젝트는 넉넉한 시간을 두고 진행해서 큰 어려움이 없었는데, 사용 경험이 많지 않다 보니까 해커톤에서 사용하기에는 조금 어려움이 있었던 거 같습니다. 특히 AWS의 RDS와 매우 유사한 카카오 클라우드의 서비스 'MySQL'을 외부에서 접속하려면 SSH 터널링을 꼭 해야 하는데, 코드도 수정해야 해서 이 부분이 복잡했네요.

  톡기는 프론트엔드 세팅을 하고 개발을 시작했습니다. 세상에서 제일 쓸데없는 게 톡기의 개발 걱정이라서 알아서 잘하겠거니 생각했습니다. 그리고 제가 FastAPI API 서버를 배포한 후, 어떻게 빠르게 도메인을 연결하고 https로 통신할 수 있게 할지 고민하고 있었는데, 톡기가 Cloudflare를 사용해서 아주 간단하게 도메인을 연결해줬습니다. 물론 실제로 출시하게 된다면 서버단에서 https로 연결해줘야겠지만, 해커톤이라는 특수 상황을 감안했을 때 이렇게 문제해결을 할 수 있다는 것이 신선했습니다.

  다음 날 정오까지 제출해야 하는 '데이터 분석 및 시각화 미션'은 streamlit이라는 파이선 프레임워크를 활용해서 저희가 정의한 대전의 지역 사회 문제에 대해 데이터 분석 후 시각화하는 미션입니다. 하나가 이 미션을 담당해줬습니다. 이를 위해 해커톤 전에 앨리스에 업로드된 streamlit 강의를 수강하고, 첫날에 열심히 시각화 자료를 준비했습니다.

 

호텔 도착, 논문 읽기를 통한 기획 고도화

(왼쪽)호텔뷰 / (오른쪽)논문 읽고 공유

  오후 4시에 저녁을 먹었습니다. 학식을 먹었는데 상당히 맛있었습니다. 날도 좋아서 외투 하나만 걸쳐도 춥지 않았고, 하늘이 예뻤던 게 기억에 남네요. 저녁 먹고 돌아와서 7시 30분까지 개발한 후 8시에 단체 버스를 타고 숙소로 이동했습니다. 숙소는 ‘롯데시티호텔 대전’이었는데 해커톤에서 이 정도의 숙소를 제공해준다…? SPARCS 클라스 미쳤습니다.

  제 룸메이트분은 성격이 좋은 분이셨는데 아쉽게도 대화는 많이 못했습니다. 왜냐하면, 톡기와 하나의 방에 가서 계속 개발과 서비스 고도화를 위해 회의를 했기 때문입니다. 일정표에 의하면 밤 8~10시는 네트워킹하는 시간인데, 지금 생각해보니까 네트워킹을 위한 무언가가 딱히 없었네요. 하지만 개발할 시간도 부족해서 없어서 좋았습니다.

  첫째 날 호텔에서는 기획을 더 탄탄히 하는 데 집중했습니다. 어떻게 하면 더 좋은 자서전을 만들어줄 수 있을지 인사이트를 얻기 위해서 톡기와 하나의 제안으로 자서전, 심리, 행복 등과 관련된 논문들을 찾아 읽었습니다. 흥미로운 논문들이 많았습니다. 이 중 가장 기억에 남는 건 ‘에릭 에릭슨’의 논문이네요. 에릭 에릭슨… 훌륭하신 분입니다. 성격 발달 이론의 권위자로 무려 나무위키에도 나와 있는 분이라구요. 

  저는 개발하면서 기술적 인사이트를 얻기 위해 논문을 종종 찾아봅니다. 그렇게 해서 화려한 기술들을 사용해서 성능이 좋은 애플리케이션들을 만들었습니다. 하지만, '좋은 서비스'에서 애플리케이션의 성능이 차지하는 비율을 아주 적다고 생각합니다. 진짜 중요한 것은 사용자 중심의 사고를 통해서 기획을 탄탄히 하는 것이라고 생각합니다. 기획 고도화를 위해 논문을 찾아 읽어본 것을 이번이 처음이었는데, 논문을 읽으면서 사용자의 니즈와 행동 패턴을 더 잘 이해할 수 있게 됐고, 다양한 관점들을 습득할 수 있었습니다. 위에서 언급했던 에릭 에릭슨의 논문들과 이론도 논문들을 타고타고 읽으면서 찾을 수 있었습니다. 그리고 이론적 근거도 확보를 통해 서비스를 개발하는 저희들에게는 잘하고 있다는 확신을, 발표를 듣는 심사위원들과 청중들에게 신뢰성 있는 정보들을 통해 높은 설득력을 제공해 줄 수 있었습니다. 그래서 앞으로도 서비스를 개발할 때는 주제와 관련된 논문을 꼭 읽을 것입니다.

  새벽 2시까지 논문도 읽고 서버 세팅도 틈틈이 하다가 새벽 3시에 방에 올라가서 잤습니다.

 

Day 2

아침

대전 최고

  아침 일찍 일어나서 신세계 백화점에 있는 '스타벅스 엑스포스카이점'에 갔습니다. 걸어서 금방 갈 수 있어서 좋았고, 엑스포 과학 공원을 가로질러서 갈 수 있어서 좋았습니다. 스타벅스 엑스포스카이점은 무려 건물 38층에 있는데 한때 국내에서 가장 높은 곳에 있었던 스타벅스입니다. 2년 전에도 왔었는데 대전의 풍경이 한눈에 보여서 너무 좋았던 기억이 납니다.

  그때는 하늘이 맑았는데, 이번에는 흐렸습니다. 그래도 좋았습니다. 커피를 마시면서 계속 서버 세팅을 했습니다. 서버 세팅이 더 늦어지면, 개발에도 차질이 생길 것 같아서, 제가 능숙하게 사용할 수 있는 NCP의 서비스들을 섞어서 세팅을 끝냈습니다.

 

성심당 최고!!

  10시에 하나와 성심당에 가서 아침 식사 및 대회장에서 간식으로 먹을 빵을 샀습니다. 항상 느끼는 건데 성심당은 정말 정말 최고입니다. 그리고 10시에 버스를 타고 대회장으로 이동했습니다. 톡기는 너무 피곤해서 호텔에서 좀 더 자다가 점심 이후에 왔습니다.

 

데이터 분석 및 시각화 미션 과제 제출

(왼쪽)시각화 미션 보고서 / (오른쪽)배포한 페이지

  12시까지 streamlit으로 만든 시각화 자료의 코드와 보고서, 그리고 1분짜리 발표 영상을 제출해야 했기 때문에 2시간 동안 하나와 동경이와 미션에 전념했습니다. 하나는 코드와 발표 영상을 만들어줬고, 동경이는 보고서를 만들어줬습니다. 하나가 streamlit으로 만든 페이지는 이곳에 배포됐습니다. 결과물에서 대전의 노인 자살률이 왜 문제인지 다양한 통계 자료와 시각화 방법을 이용해서 한눈에 볼 수 있습니다. 어떻게 이렇게 잘 만들었는지 대단하다고 느껴지네요.

 

점심

(왼쪽)점심 / (가운데)저녁 / (밤)하나가 사준 따봉흥민이형이 그려진 레모나

  성공적으로 시각화 자료 과제를 제출하고 점심을 먹으러 갔습니다. 점심은 오리연못 근처에서 먹었습니다. 원래는 오리연못 투어가 따로 계획돼 있었는데 비가 와서 투어는 취소됐습니다. 너무 아쉬웠어요. 그렇지만 점심 메뉴로 나온 특식이 정말 맛있어서 기분이 풀렸습니다. 카이스트 학생들은 학교도 거의 무료로 다니고 한다는데 역시 국가권력급 인재들,,, 먹고 하나와 산책하면서 복귀했습니다. 건물들도 다채롭게 간격도 널찍하니 산책하기 좋았습니다. 대회장으로 돌아오니 톡기가 기다리고 있었네요.

 

점심 먹고 새벽까지 개발

2일차 밤

  점심을 먹고 본격적으로 코딩을 시작했습니다. API들을 구현하면서 DB도 계속 조금씩 수정했습니다. 그리고 이번 개발의 핵심인 GPT를 연동하고 다른 팀원들이 프롬프트를 넣을 수 있도록 폴더 구조를 만들었습니다. 저는 작년 11월에 참가했던 쿠씨톤에서 GPT를 처음으로 개발에 활용했는데, 그때는 결과물이 너무 아쉬워서 어떻게든 있어 보이게 만드려고 GPT를 넣은 것에 그쳤습니다. 반면, 이번에는 GPT 활용이 인생기록의 알파이자 오메가였습니다.

  하나는 저의 세팅 위에 프롬프트를 작성했고, 프롬프트가 최고의 성능을 낼 수 있도록 코드 및 세팅도 수정했습니다. 질문 생성, 자서전 요약 등의 프롬프트를 작성했는데, 저희가 기대했던 성능보다 훨씬 더 잘 나왔습니다. 하나의 프롬프트는 세계 제일… 

AI 자서전 코디네이터 '보미'

  톡기는 계속 프론트엔드 개발을 했습니다. 그러면서 틈틈이 디자인 업무도 수행했습니다. 서비스의 UX/UI는 물론, 저희의 AI 자서전 코디네이터 '보미'의 디자인, 사용자의 행동에 따라 보미가 움직일 수 있도록 애니메이션 효과도 만들었습니다. 그리고 카카오 로그인은 톡기가 프론트하고 백 모두 구현했습니다. 프론트, 백, 디자인까지... 못 하는 게 없는 그저 갓현채.

 

 

(왼쪽)발표자료 / (오른쪽)인생기록을 통한 자살 예방 규모 추정

  동경이는 캔바(Canva)라는 서비스로 발표 자료를 만들었습니다. 캔바는 이번에 처음 써봤는데, 팀원들과 실시간으로 파워포인트를 수정하는 기분을 줄 수 있어서 협업할 때 사용하기 좋은 툴입니다. 발표 자료는 IR 자료에서도 많이 사용되는 PSST 포맷으로 만들어줬는데, 슬라이드 한장한장에서 동경이의 역량이 보였습니다. 그리고 다음 날 발표할 저를 위해서 대본도 만들어줬습니다. 동경이도 새벽까지 계속 작업을 해줬는데, 몸도 안 좋아 보였는데 이렇게까지 해주다니,,, 감동이었습니다.

 

운영진들을 만나다

  밤에 개발하다가 몸을 풀어주려고 이곳저곳 어슬렁어슬렁거렸습니다. 이때 어쩌다가 대회장 뒤편에서 이번 대회를 기획하고 진행하는 SPARCS 운영진분들과 이야기를 하게 됐습니다. 그런데 저를 아시는 분들이 계시더라고요. 저는... 알지 못해서 조금 죄송했습니다. 알고 보니까 운영진분들꼐서 해커톤 참가자를 선발하는 과정에서 모든 서류를 꼼꼼히 읽으셔서 대부분의 참가자들을 기억하신다고 하셨습니다. 그리고 11월에 열렸던 SKYST 컨퍼런스에서 저를 보셨다고 하셨는데,,, 다음에는 서로 반갑게 볼 수 있도록 명함도 교환하고 인스타 맞팔도 했습니다. 아마 몇 분은 3월에 열리는 SKYST 해커톤에서 또 뵙게 될 것 같은데 그때는 제가 먼저 인사드리려고 합니다.

 

숙소 복귀

  새벽 3시까지 열심히 각자의 업무를 수행하고 택시 타고 호텔로 복귀했습니다. 하지만 호텔로 돌아왔다고 해서 끝이 아니었습니다. 톡기와 하나는 계속 개발을, 저는 발표 준비를 했습니다.

 

발표 준비

대본 일부

  발표는 제가 하기로 했습니다. 저는 발표할 기회가 생기면 웬만하면 제가 하려고 합니다. 발표를 많이 할수록 실력이 늘더라고요. 이번 발표 준비는 다음과 같은 과정을 거쳐서 했습니다.

  1. 대본을 두세 번 읽으면서 핵심적인 부분을 볼드 처리한다. 수정할 부분이 있으면 수정한다.
  2. 두세 번 소리 내서 읽어본다.
  3. 두세 번 ppt를 한 장 한 장 넘기면서 대본을 읽는다
  4. 대본을 보지 않고 ppt를 넘기면서 나만의 언어로 발표하듯이 말한다. 이때 볼드처리한 핵심 부분이 기억나지 않으면 다시 대본을 본다.
  5. 4번을 계속 반복한다.

  대본을 외우는 것보다 전체적인 맥락을 파악하는 데 집중했습니다. 대본을 외우고 발표하면, 한 글자라도 잘못 말할 때 머리가 새하얘지더라고요. 그리고 대본에 '긍정 정서 반응', '자아 존중감 향상' 등의 제가 잘 사용하지 않는 용어들이 많아서 발표할 때 자연스럽게 말하지 못할 거라고 판단했습니다. 발표 준비를 하면서 대본이 정말 짜임새 있게 만들어졌고, 내용이 풍부하고, 청자들에게 전달하고자 하는 바를 명확하게 이해시킬 수 있게 만들어진 걸 보면서 계속 감탄했습니다. 발표를 준비하는 것만으로 많은 것을 배울 수 있었습니다. 한 가지 걱정된 점은 저희 서비스명인 '인생기록'을 계속 '인생네컷'과 헷갈려서 말했다는 것입니다. 이 걱정은 발표에서 현실이 되는데...

 

Day 3

막판 스퍼트

마지막까지 열심히 발표 준비, 코딩하는 우리 팀

  저는 새벽 5시쯤 자서 8시에 일어났습니다. 잠을 자야 발표 준비한 것도 뇌에서 장기 기억으로 처리되고, 안 자면 죽을 것 같았기 때문입니다. 바닥에서 자려고 했는데 하나가 침대를 양보해줬습니다. 그는 날개 없는 천사인가... 그런데 톡기하고 하나는 잠도 안 자고 계속 코딩했습니다. 미안한 마음이 들었습니다. 그 둘은 해커톤이 끝날 때까지 졸지도 않던데 체력이 부러웠습니다. 이게 젊음...? 일어나서 발표 준비를 마저 하고, 최종 결과물 제출 준비 및 코드 점검 및 서비스 QA를 했습니다. 

 

진심 100%인 우리 팀원들의 인생기록 사용 후기

  새벽에, 제가 자기 전에는 버그가 정말 많았는데 일어나니까 거의 다 해결이 됐습니다. 개발의 신 톡기와 하나. 인생기록을 테스트하고 QA하는 과정에서 정말 잘 만들어졌다고 느낀 게, 저희 모두가 시간 가는 줄 모르고 정말 즐겁게 사용했다는 것입니다. '보미'가 리액션과 공감, 추가 질문을 잘해줘서 마치 실제 상담사와 대화를 진행하는 것과 같은 경험을 했습니다. 대화를 하면서 '긍정 정서 반응', '자아 존중감 향상' 효과가 실제로 발생했으며, 완성된 자서전의 퀄리티도 매우 훌륭했습니다. 한시라도 빨리 발표해서 많은 사람들에게 인생기록을 소개해주고 싶다는 생각이 들었습니다.

 

인생기록 소개

인생기록의 주요 기능

  인생기록의 주요 기능은 크게 세 가지로 나눌 수 있습니다. ①대화 상담을 통한 자서전 내용 수집, ②수집한 답안을 사진과 함께 편집, ③실물 형태의 자서전 제작 및 배송. ①은 아주 훌륭하게 구현했습니다. 하지만, 물리적인 개발 시간이 부족하기도 하고 발표에서는 MVP를 시연하듯이 해야 하기 때문에 출시하게 된다면 더 많은 상담을 할 수 있도록 해야 합니다. 아, 그리고 저희가 녹음 및 TTS를 위해 사용한 Web Speech API가 PC 브라우저에서는 잘 작동하는데 모바일에서는 녹음이 중간에 끊기는 현상이 발생한다는 것도 한계점이네요. 나름 웹 표준 기술인데... 이 부분은 백에서 음성 파일을 생성해서 프론트로 보내는 식으로 개선할 수 있을 것 같습니다. ②에서 수집한 데이터를 자서전 형태의 글로 가공하는 부분도 아주 훌륭하게 구현됐지만, 사진과 함께 편집한다는 기능은 구현하지 못 했습니다. 기술적으로는 할 수 있지만, 어중간하게 놓느니 빼는 게 낫다고 판단했습니다. ③ 또한 톡기가 프론트에서 인쇄 기능을 넣어봤는데, 저희가 모바일에 최적화된 UX/UI로 개발했기 때문에 넣는 게 오히려 사용자 경험을 해칠 수 있다고 판단해서 뺏습니다. 실물 형태의 자서전 제작 및 배송은... 사용자가 원한다면 저희가 직접해드리면 될 것 같습니다. 하하

 

유저 플로우 다이어그램

  2박 3일간 위 유저 플로우 다이어그램에 나타난 것들을 모두 구현했으며, 작정하고 버그를 찾으려고 하는 게 아니라면, 전혀 문제없이 사용할 수 있을 정도로 완벽에 가깝게 구현됐습니다. 위 다이어그램에서 주목할 점은 '고정 질문'과 '꼬리 질문'입니다.

 

성격 발달 이론을 참고해 만든 고정질문들

  저희는 에릭 에릭슨의 성격 발달 이론을 참고해서 인간의 일생을 어린 시절, 청소년기, 청년기, 중장년기, 노년기로 나누고, 시기별로 대부분의 사람이 보편적으로 답변할 수 있는 질문 두 개씩을 고정 질문으로 정했습니다. 꼬리 질문은 사용자가 고정 질문에 답변한 것을 토대로 생성된 질문들입니다.

  고정 질문들을 리스트업할 때도 여러 논문을 참고했습니다. 이 부분은 하나가 해줬는데, 지금 봐도 감탄이 나올 정도로 질문들을 잘 만들어줬네요. 만약 출시하게 된다면 전문 심리상담사의 도움을 받아서 질문 개수를 늘리거나 질문들을 더욱 개선할 수 있을 것 같습니다. 

 

(왼쪽)Chapter Table / (오른쪽)Questions Table

  데이터베이스에는 위와 같이 인간의 일생이 chapter로, 고정 질문들이 question_id 1~12로 들어갔습니다.

 

테스트하면서 생성된 꼬리질문들

  사용자들의 답변을 토대로 맞춤형으로 만들어진 꼬리 질문들은 사용자들이 자신의 인생을 편하게 얘기할 수 있도록 좋은 경험을 제공해줍니다. 하나의 프롬프팅과 GPT-4 Turbo의 환상적인 콜라보레이션 결과입니다. 아, 그리고 이 부분은 시연 영상에서도 볼 수 있지만, 만약 답변하고 싶지 않거나 곤란한 질문들은 스킵할 수 있습니다.

 

인생기록을 통해 만들어진 하나의 자서전

  모든 질문들에 답변하고 나면 위와 같이 자서전이 만들어집니다. 자서전의 퀄리티도 매우 훌륭합니다. 개발을 마무리 짓기 바로 직전까지도, 저희가 이 서비스를 즐겁게 사용할 수 있을 거라고 전혀 상상도 못 했는데, 막상 사용해보니까 질문들에 몰입해서 답변하느라 10~20분은 가볍게 넘길 정도로 즐겁게 사용했습니다. 그래서 답변 하나하나가 정말로 긴데, 이 긴 답변들을 최대한 짧게 요약하려다 보니까 생략된 내용들도 있어서 조금 아쉬웠지만, 이 부분은 정리하고 다듬어주는 정도만 요청하면 되는 부분입니다.

 

배경 바꾸기

  모든 사람이 자신만의 유니크한 인생을 사는데, 자서전의 테마가 하나만 있다면 '나만의 자서전'이라고 말할 수 있을까요? 사용자가 자신의 취향대로 배경을 커스터마이징할 수 있도록 배경 테마들을 네 가지 넣었습니다. 나중에 출시한다면 사용자의 답변에 따라 정말로 유니크한 배경을 생성해주거나, 선택지를 많이 주는 것도 좋은 방법 같습니다.

 

  하나가 실제로 인생기록을 사용하면서 녹화한 영상입니다. 보기만 해도 재미있지 않나요? 만약 사용하신다면 새로운 경험을 할 수 있습니다. 발표 때 상영하려고 하나가 영상 편집도 열심히 했는데, 아쉽게도 이 시연 연상이 발표 때 사용되는 일은 없었습니다. 왜냐하면, 발표가 진행된 이스포츠 아레나의 기술적 문제로 인해 사전에 준비된 영상 말고 재생이 불가능한데, 저희가 마감 바로 직전에야 영상을 완성했기 때문입니다. 그렇지만 많은 팀들이 저희와 같은 이유로 시연 영상을 제출하지 못했으며, 발표 시간이 짧아서 시연하는데 시간을 쓰는 것보다 발표에 집중한 것이 결과적으로 더 좋았다고 생각합니다.

 

이스포츠 아레나로 이동

웅장한 이스포츠 아레나

  오후 12시 직전에 코드, 발표 자료, 시연 영상을 제출하고 짐을 싸서 이스포츠 아레나로 이동했습니다. 가는 길에 또 성심당에 들려서 식사로 먹을 빵을 샀습니다. 저는 가끔 이스포츠를 직관 갈 정도로 좋아해서 이런 곳에서 발표할 수 있다는 생각에 설렜습니다. 한편으로는 청중들이 저보다 물리적으로 훨씬 위에서 내려다보는 곳에서 발표하는 게 처음이라, 설레는 마음 이상으로 긴장도 많이 했습니다. 만인의 앞에서 싸워야 하는 검투사의 기분이 이럴까요. 이것보다 훨씬 더 큰 곳에서 경기하는 프로 선수들이 새삼 대단하게 느껴졌습니다.

 

발표

열심히 발표하는 나

  원래 저희 팀의 발표 순서가 다섯 번째였는데 하나의 지인이 개인 사정으로 인해 순서를 바꿔 달라고 해서 13번째로 발표했습니다. 너무 앞도 아니고 뒤도 아닌 중간에 발표해서 그나마 긴장을 덜할 수 있었던 것 같습니다. 발표는 나쁘지 않게 했다고 생각하지만, 아쉬운 점이 많았습니다. 말도 많이 더듬었고, 중간에  '인생기록'을 '인생네컷'이라고 말하지 않았나(이때 영상을 보면 녹화해 준 친구들의 웃음소리가 들립니다). 그래도 다행인 점은 제가 실수한 것에 대해 전혀 개의치 않고 발표를 끝냈다는 것입니다. 주어진 발표 시간인 7분도 너무 짧아서 아쉬웠습니다. 만약 시연 영상을 틀려고 했다면 더 제한된 내용만 말할 수 있었을 것 같습니다.

  잘한 부분은 발표 자료에 인생기록의 캡처 화면을 많이 넣지지 못해서 발표 중간중간 시연 때 와달라고 계속 언급한 것, 발표 마지막 즈음에 시연 영상을 다운 받을 수 있는 QR코드를 들어가달라고 부탁드린 것, 에릭 에릭슨을 언급한 것 등이 있습니다.

  그리고 느껴지실지 모르겠지만 발표 중간중간 신나하는 모습이 보였을 건데, 정말 저희 서비스를 사람들에게 알리고 싶었기 때문입니다. 발표가 끝나고 아쉬웠던 건, 발표를 못했기 때문이 아니라 저희 서비스의 대단함을 온전히 전달할 수 없었기 때문이라는 생각이 듭니다. 발표 영상은 아래 유튜브 영상을 참고해주세요.

 

 

데모

데모

  발표가 끝난 후 1시간의 데모 시간이 주어졌습니다. 정말 많은 분들이 시연하러 와주셨습니다. 위메이드의 인턴분들도 오시고 대전광역시 부시장님도 오시고. 나중에 부시장님께서 말씀해주셨는데, 발표 종료와 함께 수상팀들 심사도 끝나서, 저희 팀이 최우수상을 받는 것을 알고 시연하러 오셨다고 합니다. 시연하러 오신 모든 분들께 명함을 드렸는데, 이렇게 드린 명함으로 인해 만들어진 인연도 생겼습니다.

 

수상

최우수상 수상!

  네, 저희는 최우수상을 수상했습니다. 무려 장관급인 카이스트 총장님의 이름으로 발급된 '카이스트 총장상'입니다. 모든 팀원들이 자신이 맡은 일 이상을 해줘서 기획부터 개발까지 모든 게 매끄럽게 흘러갔고, 개발자인 저희조차도 즐겁게 사용할 수 있는 서비스를 만들었기 때문인 것 같습니다. 사진에 동경이가 나오지 못해서 아쉽네요.

  대상은 플로깅 서비스를 만든 팀이 받았습니다. 이 팀에도 KUCC 소속의 주찬휘님이 계셔서, 이번 대회에 참여한 모든 KUCC 부원들이 대상/최우수상을 탔게 됐네요. 찬휘님의 해커톤 후기가 궁금하다면 이 글을 참고해주세요!

 

신난 우리들

  해커톤이 종료되고 톡기, 하나, 저 세 명이서 판넬을 들고 사진을 100장 이상 찍었습니다. 이스포츠 아레나 안에서도 찍고, 밖에 나와서도 신세계 백화점을 배경으로 찍고... 이 판넬은 KUCC 동방에 전리품으로 가져와서 고이 보관하고 있습니다.

 

분석

저희가 최우수상을 탄 이유는 다음과 같다고 생각합니다.

  1. 짧은 시간 내에 하나의 서비스를 완성했다. 완성도도 매우 높다. 기획 단계에서 인터넷에 굴러다니는 아무 글이나 대충 참고하지 않고 주제와 관련된 논문들도 여러 개 읽으면서 서비스를 고도화시켰다. 개발 시간이 길지 않다는 것을 감안하면 코드도 깔끔하게 잘 작성했으며, GPT가 좋은 성능을 낼 수 있는 프롬프트를 작성했다.
  2. 서비스가 재미있다. 진짜 순수하게 재미있다. 서비스를 개발한 우리 팀원들이 모두 재미있게 사용했다는 것만으로 이 부분을 증명된다. 부시장님을 포함해서 데모 때 서비스를 체험한 사람들 모두 재미있게 즐긴 것을 확인했다. 규모가 있는 개발 프로젝트에서도 재미를 잡기는 힘든데, 해커톤 수준에서 진짜 재미있게 즐길 수 있는 서비스를 만든 건 내가 생각해도 대단한 것 같다.
  3. 발표 자료가 훌륭했고 발표가 나쁘지 않았다. 동경이가 최고의 발표 자료를 만들었다. 조금만 더 다듬으면 IR 때 써도 손색이 없을 정도의 피치덱과 그에 걸맞는 대본을 만들어줬다.

대상을 못 탄 이유는 굳이 분석하면 다음과 같습니다.

  1. 발표 때 서비스의 실제 화면들을 많이 보여주지 못했다. PSST에 맞게 발표 자료를 만들었고, Solution과 Scale Up 사이에 우리가 사용했던 기술에 대해서도 충분히 잘 설명했다. 그러나 준비한 시연 영상을 보여주지도 않았는데, 개발된 화면들도 발표 자료에 잘 담지 못했다. 발표 때 계속 '말씀드린 기능들이 모두 구현됐다'라고 계속 말은 했지만, 화면이 없었기 때문에 내가 심사위원이었으면 믿지 못했을 수도 있을 것 같다.
  2. 발표에 미흡한 점이 많았다. 인생기록을 인생네컷이라고 말한 건 코미디 그 자체다. 그리고 발표를 들을 때 거슬리는 습관들이 몇 개 나왔다. 예를 들어서 '근데..근데'와 같이 특정 단어들을 반복하는 것. 이런 버릇이 나를 프로페셔널하지 못한 발표자라고 느끼게 해줄 수 있을 것 같다. 그리고 나중에 친구한테 발표 영상을 보여주고 받은 피드백인데, 내가 너무 AI처럼 발표하는 모습에서 긴장을 많이 한 게 느껴졌다고 한다. 평소에 말하듯이 부드럽게 발표하는 것이 듣기 좋다고 한다. 듣고 보니까 맞는 말이다. 그래도 옛날보다는 발표 실력이 많이 나아졌지만, 아직도 갈 길이 멀다.

 

얻은 것

이번 해커톤으로 인해 정말 많은 것을 얻었다고 생각합니다. 얻은 것 일부를 나열하자면 아래와 같습니다.

  1. 좋은 친구들: 하나와 동경이라는 친구를 알게 됐다. 둘 다 정말 다정하고 자신이 맡은 일을 책임감 가지고 하는 좋은 친구들이다.
  2. 상장과 상금: 용돈으로 사용할 수 있는 소소한 상금을 벌었다. 그리고 'KAIST 총장상'. 몰랐는데 장관급 상이라고 한다. 태어나서 처음 받아 보는 장관급 상이다. 최근에 내가 좋은 개발자가 맞는가, 올바른 방향성으로 나아가고 있는가 하는 생각이 조금 들었는데 이번 대회에서 상을 받아서 자신감도 획득했다. 
  3. 서비스 개발 방법 터득: 기획부터 개발까지... 사실 어떤 프로젝트를 하든 이 과정을 모두 거쳤다. 그런데 이번에 이 과정들을 더 정교하게 거치는 방법을 알게 됐다. 예를 들어서 주제와 관련된 논문들을 읽으면서 아이디어를 더 고도화시키고, 관련된 인사이트들 얻기가 있을 수 있다. 그 외에도 주제를 정하기 위해 주제와 연관성이 있는 지인 인터뷰하기, 사용자 중심의 와이어프레임 그리기, 하나의 논문을 참고하면서 프롬프트를 만든  방법, 동경이가 만든 발표 자료와 대본을 통해 얻은 발표 방법, 도메인 우회, 빠른 카카오 로그인 구현, 보미에게 애니메이션 이펙트를 주는 등 다양한 시각적 효과를 준 톡기의 기술 등. 아, LLM이 핵심인 프로젝트도 처음 경험해봤다

 

끝나고

(왼쪽)인생네컷 / (오른쪽)그리울 성심당

  또 성심당에 갔습니다. 하나는 대전 방문이 처음이라서 본점으로 갔습니다. 성심당 바로 앞에 있는 '진짜 인생네컷'에서 사진도 한 장 찍었습니다. 사진을 잘 보면 화상 전화로 동경이도 나온 것을 볼 수 있습니다. 기차에 타자마자 너무 피곤해서 바로 잠들었습니다.

 

마치며

추억

  2월 18일에 나갔던 해커톤인데 4월 11일에서야 글을 완결 짓고 공개하네요. 3월 말에 나갔던 SKYST 해커톤은 거의 바로 작성했는데... 사실 이 글도 2월 말에 80퍼센트 정도 작성했는데, 너무 많은 것을 경험하고 배워서 정리하고 글로 완성하는 데 오래 걸렸습니다. 

  지금까지 셀 수 없을 만큼 많은 개발 프로젝트를 했었고 프로덕트들을 만들어봤는데, 진짜 정말로 제가 개발한 것을 제가 즐겁게 시간 가는 줄 모르고 사용했던 건 이번이 처음입니다. 저는 서비스 개발이 즐겁고 행복하고 코딩도 그렇습니다. 그렇지만 개발한 것을 통해서도 즐거움을 얻을 수 있다는 것을 알게 돼서 좋습니다. 상 받은 것도 너무 행복하지만, 상은 덤으로 느껴질 정도로요.

  해커톤은 참 재미있고 좋은 기회인 것 같습니다. 제가 제일 좋아하는 만화 중 하나가 '고스트 바둑왕'입니다. 만화 초반에 주인공이 바둑 동아리를 하면서 바둑 대회에 나가기 위해 열심히 연습하고, 대회에 나가서 고군분투하는 모습이 나옵니다. 보면서 주인공의 열정이 느껴졌고 저도 저렇게 되고 싶다고 생각을 했었습니다. '하이큐'나 '슬램덩크' 같은 스포츠 만화에서는 전국 대회에 나가기 위해서 실패와 좌절 속에서도 포기하지 않고 도전하는 등장인물들의 모습이 나옵니다. 개발자에게 해커톤은 '바둑 대회', '전국 대회' 같다고 생각합니다. 즐겁고 행복하고 치열하게 보낸 2박 3일 동안 많은 것을 얻고 갑니다.

  저에게 해커톤을 나가자고 먼저 제안해주고 설득해 준 톡기, 정말 좋은 팀워크를 보여줬던 훌륭한 개발자 하나, 기획자 동경이, 그리고 이렇게 좋은 해커톤을 준비하고 진행하느라 고생했던 승빈님을 포함한 SPARCS 기획팀에 감사합니다.

반응형

'회고 > 개발' 카테고리의 다른 글

[해커톤] SKYST 해커톤 참가 후기  (10) 2024.03.29
[해커톤] 제1회 SKYCC 해커톤 회고  (0) 2023.06.14