기간: 2023년 6월 21일 ~ 23일 (무박 3일)
장소: 대구 엑스코
주최: Microsoft, 경북대학교
성과: 대상 (Microsoft 사장상)
역할: 백엔드 (Java Springboot)
이보다 더 힘든 해커톤은 없었다.
무박 3일은 정말 너무 힘들었다. (와중에 나는 잠깐 쉬는 시간에 헬스장에서 운동하고 왔다...ㅋㅋㅋ)
대상 수상자 인터뷰를 하는데 정말 죽을꺼 같은 컨디션으로 인터뷰를 해서 마이크로소프트를 마이크로소프트웨어.. 라고 했다. 와..ㅎㅎ
해커톤은 언제나 재미있다. 물론 단순히 재미만을 위해 나가는 건 아니다. 해커톤은 타임 어택이라는 극한의 경쟁 속에서 내 실력과 한계를 시험해볼 수 있는 최적의 기회다. 제한된 시간 안에 아이디어를 구체화하고, 빠르게 문제를 해결하며, 내가 얼마나 발전했는지 확인할 수 있는 자리이기도 하다.
특히, 해커톤 현장에 있는 다른 개발자들을 보면 건강한 자극을 받는다. 비장한 눈빛, 빠른 손놀림, 그리고 노트북 위에 붙어 있는 수많은 스티커들이 그들의 개발 경험을 대변한다. (지금은 맥북을 써서 스티커를 붙이지 않지만, 그 당시에는 LG 울트라북을 썼었고, 나 역시 '개발자' 스러운 스티커로 노트북을 덕지덕지 꾸몄었다. 하지만 나보다 더한 사람들도 많았다. ㅋㅋ) 이런 분위기 속에서 나 역시 더 발전해야 한다는 동기부여를 얻게 된다.
가끔은 내가 말하는 감자처럼 느껴지기도 하지만...
이번 해커톤이 특별했던 점은, 단순히 대회만 치르는 것이 아니라 사전 교육 프로그램이 포함되어 있었다는 것이다. Microsoft의 Azure, Github, AI를 다루는 교육을 통해, 내가 몰랐던 새로운 기술들을 익힐 수 있었고, 마이크로소프트가 Azure와 AI에 진심이라는 걸 다시 한 번 느꼈다. 사전 교육에서 새로 알게된 기술들을 해커톤에서 꼭 써먹어보려고 노력했다. 물론 새로운 기술을 단기간에 활용하는 것은 매우 어렵다. 더군다나 Auzure는 워낙에 신기술이라, 구글링해서도 잘 안나왔기 때문에 많은 어려움이 있었다. 그래도 새로운 기술을 써본다는 사실에 감사!
사실 이번 해커톤의 일정은 교내 해커톤과 겹쳐서 상당히 고민스러웠다. 교내 해커톤은 수상 가능성도 높았고 상금도 무려 300만원이었다. 그래서 처음에는 교내 해커톤에 출전하려고 생각했다.
하지만 결국 나는 Hackers Ground 해커톤을 선택했다. 그 이유는 오직 '나의 성장'이었다.
해커톤 세션에서 배운 기술들을 실제로 사용하기 위해서는 GitHub Copilot이나 Microsoft Azure 크레딧 같은 리소스가 필요했는데, 대회 측에서 이러한 기회를 제공해줬다. 덕분에 최신 기술을 직접 다루고 경험할 수 있었고, 그 과정에서 내가 개발자로서 더 많은 학습과 성장을 할 수 있을 것이라는 확신이 들었다. 이런 현실적인 지원과 자원 덕분에, 단순한 이론적 학습을 넘어 실제 프로젝트에 적용하며 나의 역량을 더욱 키울 수 있었다.
나는 팀이 따로 없어서 누구와 함께 나가야 할지 고민이 많았다. 그런데 마침 '프론트엔드 짱 잘하는 사람이 백엔드 짱 잘하는 사람 구한다던데 언니 생각나서..!'라며 감사하게도 먼저 제의가 들어 왔다. 근데 나중에 가서 이 연락을 준 사람이 기획 담당 팀원으로 들어왔다.ㅎㅎ 이 덕분에 팀을 결성하게 되었다.
해커톤 특성상 보여지는 MVP가 중요하기 때문에 백엔드보다는 프론트엔드의 중요성이 더 클 수 있다. 하지만 이번 해커톤 취지를 고려한 것도 있고, 세션에서 배운 기술을 실제로 적용해보고 싶었기 때문에, 나는 백엔드와 배포 부분에도 신경을 쓰고 싶다고 팀원들에게 어필했다. 이를 위해 배포와 서버 개발에 참여할 개발자 한 명을 더 구인하기로 했다.
우선 노션에 각자의 소개와 이력을 담아 작성하고, 어떤 사람을 찾는지에 대한 정리된 내용을 디스코드 팀 결성 방의 공고로 올렸다. 클라우드 사용 경험이 있는 참가자에게 컨택을 했더니 흔쾌히 응해 주었고, 미팅을 통해 그분과 팀 결성을 완료했다. (나이스한 선택이었다. 그는 전문가였다. 진짜로.. 지금은 삼성에서 클라우드 일하고 있더라..ㅎㅎ 덕분에 진짜 많이 배울 수 있었다.)
우선 대회의 큰 주제는 '마이크로소프트 애저 클라우드를 활용해 지역 문제를 해결'하는 것이다.
세부 주제는 6월 12일 공식 github issue 게시판을 통해 공개 되었다.
💡 1“경북의 문제해결”; 현재로선 일자리 문제로 청년이탈
💡 2. “MS의 가치를 녹이기”;지구상의 모든 사람과 조직이 더 많은 것들을 성취할 수 있도록 힘을 실어주고자 하기
💡 3. 기술적 역량이 없으면 예선통과도 못 함. 기술 구현도 중요
즉,
1. 경북 문제 해결을 하면서
2. 기업의 가치를 녹이고
3. 기업이 주목하는 기술을 구현하는
프로젝트를 진행하기로 하였다.
이 흐름에 맞게 우리는 다같이 아이디어를 내고, 그중에서도 기존 플랫폼이 부재하고 가장 심각한 문제를 야기할 수 있는 문제를 해결하기로 결정했다.
이를 노션에 정리하며 아이디어를 구체화했다. 기존에 없는 솔루션을 만드는 거라 무엇보다 자료조사와 이 솔루션이 왜 필요한지 어필하는 것에 차별점을 뒀다. 디테일한 부분을 노션을 통해 함께 기록하며, 아이디어 피칭 시에 잘 활용할 수 있도록 도출했다.
DEPS (Daegu Electric-car Platform Service): 대구시 전기차 인프라 구축 서비스
DEPS는 지방 카센터의 잉여 자원을 활용해 대구시의 전기차 인프라 문제를 해결하는 서비스입니다. 지방 카센터는 이미 고압 전력 인입 공사가 완료된 상태이기 때문에, 이를 전기차 충전 인프라로 활용할 수 있는 가능성이 큽니다. 우리는 이 아이디어를 바탕으로 전기차 충전소 부족 문제를 해결하는 동시에, 카센터가 전기차 정비 인프라를 갖추게 하여 지방 전기차 유저와 카센터 모두에게 이익이 되는 솔루션을 제시합니다.
대구시와 협력하여 지방의 카센터에 전기차 충전소를 설치하는 것이 핵심입니다. 카센터는 이미 고압 전력 인입 공사가 완료된 상태로, 전기차 충전소를 설치하기 위한 기반이 마련되어 있습니다. 이를 활용해 카센터에 전기차 충전 설비를 구축하면, 지방의 전기차 충전소 부족 문제를 효과적으로 해결할 수 있습니다. 또한, 전기차가 카센터를 방문하면서 자연스럽게 전기차 수리 및 정비 인프라도 함께 구축됩니다.
카센터에 설치된 충전소를 기반으로, 전기차 사용자들이 쉽게 충전소를 찾고 예약할 수 있는 어플리케이션을 제공합니다. 이 앱은 전기차 사용자들이 충전소의 상태를 실시간으로 확인하고, 충전소 예약, 충전 속도 및 가격 확인, 리뷰 남기기, 네비게이션 안내 등 다양한 기능을 통해 편리한 충전 및 정비 경험을 할 수 있도록 지원합니다.
예약 기능:
전기차 사용자는 자신의 일정에 맞추어 충전소를 예약할 수 있으며, 대기 시간 없이 바로 충전을 시작할 수 있습니다.
정보 확인:
앱을 통해 각 카센터의 충전소 상태(충전 중, 고장, 예약 가능 여부 등)와 1킬로와트당 요금 및 충전기 속도를 확인할 수 있어, 자신에게 맞는 조건의 충전소를 선택할 수 있습니다.
리뷰 남기기:
충전소를 이용한 사용자들이 리뷰를 남겨 다른 사용자들이 카센터 선택에 참고할 수 있도록 도와줍니다. 이 리뷰는 충전 서비스뿐만 아니라 정비 서비스를 평가할 때도 유용한 자료가 됩니다.
네비게이션 안내:
앱에서 충전소를 선택하면 네비게이션 기능을 통해 해당 충전소까지 바로 안내해줍니다. 별도의 다른 플랫폼 없이 앱에서 모든 절차를 한 번에 해결할 수 있습니다.
지방 전기차 유저를 위한 인프라 구축
DEPS는 전기차 충전 및 정비 인프라가 부족한 지방에서 지속적으로 인프라를 확충하여, 전기차 사용자들이 보다 편리하게 차량을 관리할 수 있도록 돕습니다.
카센터 시장의 새로운 가치 창출
카센터는 전기차 충전소 설치를 통해 기존의 고압 전력 인프라를 효율적으로 활용하며, 부가적인 수익을 창출할 수 있습니다. 또한, 전기차 차주들이 충전소를 방문하면서 자연스럽게 정비 서비스에 대한 접근성을 높여, 전기차 정비 숙련도가 향상될 것입니다.
본격적인 개발에 돌입하기 앞서, 나는 소프트웨어 설계, API 문서화 단계에서 많은 시간을 투자했다. 해커톤 특성상 시간이 제한되어 있기 때문에, 설계가 탄탄해야 개발 과정에서 발생할 수 있는 문제를 최소화할 수 있다고 생각했다. 여러 명의 팀원이 함께 작업하는 만큼, 명확한 구조와 역할 분담이 필요했다. 특히, 프론트엔드 팀원과의 협업을 원활하게 하기 위해 Swagger와 Notion를 활용하여 API 문서화를 진행했다.
프론트엔드와의 원활한 통신을 위해 RESTful API 설계 원칙을 철저히 적용했다. 각 엔드포인트는 리소스 중심적으로 설계되었으며, 명사형으로 일관성 있게 정의하였다. RESTful API 설계 방법론을 따르기 위해, 각 URL 경로는 복수형 명사를 사용하여 리소스를 표현했고, 작업의 종류는 HTTP 메서드(GET, POST, PUT, DELETE)로 명확히 구분했다.
GET /charging-stations
로 충전소 목록을 조회하고, 예약 관리의 경우 POST /reservations
로 새로운 예약을 생성하도록 설계했다.이러한 RESTful 방법론을 적용하여 API 설계가 명확하고 직관적이게 되었으며, 프론트엔드 개발자들이 쉽게 API를 이해하고 활용할 수 있도록 했다. 또한, 데이터의 일관성과 성능 최적화를 고려하여 필요한 API만 설계함으로써 불필요한 호출을 최소화했다. 이를 통해 서비스 응답 시간도 빠르게 유지할 수 있었고, 시스템 전반의 효율성을 높일 수 있었다.
URL 경로의 명명 규칙을 철저히 적용하면서도, 각 엔드포인트가 실제 비즈니스 로직에 맞게 일관성 있게 구성되었기 때문에 API 문서화 작업 또한 원활하게 진행되었다. 특히, Swagger를 사용한 자동 API 문서화를 통해 프론트엔드 개발자가 요청 및 응답 형식을 쉽게 확인하고, 테스트할 수 있도록 했다.
이러한 설계 과정을 통해, 개발 중간에 발생할 수 있는 구조적인 문제들을 미리 방지하고, 기능을 확장하거나 수정할 때도 큰 어려움 없이 진행할 수 있었다. 특히 해커톤이라는 제한된 시간 안에서, 명확한 설계는 팀원들 간의 원활한 협업을 가능하게 해주었고, 개발 속도를 크게 향상시킬 수 있었다.
설계를 통해 코드를 짜는 데 걸리는 시간은 오히려 줄어들었고, 그만큼 더 높은 품질의 결과물을 빠르게 완성할 수 있었다.
아 근데.. 무박 3일은 진짜 힘들었다. 씻을 공간도 없고, 제대로 쉴 수 있는 장소도 마땅치 않았다. 휴식을 위한 공간은 있긴 했지만, 그저 빈백 몇 개가 놓인 간이 부스 같은 곳이어서 편히 쉬기엔 턱없이 부족했다. 그래도 나는 근처 헬스장에서 운동도 하고 목욕도 하고 오니 기분이 한결 나아졌다. 진짜 죽을 것 같은 피곤한 컨디션이었는데, 그렇게라도 리프레시가 되니까 ‘아, 이게 되네?’ 싶더라...ㅋㅋ
당시 나는 매일 아침 9시부터 11시까지 아르바이트를 하고 있었다. 다행히 근무지가 버스로 20분 거리라 팀원들에게 양해를 구하고 다녀올 수 있었지만, 남들이 다 자고 쉬는 시간에 나는 출근해서 일하고 오니 현타가 오더라. 그래도 해커톤 끝까지 참여하고, 그 와중에 아르바이트도 해낸 나 자신이 대견하다!
솔직히 말하자면, 대부분의 사람들이 AWS를 사용하니까 나도 자연스럽게 따라 사용했지만, 정확한 흐름을 이해하지 못한 채 무지성으로 이용한 적이 많았다. 하지만 이번 프로젝트에서 Microsoft Azure를 직접 사용해보고, 실제로 적용해보면서 배포와 관련된 많은 것들을 배울 수 있었다.
이번 해커톤에서 배포 담당 팀원이 이 부분을 주도적으로 진행했기 때문에 내가 기여한 부분은 적었지만, 옆에서 함께 작업하면서 정말 많은 것을 배웠다. 특히, Azure에서 제공하는 다양한 서비스들을 접하면서 자동화 배포의 중요성과 그 효율성을 몸소 느꼈다.
Azure App Service: 기존에는 백엔드 서버를 운영하기 위해 직접 환경을 구축해야 했지만, PaaS(Platform as a Service)인 Azure App Service 덕분에 서버 환경을 따로 설정하지 않고, 개발에만 집중할 수 있었다.
Visual Studio App Center: 우리가 React Native로 제작한 애플리케이션을 iOS와 Android로 빌드하는 데 사용했다. 앱 배포를 쉽게 관리할 수 있었던 점이 큰 도움이 됐다.
Azure Database for MySQL: DB 구축 시 예상되는 부하 문제나 환경 설정 등에 대한 우려 없이, 완전 관리형인 Azure Database for MySQL을 통해 즉시 DB를 활용할 수 있었다.
Github Actions: 작업한 코드를 Github에 올리기만 해도 자동으로 서버에 배포되는 구조를 구현할 수 있었다. 덕분에 수작업으로 배포하던 과정을 완전히 자동화할 수 있었고, 배포 프로세스가 매우 간편해졌다.
Bicep: Azure에서 클릭과 타이핑으로 진행하던 작업을 Bicep 스크립트 파일 하나로 실행해 빠르게 배포할 수 있었다. 이를 통해 인프라 배포의 자동화도 가능하다는 점을 배웠다.
이 경험을 통해 단순히 Azure 사용법만 배운 게 아니라, 자동화 배포의 중요성을 깨닫게 되었다. 이전에는 수작업으로 설정하고 배포하는 방식이 익숙했지만, 자동화된 CI/CD 파이프라인을 구축하면서 효율성을 크게 향상시킬 수 있었다. 덕분에, 이후 다른 프로젝트에서는 내가 주도적으로 Github Actions를 활용해 직접 CI/CD 파이프라인을 구축하고, AWS 배포도 진행할 수 있게 되었다.
이번 경험은 나에게 배포 과정의 효율성과 자동화가 얼마나 중요한지를 깨닫게 해줬다. 특히, 이를 통해 내가 앞으로 더 효율적으로 프로젝트를 관리하고, 빠르게 배포하는 능력을 기를 수 있었다는 점에서 큰 성장을 이뤘다고 느낀다.
다시 보니까 꼬질꼬질... 진짜 수고했다..
대상 !!!
죽어라 달린 만큼 좋은 성과를 거둘 수 있어서 너무 기쁘다. 수상 호명이 계속 안 들리길래, 솔직히 마음을 내려놓고 있었는데, 팀원들에게 "그래도 OOO님이랑 같은 팀을 해서 정말 너무 좋았어요. 너무 수고하셨어요 정말. ^^ 결과에 연연하지 않고 정말 소중한 인연을 만들어 가네요~^^" 이러고 있었다. 근데 그러면서도 속으로는 혹시나! 하는 마음에 내심 기대하고 있었다.
무엇보다도 우리 팀 모두가 너무 고생했고, 정말 열심히 노력했다는 걸 알기에, 마음속으로는 "제발 대상 ㅠㅠㅠㅠ 으허헝ㅇ 제발 ㅠㅠ" 이러고 있었다.
그리고 대상이 호명되는 순간, 믿기지 않아서 멍하니 있다가 우리 팀 이름이 맞다는 걸 확인하고서야 정신이 번쩍 들었다. 다들 서로 고생했다며 얼싸안고 기쁨을 나누던 그 순간이 정말 잊을 수 없었다. 무박 3일 동안의 고생한 보람이 있었다... 정말... 이건 해커톤을 가장한 나와의 싸움이었다. 수면욕, 식욕 다 참아가면서 해야 할 일을 해냈다는 게 진짜 인생에 도움이 될 것 같은 경험이었다. 극한을 경험해보면 다른 일은 더 쉽게 느껴진다는데...ㅎ
해커톤 내내 우리가 얼마나 열심히 준비했고, 서로에게 얼마나 의지하며 달려왔는지 생각하니 더 뭉클했다. 사실 결과에 상관없이 함께 만들어간 과정이 너무 소중했지만, 이렇게 최고의 결과로 마무리할 수 있어서 의미가 더 컸다. 혼자서는 절대 할 수 없는 일이었고, 팀워크가 정말 중요했다. 우리 팀이 각자의 역할을 충실히 해줬기 때문에 이 상을 받을 수 있었다고 생각한다. (나는 특히나 Chocolate Provider로 톡톡히 기여했다는 점! ^^ㅎ)
솔직히 이번 해커톤을 통해 극한의 정신력을 경험하면서, 개인적으로 부족한 부분도 많이 느꼈고, 그걸 스스로 이겨냈다는 사실이 대견했다. 또 팀원들에게서 배운 것도 많았다. 특히 배포 과정에서 내가 부족하다는 걸 깨달았고, 덕분에 더 성장할 수 있는 계기가 되었다. 팀원들과 서로 도와가며 최선을 다한 경험이 이번 해커톤의 가장 큰 수확이었다.
다시 한 번 팀원들 모두에게 감사하고, 끝까지 최선을 다해준 덕분에 이런 좋은 결과를 얻었다는 말을 전하고 싶다. 그리고 좋은 인연을 만들어준 이번 해커톤이, 앞으로도 우리 모두에게 좋은 기억으로 남을 것 같다.
수상을 할 때 만난 양금희 의원님과 김현덕 단장님! 대구 청년체험단을 하면서 개인적으로도 자주 뵈었었는데, 이렇게 또 청년체험단으로서 성과를 낸 것 같아 더욱 뿌듯했다. 하하하.
잘했다! 수고했다! 기특하다!