본문 바로가기

일상/후기

2024 DND 해커톤 참여 후기

 

개발자 오픈 채팅방을 통해 IT 연합 동아리인 DND에서 해커톤이 열린다는 소식을 들었다. 개발자를 지망했을 때부터 해커톤을 참여하고 싶었기에 지원서를 작성했다. (컴퓨터를 전공했으면 해커톤은 해봐야지라고 생각했던것 같기도...) 지원서에는 경험을 바탕으로 사이드 프로젝트의 열정과 협업을 통한 성장을 지향함을 드러냈다.

 

합격 발표 시간이 되었을 때 두근거리는 마음으로 메일함을 열어보니 기쁘게도 선발이 되었다는 메일을 도착해있었다.  

합격 이메일

해커톤 시작 일주일 전부터 디스코드에 참여해서 팀 빌딩을 했다. 나는 감사하게도 데브코스에서 인연을 맺은 분이 컨택을 해주셨고 팀 빌딩을 마칠 수 있었다. 우리 팀은 온라인 미팅을 통해 미리 공개된 키워드, 일상과 지역에 부합하는 주제를 생각해봤다. 그리고 백엔드끼리 따로 모여 레포지토리 생성, 프로젝트 초기화 등 기본적인 세팅을 했다. 

 

해커톤 시작

해커톤 당일, 시작이 오후 7시라 근처에서 모여 저녁을 먹기로 했다. 하지만 죄송스럽게도 버스가 많이 막혀 약속 시간에 도착을 못했다🥲 미리 양해를 구하고 나는 근처 맥도날드에서 혼자서 빠르게 햄버거를 먹고 해커톤장으로 향했다. 

해커톤 시작

 

운영진의 가벼운 행사 일정 소개를 시작으로 마지막 키워드가 발표됐다. 마지막 키워드는 불편함으로 지역의 편차를 줄여주거나 일상의 어려움을 해결해주는 서비스를 개발해야 했다.

 

처음 1시간 반 동안은 아이데이션을 진행했다. 많은 아이디어가 나왔고 이 중 주제에 부합하며 참신하고 시간 내에 기술적으로 구현 가능한 아이디어를 선택했다. 그 결과 우리 팀은 지역 교통 격차 해결을 중심으로 지방에서 서울까지 올라올 때 소비하는 시간과 비용이라는 정량 데이터를 재치있게 가공하여 보여주는 서비스를 만들기로 결정했다.

 

다음으로 서비스에 활용할 수 있는 대중교통 길찾기 API를 찾았다. 당황스럽게도 네이버와 카카오 모두 지도 API에서 자동차 길찾기만 제공할 뿐 우리가 원하는 대중교통 길찾기는 제공하지 않았다. 그래서 다음 대안으로 길찾기 페이지를 크롤링하거나 임베딩을 고민했다. 하지만 둘 다 해본 적이 없어 시간이 얼만큼 걸릴지 가늠이 안됬다. 걱정하던 사이 다행이 프론트엔드 개발자 분이 ODsay에서 적절한 API를 찾아주셨다. 

 

이제 직군끼리 테스크를 나눠 개발을 시작했다. 나는 ODsay 대중교통 API와 통신하는 역할을 담당했다. 개인 프로젝트에 OpenFeign을 적용했기 때문에 다른 외부 API 통신 기술은 고려하지 않고 OpenFeign을 빠르게 설정했다. 다음으로 피그마와 노션의 기능 명세서를 바탕으로 어떤 값을 파싱할지 문서를 확인했다. ODsay 대중교통 API에서 대중교통 길찾기는 응답의 Depth가 최대 5였고 시내와 시외에 따라 필드명이 약간 변경됐다.

 

하나의 API에서 시내 이동과 시외 이동 모두 요청으로 들어올 수 있고 하나의 API에서 요청에 따라 응답값이 변경되면 클라이언트가 불편하다. 그래서 공통 포맷을 가지도록 응답 DTO에서 switch문을 이용해 매핑했다.

public static Destination from(
    Path path
) {
    var transport = Transport.from(path.pathType());
    var totalPayment = switch (transport) {
        case BUS, SUBWAY, SUBWAY_BUS ->  path.info().payment();
        case TRAIN, EXPRESS_BUS, AIRPLANE, TRANSPORT_COMBINE -> path.info().totalPayment();
    };
    var transitCount = switch (transport) {
        case BUS, SUBWAY, SUBWAY_BUS -> path.info().busTransitCount() + path.info().subwayTransitCount();
        case TRAIN, EXPRESS_BUS, AIRPLANE, TRANSPORT_COMBINE -> path.info().transitCount();
    };
    
    return new Destination(
        transport.getDescription(),
        path.info().totalTime(),
        totalPayment,
        transitCount,
        path.info().firstStartStation(),
        path.info().lastEndStation(),
        path.info().totalDistance()
    );
}

 

해커톤은 짧은 시간 내에 아이디어를 구현해내야 한다. 그래서 우리는 개발 비용을 최소화하기 위해 모든 데이터를 서버 메모리에 올려두었다. 그 결과 데이터베이스 설계 시간을 생략할 수 있었다. 다음으로 시간이 오래걸리는 클라우드 배포대신 Ngrok을 사용하여 로컬 환경에서 실행되는 애플리케이션에 네트워크를 통해 안전하게 접근할 수 있도록 했다. (혹시 해커톤에 처음 참여하는 독자가 있다면 꼭 Ngrok 사용해보시길..!)

 

새벽 5시 넘어갈 때 쯤, 백엔드 API가 완성되었고 Ngrok으로 로컬을 열어주고 CORS 설정도 해주었다. 그리고 프론트엔드가 API와 통신하면서 에러를 마주하거나 API spec 변경 요청이 들어오면 빠르게 수정 작업을 했다. 통신하면서 마주했던 가장 큰 이슈는 CORS 에러였다. 

 

Ngrok을 사용할 때 GET 요청을 보내면 아래와 같은 화면이 뜬다. 이 화면을 지우고 싶으면 ngrok-skip-browser-warning을 요청 헤더에 아무 값과 함께 넣으라고 적혀있다. 안내된대로 이 헤더를 넣으니 이번엔 CORS 에러가 터졌다😭 

 

Ngrok 화면

 

잘 동작했는데 갑자기 CORS가 동작하지 않으니 당황스러웠다. 30분은 넘게 헤매다가 Access-Control-Allow-Headers에 Authorization과 Content-Type만 허용한 것을 알아차렸다. 그래서 와일드카드(*)로 변경해줘 CORS 에러를 해결할 수 있었다.

 

팀원들과 마신 에너지 드링크

 

이슈를 해결하고 종료까지 3시간 남았을 쯤, 오전 8시부터 굉장히 졸렸다. 각성을 위해 핫식스 한 캔을 더 마셨는데도 졸음이 몰려왔다. 졸음에 이어 두통이 오자 책상에 엎드려 눈을 감았다. 그렇게 기절하듯 20분을 잤다. 해커톤이 진행되는 동안 총 3캔을 마셨는데, 하루에 이렇게 많은 에너지 드링크를 마셔본 것은 처음이었다🤣

 

해커톤 마무리

마감 15분 전 우리는 MVP를 완성을 했고 첫 번째 순서로 발표를 했다. 그리고 다른 팀의 발표가 이어졌을 때 기획 단계에서 선택되지 않았던 아이디어와 비슷한게 많아 사람 생각하는건 다 거기서 거기구나라고 생각했다. 

해커톤 발표

 

발표가 종료되고 대망의 수상 발표, 인기상과 2등이 차례대로 호명되고 그 중 우리 팀은 없었다. 그래서 수상 발표가 시작됐을 때보다 기대감이 사그라드렀다. 1등을 발표할 때, 운영진 분이 우리 팀 앞에 놓인 팀명 표지판을 쳐다보시는 것을 보았고 바로 우리 팀이 호명됐다.

 

1등 수상

 해커톤 소감

마감 1시간 전 20분 쪽잠자는 바람에 밤을 완전히 새지는 못했지만 이렇게 늦게까지 깨어있는건 오랜만이었다. 대학교 1학년 때 벼락치기하고 시험 보러 들어갔을 때 이후로 처음인 것 같다. 

 

사실 첫 해커톤인만큼 참가에 의의를 두었는데 실력 좋은 팀원들을 만나 감사하게도 1등을 수상하는 영광을 누렸다. 럭키비키의 힘인가..🍀 오후 7시 30분부터 다음 날 오전 11시까지 20시간 30분 동안 아이데이션부터 개발 완료까지 이렇게 압축된 경험은 새로웠고 열정과 성취감을 가져다 주었다.

 

반대로 아쉬웠던 점은 1박 2일 짧게 진행되는 만큼, 네트워킹이 많이 이뤄지지 못했다는 점이다. 하지만 팀원들과 1주일 뒤 뒤풀이를 진행했기 때문에 네트워킹도 성공적이라 생각한다😁 

 

해커톤으로 인해 일주일은 다시 밤낮이 바뀌어 슬펐지만 해커톤 재참여 의사가 있냐고 묻는다면 무조건 YES!이다. 시간이 허락하는 한 자주 개발 관련 행사에 참여해 개발 의욕을 이끌어내야겠다고 다짐했다.

'일상 > 후기' 카테고리의 다른 글

삶의 지도  (0) 2024.09.20
2024 스프링 캠프 다녀온 후기  (0) 2024.06.01
제 1회 게으른 개발자 컨퍼런스 다녀온 후기  (0) 2024.02.06