개발이야기

우승은 못해도 즐거웠던 JUNCTION ASIA 2022 참여 후기

paperboxturtle 2022. 9. 23. 23:34

8월 19일부터 21일, 3일간 부산광역시에서는 JUNCTION ASIA 2022라는 해커톤 행사가 열렸습니다. 지금까지 워낙 어중간한 실력으로 무언가를 만들어왔어서, 솔직히 300인 안에 들까 많은 걱정을 했었는데 팀원 분들을 잘 만난 덕분인지 무사히 기회를 얻어 이렇게 대회에 다녀오게 되었네요. 회고를 겸하여, 3일간 부산에서 겪었던 일들을 차근차근 적어보고자 합니다.

더보기

JUNCTION, 그리고 JUNCTION ASIA는

JUNCTION은 유럽 핀란드에서 개최되는, 올해로 7년이 넘는 기간동안 매해 개최되어 온 세계적인 해커톤 행사입니다. 전 세계 여러 도시에서 JUNCTION의 라이선스를 받아 JunctionX 등 다양한 이름으로 행사를 개최하고 있으며, JunctionX가 아닌 Asia 행사는 이번이 1회차입니다. 한국에서는 지난 2019년부터 매해 SHIFT라는 단체에서 라이선스를 받아 JunctionX Seoul 행사를 개최해왔으며 이번 행사에서는 규모를 확대하고 부산광역시와 MOU를 맺어 BEXCO 제2전시장 4F홀에서 2022년 8월 19일부터 21일까지 300인의 기획자, 개발자, 디자이너와 100명 내외의 봉사자와 운영진, 트랙 파트너가 참여하였습니다.

참가 결심 그리고 팀원 모집

이번 JUNCTION ASIA가 개최될 때까지, 저는 JUNCTION이라는 해커톤 행사가 있다는 사실도 모르고 있었습니다. 국내에서는 이미 SHIFT가 JunctionX Seoul을 2019년부터 2021년까지 3회 개최하였음에도 불구하고, 아무래도 과학기술원(KAIST, GIST, DGIST, UNIST 등)의 지원으로 이뤄진 행사여서 그런지 홍보가 국립대 중심으로 이루어졌고, 학교에서도 한 번도 홍보한 적이 없어 개인적으로 찾아볼 수 있는 데에는 한계가 있었던 측면도 있었겠지요. 어쨌거나 오랜만에 해커톤에 가보고 싶은 참이었던지라 갈 수 있다면 우승하지 않더라도 최대한 많은 것을 얻을 수 있는 행사로 가고 싶었고, 급히 지난 행사가 어떻게 열렸는지 알아보면서도 주변에 팀을 구하는 분이 없는지 찾아보았습니다.
물론 개인으로 나갈 수도 있었겠지만, 아무래도 제가 개인으로 나가기에는 경쟁력이 부족하다고 생각했습니다. 그리고 이전 대회를 보니 현직 개발자 분들도 많이 참여하셔서 팀 빌딩을 통해 참여한다고 해도 우승을 목표로 하는 사람과 정션을 경험삼아 나가려고 한 사람 사이의 목표 의식에 간극이 있을 거라는 예상이 너무 쉽게 되더군요. 그래서 정션에 처음 나가고, 우승이 목표는 아닌 팀과 같이 나가고 싶었습니다. 최선을 다하겠지만, 적어도 우승을 목표로 하는 팀에서 걸림돌이 되고 싶지는 않아서요.
그렇게 JUNCTION 행사를 알게 해준 분들 사이에서 팀원을 구하시던 분을 발견하여 같은 팀으로 함께할 수 있는지 여쭤보고, 조금 더 팀원을 모아서 4인 구성으로 지원서를 넣게 되었습니다. 이때 당시 구성은 기획자, 백엔드 개발자 각각 1명, 프론트엔드 개발자 2명이라는 구성이었는데, 아무래도 디자이너가 없다보니 지원서 제출 마지막 날까지도 어떻게 하면 디자이너를 구할 수 있을지 고민을 많이 했었던 기억이 나네요. 다행히 심사 통과 후에도 팀 빌딩 시간이 있다고 해서 그래도 이때까지는 그렇게 걱정하지 않았던 것 같습니다.
이때 지원서는 영문하고 한글 모두 사용 가능하였는데, 아무래도 공식 언어가 영어인데다가 이미 지원서를 제출한 다음에야 한글로 쓸 수 있다는 이메일을 발견해서 저는 조금 수고롭게도 한국어로 먼저 문장을 쓴 다음 영어로 번역하는 절차를 밟았습니다. 그래도 나름 정성들여서 한 질문당 10줄은 쓴 것 같은데, 길이는 중요하지 않겠지만 성의는 보였다고 믿고 싶네요. 참고로, 개인으로 접수하면 개인으로 평가받지만, 팀으로 접수하면 팀으로 평가받습니다.

8월 19일, 부산에 갑니다.

트위터에서 즐기는 종이상자

“8월 19일, 부산 갑니다! #JUNCTIONASIA2022”

twitter.com

팀원 누구도 예상하지 못했던, 300명의 참가자 발표 당일 날아온 합격 소식에 순간 얼떨떨하면서도 환호성을 질렀습니다. 이메일이 대략 9시 23분 전후로 왔는데, 실제 알림 발송 등이 늦어져서 저의 경우 9시 26분에 확인했었네요. 굵은 글씨로 강조된 participant라는 한 단어에 속으로는 어? 어! 어!!!! 진짜???????! 하면서 단체 톡방에 다급히 올렸던 기억이 납니다.
이렇게 합격한 이후, 서로 조금 더 친해지기 위해 디스코드를 통해 매주 수요일마다 회의 겸 아이스 브레이킹 시간을 가졌습니다. 팀명 정하기부터 교통편에 대한 이야기, 디자이너는 어떻게 섭외할지 등 다양한 고민을 했었어요. 그 과정에서 개인으로 참여하신 분들의 엄청난 스펙에 주늑들기도 하고, 좀처럼 성사되지 않는 섭외에 조바심을 느끼기도 했지만, 전날 디자이너 분을 구해서 결과적으로는 5인 구성으로 참여하게 됩니다. 그런데⋯.

피해갈 수 없었던 코로나19

지난 2년간 한 번도 걸린 적이 없었던 코로나, 그러나 정션 준비 과정 중 연달아 가족들이 코로나19에 감염되면서 오랜 기간 수동 감시 상태로 지냈고, 정션 전날에도 7일차 검사가 예정되어 있었습니다. 그나마 7일차가 되는 날에도 증상은 커녕 신속항원키트는 반응을 보이지 않았고, 그래서 아슬아슬했지만 정션에 참가할 수 있게 되었습니다. 문제는, 예기치 못하게 일어났습니다.
전날까지 괜찮으셨던 백엔드 분야 참가자 분이 당일 아침 코로나19 증상으로 인해 참가하지 못한 것입니다. 격리 해제를 앞두고 있는 상황이라면 그래도 병세가 많이 호전되어 온라인으로라도 참여하기가 수월하였겠으나, 아무래도 가장 증세가 심한 시점이다보니 이런저런 부탁을 드리기 어려웠던 측면이 있었던 것 같습니다. 다만, 당시 감염되지 않았던 사람들도 순차적으로 감염되다보니 그저 순서가 왔을 뿐이지 누구의 탓은 아닐 것입니다. 저도 감염은 되지 않았지만 휴학생이고 이래저래 바깥과 집 안을 모두 포함해도 활동이 적다보니 피해갈 수 있었던 것에 가까우니까요. 오히려 제대로 참여하지 못한 점에 대해 죄송해하셔서 마음이 안 좋았던 기억이 남습니다.

첫째 날, 누가 더 아이디어를 빨리 정하나

최대한 글씨가 보이게 찍으려니 하늘 쪽이 허옇게 처리되어 버렸다. 부산역 B.Startup Station과 D.CAMP Startup Lounge 간판 사진.

정션에 등록하고 나면 시간이 별로 없을 것이라는 걸 알고 있었기에, 이날 부산은 아침 일찍 도착했습니다. 그래서 정션 운영진 측에서는 부산역에 일찍 도착한 사람들을 위해 D.CAMP Startup Lounge를 대기 장소로 이용할 수 있다는 배려를 해주었지만, 그 공지가 올라오기 전에 이미 부산역을 벗어난 시점이어서 별로 도움이 되지는 않았습니다. 그래도, 정션 등록 전까지 무료로 머물 곳을 제공해주었다는 점에서 나름의 배려가 돋보였습니다.
디스코드를 통해 미리 온라인으로 목소리를 듣거나 하기는 했지만, 얼굴을 보고 이야기한 것은 아니었기 때문에 이날 팀원끼리는 벡스코에 도착하기 전 아이스 브레이킹[각주:1]할 시간을 최소화하기 위해, 먼저 이른 저녁을 먹고 시작하기로 했습니다. 등록이 오후 6시 30분 전후로 이뤄지는 만큼, 세레모니 직후 저녁 시간을 주면 좋았겠지만 별도로 주어진 시간은 없어서 저녁을 먹을 것이라면 이참에 미리 만나 서로 간의 어색함을 풀고자 함이었는데, 실제로 바로 아이디어 회의에 돌입할 수 있어서 효과가 좋았던 것 같습니다.

JUNCTION ASIA 2022가 개최되었던 벡스코 제2전시장 사진. 정션에서 걸어둔 현수막이 보입니다. HACK YOUR POTENTIAL이라는 슬로건은 지금 생각해봐도 누가 지었을까 싶을 정도로 잘 지었다고 생각하는 부분 중 하나에요.

그러나 생각보다 저녁을 빨리 마치기도 했고, 입장 시간에 딱 맞춰 가면 사람이 너무 많아 미리 이것저것 준비하는데 많은 시간이 소요될 것으로 예상되어 조금 일찍 도착하였는데 아무래도 제2전시장이라서 그런지 식당이나 카페 등 편의시설은 제1전시장 위주로 구성되어 있어 잠시 머물 장소가 부족했습니다. 제2전시장에 있던 작은 카페의 경우 입장 시간이 거의 다 되었을 때는 영업 마감 시간이어서 머물 수도 없었고, 따라서 어쩔 수 없이 다른 전시장 앞 의자에 앉아서 입장 여부를 예의주시하다가 이동했습니다. 덕분에 좀 기다리기는 했지만 숨을 돌릴 시간은 있었습니다.
개인적으로 제2전시장 맨 끝이라는 위치가 정말 아쉬웠는데, 식사용으로 제공된 식권을 이용하기 위해서도 제1전시장 지하로 이동해야 해서 시간이 생각보다 걸렸기 때문입니다. 이때문에 막바지 작업이 한창이던 일요일 아침 식권은 아예 사용하지 못했습니다. 그 밖에도 일부 식당의 가격이 식권 표시 가격보다 대부분 비싸 거의 무조건 추가 요금을 내야 하는 부분도 아쉽기는 했는데, 다음 정션 아시아도 한국에서 열린다면 그 점은 개선되지 않을까 기대해봅니다.

입장 직후 정션 아시아 행사장. 어두운 분위기와 대조되는 밝은 조명으로 집중하기에 좋은 환경인 것 같았습니다.

처음 입장했을 때, 코딩이 이뤄지는 장소 뒷편으로 푹 쉴 수 있는 공간이 있어 독특하다고 느꼈습니다. 호텔이 지근거리에 제공되고 있음에도 불구하고 이용할 수 없을 정도로 바쁜 팀을 위한 것만 같더군요. 이래저래 통일된 모습으로 잘 준비가 되어있다고 생각했지만 아쉬운 점도 있었습니다. 멀티탭이 3구용이어서 팀원 전원이 이용하기에는 부족했다는 점과, 행사에서 제공된 무선랜의 속도가 느려 거의 이튿날 정오까지는 핫스팟을 썼어야 했다는 점입니다. 그 뒤에는 물론 무선랜도 교체가 되었고 멀티탭도 대략 6구 정도로 바뀌어 이용에 불편함이 없었지만, 이 또한 다음 행사에서는 개선되기를 기대하봅니다. 아무리 JunctionX Seoul을 개최했던 팀이라고 해도, Asia 행사는 이번이 1회차니까요.
트랙 파트너의 트랙 소개와 각종 인사 등이 이어지는 공간은 행사장 특유의 구조로 인해 어쩔 수 없이 소리가 울릴 수 밖에 없었는데, 실시간 스트리밍을 보면서 보완하려 했지만 무선랜 속도로 인해 쉽지 않아서 특히 첫째날 크게 아쉬웠던 것 같습니다. 다행인 점은 정션 웹사이트에서도 트랙의 상세한 내용을 제공하고 있었고, 특히 저희가 선택했던 MS 트랙의 경우 공식 디스코드 채널에서 잘 설명해주셔서 내용을 이해하는 데에는 문제가 없었습니다.
트랙은 총 세 가지가 있었는데요, NAVER Z에서 운영하는 메타버스 플랫폼 ZEP에서 활용할 수 있는 도구 제작, AWS GameTech에서 AWS 서비스를 활용하여 게임을 개발 및 개선점 제시, 그리고 Microsoft에서 Teams를 활용한 - 시민 개발자가 활용할 수 있는 - 협업 도구 보조 프로젝트 개발, Chainapsis의 블록체인 프로젝트 개발이 있었습니다. 아무래도 팀원 대다수가 게임 개발이나 메타버스에는 큰 관심이 없었고 구현에도 어려움이 있을 것으로 예상되는데다가, 블록체인은 일단 개념 이해부터가 생소한 측면이 있어서 처음부터 MS 트랙으로 결정했었습니다. 실제로 프로젝트를 진행하던 중 ZEP 등으로 구현하다 포기하고 Microsoft로 전환한 팀이 많아, 나중에는 경쟁률이 상당한 수준이었던 것으로 기억합니다.
아쉬운 점이 있다면 트랙 결정까지는 신속하게 이루어졌는데, 아이디어 결정이 순탄치 않았습니다. 7개가 넘는 아이디어가 쏟아져 나왔지만 결정에 아주 오랜 시간이 필요했고, 특히 나중에 프레젠테이션을 할 때면 어떻게 설득할 것인가를 가지고 기획 겸 팀장이셨던 분이 많은 고민을 나누곤 했습니다. 같이 논문도 찾아보고, 각종 통계도 찾는 등 기획 측면에 있어서는 정말 팀원 모두가 최선을 다하지 않았나 싶어요. 나중에 Microsoft의 유저스틴(Justin Yoo)님께 아이디어와 관련 좋은 평가를 듣긴 했지만 이를 논외로 보더라도 지금 와서 아이디어 뭐로 고를래? 하고 묻는다면 주저않고 그 아이디어 중엔 이걸로 하겠다 했을 겁니다. 물론, 이렇게 많은 아이디어를 내는 과정에서 선택하지는 않았지만 나중에 개인적으로 구현해보고 싶은 아이디어도 생겼고요.
저희는 복지기관과 연계한 무언가를 고민하였고, 요양원에서 보호자 분들께 정기적으로 혹은 비정기적으로 현재 어떤 상태인지 전화로 알려주기도 한다는 점에서 착안해 보고서를 손쉽게 생성하고 전송하는 프로젝트를 기획했습니다. 복지사 분의 전화로 인한 감정 노동에 대한 부담을 줄여줄 뿐 아니라, 서류로 남기 때문에 보호자 분들도 이전에 어떤 내용을 주고받았는지 손쉽게 확인이 가능하고, 노인복지시설을 넘어서 해당 기능을 이용해 유치원, 어린이집 등 보육 시설에서도 유용하게 활용할 수 있을 것이라 생각했습니다. 다만 이것을 결정하고 기획 서류를 준비하는 과정에서 6시간 이상 소요되는 바람에 다른 팀이 이미 구현에 돌입했거나, 잠을 비축하는 중에도 시간적으로 부족했다는 아쉬움은 남습니다. 처음에 나온 기획인 만큼 다른 아이디어를 많이 내기보다 처음부터 고도화에 들어갔다면 실제 프로젝트 '구현'에 대한 기획도 많이 이야기를 나눌 수 있을 것 같았거든요.

둘째날, 개발과 혼란과 한계점

둘째날 유일하게 촬영한 사진인 낙곱새. 식권을 사용할 수 있었던 개미집 벡스코점에서 팀원들과 함께 저녁으로 먹었다. 안 먹었으면 후회했을지도?!

기획을 마치고 잠시 호텔에서 휴식한 뒤 복귀하여 개발을 시작하였는데, 처음에는 팀즈 챗봇 형식으로 제작하여 시민 전문가가 추가만 하면 쉽게 사용할 수 있는 방향으로 가닥이 잡혔다가 이후 디자이너 분이 활약할 수 있는 부분이 너무 한정적이어서 PowerApps를 이용한 데모 개발에 중점을 많이 두기로 방향이 바뀌었습니다. 그때는 마지막 날 제출하고서야 생각난 부분이지만 지금와서 돌이켜보면 어차피 Microsoft가 원하는 부분은 시민 개발자도 할 수 있는 개발이 아닌 전문 개발자로서 구현하는 부분이라고 말씀하셨었는데 PowerApps를 디자인하고 데모 구현에 집중하는 대신 백엔드 및 보고서 생성 부분에 집중했어야 했던 것은 아닌지 아쉬움이 남습니다.

당시 최종 제출안과 동떨어진 초기 미완성 구현본. 같은 조직 안에 위치한 저장소지만 심사의 혼란을 최소화하기 위해 공개는 하지 못했다.

그리고 이때 챗봇의 UI까지는 거의 구성이 완료되어 있었고 일부 기능 구현에 들어가려던 차에 방향을 바꿨던 터라, 약간의 혼선이 있었습니다. 일단 PowerApps를 쓰는 방향으로 전환하기 직전에는 서로 같은 PowerApps 데모를 별도의 샘플 데이터로 제작하고 있는 문제가 있었고, 완전히 분야를 분리한 뒤에도 문제가 있었습니다. 챗봇을 개발할 때까지만 해도 일단은 프론트엔드 겸 백엔드 역할을 맡고 있었는데, 전환하면서 아예 경험이 없었던 백엔드 개발을 전적으로 덜컥 맡았던 겁니다. 당연히 준비가 거의 되어있지 않았습니다. 거기다 Microsoft의 방대한 문서에 혼란이 와 어느 것이 제가 개발하는 것에 맞는지 찾기 어려운 부분이 있었고, 처음엔 개발자 애플리케이션 등록조차 수월하지 못했습니다. 그래도 같은 개발자 계정 안에서 개발했으면 조금 더 통합이 수월했을텐데 따로 생성하고 따로 개발하여 아마 실제 완성하였더라도 테스트가 원활하지 않았을 겁니다.
이때 부재할 수밖에 없었던 팀원이 간절해지기도 하면서, 한편 프론트엔드 개발을 외치면서도 항상 부족했던 저의 모습에 이렇게 폐 끼치는 행동은 하지 않도록 다음에는 철저히 준비하며 노력해야겠다는 생각이 많이 들었던 것 같습니다. 이때의 저는 결국 어찌어찌 개발에 필요한 API 토큰을 얻어내는 데에는 성공했지만, 해당 방식으로 구현하려면 PowerApps가 아닌 별도의 프론트엔드 프로젝트가 하나 필요하거나 당시 Linux로 개발하던 프로젝트를 잠시 멈추고 Windows로 다시 부팅하여 해당 부분을 수정하는 등의 작업을 수행했어야 다음 단계로 넘어갈 수 있었는데 그러지 못하고, 눈에 보이는 부분만 디자이너 분이 제공해주신 것을 겨우 템플릿 수준으로 완성하여 테스트도 못하고 끝냈습니다. 심지어 소통도 부족했던 것이 PowerApps로 구현할 때 PowerBI를 사용한다는 내용을 제대로 전해듣지 못한 탓에 별도의 라이브러리를 알아보는 등 시간적으로도 상당한 낭비가 있었기도 했습니다.
그나마 다행인 것은 한 번도 쓰지 않은 Node.js 템플릿이 적용된 Azure Function 상에서 코드를 구현하여 해당 API에 요청하면 데이터를 반환하는 것 자체는 큰 무리 없이 성공할 수 있었습니다. 문제는 같이 묶어 보낼 데이터를 해당 API의 스펙으로 인해 토큰을 제대로 쓰지 못해 받아오질 못해서 쓸모가 없었던거죠.
한편 PowerApps 데모 앱을 맡아주셨던 또다른 프론트엔드 개발자 분께서는 컴포넌트가 예상대로 구현되지 않거나 오역으로 인해 내용을 이해하는데 불편함이 있는 등 여러가지 고난을 꺾고 마감 직전 샘플 데이터와 전체적인 틀은 완성하시는데 성공하셨습니다. 처음에 생소한 플랫폼이기도 하고 반응형도 제대로 구현이 되지 않아 걱정이 많았는데 제가 남을 걱정할 때가 아니었던 겁니다.
그리고 이 둘째날은 트랙 멘토링과 각 후원 부스의 행사가 가장 활발하게 이뤄지던 때이기도 했는데요, 정션이라는 행사의 꽃이라고 불리는 이런 이벤트를 단 하나도 참가하지 못해 해커톤으로는 즐거웠지만 다음에도 정션에 참가한다면 반드시 모두 누리고 가겠다는 투지가 불타올랐습니다. 하지만 다음에도 또 저를 뽑아줄까요?
트랙 멘토링의 경우에는 딱 한 번 팀 단위로 가서 받았는데, 더 자주, 더 많이 받았으면 어땠을까 하는 아쉬움이 있습니다. 그러면 적어도 방향성 측면에서 엇나가는 것은 조언을 해주었을지도 모르겠다 싶었고, 새벽에 헤맸던 부분도 조금 일찍 알아차렸다면 제때 확인하여 구현했을지도 모를 아쉬움이 아직도 기억에 남습니다.

셋째 날, 기대는 없었지만 나름대로 잘 된 마무리

둘째날과 셋째날 사이에는 시간이 없어서 잠을 감히 청하지는 못하고 잠시 씻으러 호텔에 다녀오는 정도였습니다. 그러나 완성을 못한 고로 우승을 기대할 수는 없었고, 각 트랙의 심사 때 시간 제한으로 우리의 노력을 온전히 전하지는 못했던 점은 여전히 아쉽습니다. 그래도 끝까지 여쭤보시고 관심 가져주셨던 Microsoft Korea의 유저스틴님(Justin Yoo)님께는 가장 많은 수고를 했던 우리 팀원분들 다음으로 특별히 감사를 전하고 싶습니다.
아차상을 포함해서 어느 상도 못 받았지만 즐거운 시간이었고, 특히 대학도, 배경도, 사는 곳, 나이도, 학력도, 경력도 달랐던 5명이 모여 해커톤을 준비하고 출전하는 과정 자체가 좋은 경험이었습니다. 이전에 참여했던 아이디어 해커톤 때와 달리 5명 모두 많은 면이 달랐지만 추첨에 의한 것이 아닌, 서로가 서로에게 연락해서 팀을 꾸리고 친해지는 과정이 해커톤 안에 포함되었다는 것 자체가 신선한 충격이었다고도 표현할 수 있을 것 같습니다.

처음 받았을 때, 이름이랑 팀명을 직접 적을 수 있게 되어 있어 나름대로 담백하게 적어두었다. 아래 각자의 역할을 표시하는 부분은 Mozilla 재단에서 무언가를 강조할 때 보여주는 표시를 참조했다. 누가 뭐래도 Firefox의 팬이니까! 아쉽게도 팀간 교류가 없어서인지 알아보는 분은 없더라. 위 사진은 부산역에 들어가기 직전 남긴 인증샷.

마지막으로 에그드롭 샌드위치를 제공받아 식사하며 길을 옮겼고, 모두 헤어진 뒤 부산역 옆 신창국밥에서 돼지국밥으로 저녁을 해결한 뒤 KTX를 타고 집으로 돌아왔습니다. 부산역에서 저는 조금 늦은 열차를 탔지만, 마지막에 탈 때까지 부산역에서 열치를 같이 기다리던 다른 정션 참가자 분들 덕분에 끝까지 여운이 가시지 않는 대회였습니다. 실은 아직도 웰컴 키트를 제대로 뜯어보진 않았는데, 이제 이 글도 작성했으니 추억도 기념할 겸 개봉할 때가 온 것 같네요.

  1. 처음 만나는 사이에서 서로 친해지기 위해 하는 활동 [본문으로]