[CMC] CMC + UMC 합동 해커톤
그저께부터 어제까지인 05.17~18 동안 해커톤을 진행했다. 이 글도 해커톤이 끝난 뒤에 쓰려고 했지만 집에 와서 폭면해버려서 하루 지나서야 쓴다.
아래는 해커톤 시상식 전에 카톡으로 전달받은 해커톤 수료증과 배지다.
입장
1시 반까지 공덕 프론트원 건물의 해커톤 장소로 들어가야 했다.
흡연자라 근처에 담배 필 곳이 있나 걱정했는데 공덕역 4번 출구 나오자마자 오른쪽에 흡연구역이 있어서 아주 기뻤다. 건물 나와서 2분 거리인 것도 아주 좋았다. 스타벅스도 건물 바로 옆에 있어서 텀블러로 쓸 컵을 얻기 위해 커피를 하나 사서 들어갔다.
입장할 땐 사전에 공지방으로 전달받은 QR 코드를 입구에서 스캔해야 문이 열리는 구조였다. 5층으로 이동한 후 빠르게 정수기와 쓰레기통, 화장실 위치를 스캔한 후 무엇보다 중요한 작업 해커톤이 열리는 홀로 들어갔다.
큰 홀에 입장하니 운영진이 목에 걸 수 있는 명찰을 줬고 사실 사진찍을 때 말곤 이걸 한 번도 목에 건 적이 없다 옆으로 간식들과 탄산음료들이 주루룩 있었다. 몇 년 만에 보는 ABC 초콜릿도 있어서 반가웠다. 탄산을 못 마시는 체질이라 간식거리만 몇 개 파밍해서 자리를 찾았다.
해커톤 장소는 제법 컸다. 구글에 cmc 해커톤을 검색하면 15기 해커톤 장소라고 찍어둔 사진이 있는데 그 곳과 동일한 장소다. 단상이 있으면서 빔프로젝터용 스크린이 큼직하게 있고 그 양 옆으로 큰 TV가 2대 있어서 조별 위치와 누가 어느 조에 속했는지가 표시되고 있었다. 프론트는 안드 2명 뿐인 걸 확인하고 자리로 가서 같이 밤 샐 팀원들과 간단하게 인사했다.
자기소개 + 레크레이션을 통한 주제 선점
1시 반부터 본격적으로 시작됐다. 시작은 팀 별로 팀원끼리 자기소개다. 자기소개 내용은 이름, 닉네임, 파트, 해커톤 참가 이유, CMC면 필참이라 해서 왔는데요? TMI였다. 같이 CMC를 진행하는 안드로이드 개발자가 있어서 한 명은 낯이 익었지만 다른 사람들 모두 뉴페이스라 간단하게 자기소개했다. 팀 구성은 안드 2명, 백엔드 3명, 기획자 / 디자이너 각 1명이었다.
주제는 해커톤인 만큼 당일에 공개됐는데 대주제는 환경 관련된 것이었다. 아씨 뭐였지
대주제 밑으로 10개의 주제들이 써 있었는데 하나같이 머리아픈 주제들이었다. 그 중에서도 접근성이 쉬운 주제는 있기 마련이라 팀별로 주제를 어떻게 가져가게 할까 싶었는데 팀원 관련 문제를 내서 맞추는 순으로 가져가는 식이었다. 우리 조는 제법 앞 순번이 되어 기획자와 백엔드가 간단한 논의 후 원하는 주제를 가져왔다.
아이디어 구체화
아이디어 구체화 시간에는 안드로이드 개발자와 어떻게 개발할지를 주제로 말했다.
머리 아픈 건 난 XML 개발을 위주로 해서 컴포즈가 어색한데 이 분은 컴포즈를 위주로 해서 XML이 어색하다고 한다.
같은 안드로이드 개발자지만 UI 짜는 방식이 극과 극이라 통일이 불가능했다. 그냥 아ㅋㅋ이게 이렇게 되네 하면서 내가 컴포즈를 쓰기로 했다. XML은 컴포즈보다 좀 어려운 감이 있어서 이 분이 XML에 익숙해지는 것보다 컴포즈 찍먹이라도 해 본 내가 컴포즈로 짜는 게 낫다고 생각됐다.
개발 - 오후~저녁
3시부터 기획자, 디자이너가 서로 붙어서 UI를 디자인하고 백엔드는 전달받은 기획을 토대로 API 개발을 시작했다.
그럼 안드로이드 개발자는 뭘 하면 되는가? 레포지토리를 생성하고 나면 놀랍게도 할 게 없다.
피그마 디자인도 없고 API도 개발 중이라 할 수 있는 게 없다. 색이 나올 때마다 컬러 코드를 컴포즈 프로젝트에 넣는 소일거리 정도가 있었지만, 컴포즈가 어색한 나 대신 다른 안드 개발자 분이 다 해주셨다.
스플래시와 홈 화면의 와이어프레임이 나오고 나서야 비로소 뭔가 할 게 생겨서 스플래시 화면 작업부터 시작했다. 커스텀 스플래시 화면을 만들어야 했기 때문에 SplashScreen api를 써서 뚝딱 만들었다.
홈 화면을 작업할 때 하단 탭 바를 3개 만들어야 했는데 다른 안드 개발자 분이 만들어주시고, 난 스플래시 화면을 만드는 동안 나온 달력 와이어 프레임을 보고 고민에 잠겼다.
커스텀 달력은 신경쓸 게 많은 작업이라 생소한 컴포즈로 가능할까 싶었다. 그래서 어쩔 수 없이 달력은 커스텀 뷰 기반의 XML로 구현하고 함수를 통해 필요한 값을 변환된 형태로 전달할 수 있게 만들기로 하고, 컴포즈를 써서 할당된 화면들을 만든 다음 커스텀 달력 만들기에 착수했다. 이전에 달력을 만들어 본 적이 있어서 내가 맡기로 했다. 그러나 생각보다 달력 커스텀 작업에 시간이 오래 걸릴 것 같았다.
이전에 블로그에 달력 만드는 예제를 쓴 적이 있는데 해커톤 프로젝트에선 쓸 수 없었다. support 라이브러리 v26이 쓰이던 때에 쓴 글이고 해당 라이브러리 레포도 마지막 업데이트가 6~7년 전이었다. minSdk가 30인 프로젝트여서인지 프로젝트가 라이브러리를 거부했다.
어쩔 수 없이 코드 재사용을 포기하고 빠르게 쓸만한 라이브러리를 찾아서 문서를 확인하며 사용법을 간단하게 익히고 달력을 띄우는 것부터 시작했다. 다행히 달력은 잘 떴다. 컴포즈에서 XML 기반 커스텀 뷰를 표시하는 것도 디벨로퍼에 잘 설명돼 있어서 그대로 하니 금방 컴포저블 함수 안에서 띄울 수 있었다.
그리고 달력 상단 중앙에 2025년 8월 형태로 연월을 표시하고 양 옆으로 화살표 아이콘을 벡터 드로어블로 추가한 후 클릭할 때마다 월 변경, 달력을 드래그할 때도 월이 바뀌도록 리스너를 설정하는 작업을 진행하는 등 여러 상황을 헤쳐가며 달력을 만들었다.
개발 - 저녁~새벽
6시가 됐다. 잠깐 쉬는데 백엔드 한 분이 12시간도 넘게 남았다고 했다. 그 때부터 뭔가 싸했다.
시험공부할 때 남은 시간이 많으면 이만큼 남았네 하면서 좀 널널하게 준비하지만 얼마 안 남았을 땐 생각보다 쳐내야 하는 양이 많은데 시간은 없어서 다급해지는 경우가 있는데 이번 해커톤이 그렇게 되지 않을까 라는 생각을 했다. 애써 괜한 생각이라고 쳐내며 달력 커스텀을 이어나갔다.
첫 번째 달력 커스텀을 끝내고 2번째 달력을 보는데 한숨부터 나왔다. 날짜를 선택하면 날짜 밑에 유저가 찍은 사진을 둥글게 띄워야 했다. 또한 배경도 날짜와 밑의 사진을 포함하는 세로로 긴 녹색 타원 형태의 뷰를 띄워야 했다. 공통화할 수 있는 부분이 보이지 않아서 어쩔 수 없이 별도의 달력을 만들기로 했다.
날짜 밑에 사진 띄우기는 구현했지만 날짜와 사진을 포함하는 녹색 타원을 만드는 부분이 어떻게 해도 되지 않았다. 어찌어찌 해보려고 노력했지만 2시간을 투자해도 실패해서 결국 디자이너와 쇼부를 쳤고, 첫 번째로 만든 달력처럼 날짜 뒤에 둥근 원을 만들고 그 원에 테두리를 입히면서 다른 요일과 20dp씩 마진을 두고 표시하는 걸로 합의를 봤다.
이 작업도 만만치 않은 작업이었지만 되지도 않는 작업에 시간 버리는 것보다야 훨씬 나았다. 얼른 작업하는데 배달시킨 저녁이 왔다.
원래 장소를 더럽히지 않고 음식 냄새를 안 좋아하는 사람도 있기 때문에 밖에서 먹고 오는 게 원칙이지만 이 날 비가 와서 예외적으로 배달이 허용됐다. 돈가스를 시켜서 적당히 때우고 달력 커스텀을 이어나갔다.
담배와 함께 2번째 달력을 완성하고 나니 3시가 되었다. 이 때도 UI, API는 나오지 않았고 여전히 기획안을 바탕으로 UI를 작성하는 것 밖엔 할 수 없었다. 기획안 바탕으로 컴포즈로 UI 짜기도 쉽지 않아서 온 몸 비틀어가며 쳐냈다.
새벽 5시가 되었다. 이 때 UI들이 전부 완성됐다. API는 기억 상으론 조금 더 지나서야 스웨거로 확인할 수 있었다. 즐겜마인드 ON ^0^
그래도 어찌저찌 제출하고 나니 몸에 기운이 없었다. 분명 10년 전엔 밤 새도 거뜬했는데 10년 지났다고 상태가 가관이다.
발표 전에 다른 팀에 속한 안드 개발자분들과 담배를 피는데 커스텀 달력을 2개 만들었단 소릴 들으시더니 그걸 어떻게 했냐고 다들 말씀하신다. 고충을 알아주는 분들이 있다는 게 얼마나 다행스런 일인지 다시금 깨달았다.
제출~발표~수상~단체사진~귀가
APK를 기획자에게 전달하고 퍼져 있는데 발표가 시작됐다. 10개 팀이 발표하는 만큼 발표는 조금 시간이 걸렸고 한 팀은 발표 PPT 용량이 100MB를 넘어서 다음 팀이 먼저 발표하거나, 발표 자료 대신 APK를 발표 자료로 낸 팀도 있는 등 자잘한 해프닝들이 있던 발표지만 모두 하루라는 시간 안에 완성도 높은 앱을 만들어낸 걸 보고 대단하다는 생각만 들었다.
이후 운영진들이 수상팀 회의를 거친 뒤 수상식이 간단하게 열리고, 단체사진을 찍은 뒤 귀가했다.
지하철 탈 기운이 없어서 택시 타고 집에 온 뒤 늦은 점심을 먹었는데 먹고 나니 졸려서 잠깐 눈을 붙인다는 게 눈을 뜨니 밤 12시였다. 어쩔 수 없이 다시 자고 눈을 뜨니 오늘 아침 6시 40분이라 출근 준비했다. 죽고 싶었다.
그래도 해커톤을 준비하고 이리저리 신경 써주신 운영진 분들, 마이크 들고 호응률 적은 수줍은 참가자들 앞에서 열심히 설명하고 말씀해주신 운영진 분께 심심한 감사의 인사를 남긴다.