첫 해커톤 후기

MinHwi·2022년 8월 29일
0

개발 활동

목록 보기
1/3
post-thumbnail

8월 27일부터 28일까지 진행된 교내 해커톤에 참여했다. 제로존 프로젝트를 같이 진행했던 프론트 친구들과 jpa 스터디에서 만난 백엔드 파트 언니와 함께 했다.

결과부터 미리 말하자면, 아쉽게도 배포를 못했다! 서버 배포가 늦어진 탓에 프론트가 데이터를 받아서 뿌려주는 일이 매우 빠듯했고, apk 배포 후의 앱에서는 서버에 네트워크 연결이 안돼서 결국 데모 영상을 못 찍었다. 이틀 간 정말 열심히 개발했는데 막판에 문제가 생겨 제출을 못한게 너무 아쉽지만.. 이렇게 몰입해서 무언가를 해본게 오랜만이어서 그런지 정말 재밌었다. 그리고 젊을 때 아니면 정말 못할 것 같다. 하하하

첫 해커톤에 참여한 나에게 해주고 싶은 말

  1. 기획은 제발 작게..!!!!!!
  2. CI 붙여라
  3. 테스트 코드 써라

개발 과정 주저리

해커톤은 토요일 아침 9시부터 다음날 일요일 밤 10시까지 진행되었다. 나는 서버를 맡았고, 가장 익숙한 자바/스프링으로 개발했다. 해커톤 하루 전날 회원가입, 로그인, 마이페이지 회원 조회 및 수정 등의 간단한 api가 있는 서버를 만들어서 aws ec2에 배포했고, aws maria db를 연결해 테이블을 만들어두었다. 회원가입 및 로그인은 배포가 완료된 상태로 대회를 시작했다. 이때까지는 별 생각 없었다.

주제가 발표되고 나서, 무난한 주제인 밥약 매칭 앱을 만들기로 했다. 기획으로 당근 마켓을 벤치마킹했기 때문에 우리도 채팅 기능을 넣으려고 했는데, 이틀 안에 다른 기능을 비롯해 채팅까지 구현하기엔 시간이 부족할 것 같아 센드 버드라는 외부 api를 연결해보자는 의견이 있었다. 하지만 구현 방법을 보니 프론트 쪽에서 작업을 해줘야하는게 많았고.. 프론트는 화면 구성만으로도 이미 할게 차고 넘쳤기 때문에 채팅은 빼는 것으로 결론이 나왔다. 이때 시간이 오후 한시였다. 하하

Erd, uml, api 설계를 마쳤다. 시간은 오후 세시. 이땐 기능이 그렇게 어렵지 않아서 빠르게 구현할 수 있을 거라고 생각했다.

언니가 기존 회원 관련 로직을 먼저 수정한 후 테스트했고, 나는 후기 관련 기능과 글 작성 기능을 먼저 만들었다. 후기 관련 기능에서 평점 계산으로 평균 쿼리를 사용해야했는데, jpa로 통계 쿼리를 써보는건 처음이라 좀 헤맸다. 자꾸 npe가 떠서 짜증 났지만, 알고보니 검색 조건에 맞는 로우가 없으면 평균을 낼 수 없어 null을 반환하는 것이었다. 반환 타입을 Optional로 수정하고 로직을 완성했다. 이때가 새벽 4시였고, 백엔드 개발 상황 공유 후 기절하고 말았다. 나는 밤 새는걸 잘 못한다.

다음날 아침, 손에 모기 물린 것을 발견. 너무 너무 간지럽고 손이 왕창 부었다. 으흑흑 모기 독에 알레르기가 있어서 무지 따가웠지만 마감이 다가오니 참고 했다. 나는 글 작성과 밥약 생성을 연결했다. Enum을 받아오는 과정에서 에러가 나서 좀 해맸다. 분명 하라는 대로 고쳤는데 왜 파싱을 못하는거야..! 인텔리제이 자체에서 다시 빌드했더나 잘 됐다.

밥약 신청 및 허락, 거절, 밥약 상태 관리는 언니가 맡았는데 여기도 enum 때문에 엄청 헤맸다. 흑흑 왜 변경을 했는데 감지를 못하니..! 왜인지는 모르겠지만 첫 테스트는 반영되는데 시간이 오래 걸리다가 시간이 좀 지나니 바로 바로 반영됐다. 트랜잭션 때문일까..? 지금도 잘 모르겠다. 잘만 되는데 왜 그땐 안됐을까.

오후 3시가 넘었는데 아직도 서버 개발이 완료되지 않았다. 프론트는 배포를 오매불망 기다리는데.. 으아악 그래서 미완성인 상태로 풀 받아서 ec2에 배포를 했다. 테이블 생성해서 배포 서버에 기능이 동작하도록 만든 후 프론트는 연결을 시작했다. 지금 생각해보면 기능을 다 만든 후에 배포해야지는 어리석은 생각이었다. 아직 마이크로 서비스를 공부해보진 않았지만.. 기능을 작게 쪼개서 바로 배포하는 방식으로 개발했어야 시간을 단축할 수 있다. 이 부분은 아직도 후회하고 있다. 프론트가 너무 시간에 쫓겨 연결을 하는 바람에 배포까지 가지 못했던 것 같다.

그리고 개발 시간이 너무 길어졌던 요인 중 하나는 테스트 때문이었던 것 같다. 우리는 테스트 코드를 잘 짜는데 자신이 없어서, 그냥 포스트맨만으로 api 테스트만 하려고 했다. 처음엔 문제가 없었다. 하지만 기능이 추가되면서, 새로 추가한 기능을 테스트하기 위해 선행해야 하는 테스트가 늘어나면서 시간이 오래 걸리기 시작했다. 테스트 코드 작성의 업보빔을 맞은 것이다... 나중에는 테스트하다가 울렁거렸다. 테스트의 지옥을 맛본 것이다. 언니랑 테스트 코드 열심히 연습하기로 했다.

아무튼 서버 쪽도 계속 개발해서 푸시를 했고 프론트도 미친듯이 서버 연동을 했다. 이때는 정말 모두가 초집중 상태여서 시간이 엄청 빨리 갔던 것 같다. 서버 개발이 완료돼서 안심하고 기획서 작성을 하던 와중에.. 500이 떴다는 프론트의 알림.. 오마이갓.. 포스트맨으로 ec2Server에 연결해서 보니 우리가 만들지 않았던 테이블에 insert 쿼리가 날아가고 있었다. 대체 이 테이블의 정체는 뭐지...? 이 오류를 제출 한 시간 남은 상태에 만나서 거의 멘탈이 붕괴된 채로 엔티티를 살펴보았다. 언니가 작업한 부분에서 연관관계 설정이 논리적으로 맞지 않아 새 테이블이 만들어졌고, fk를 가지고 있어 글이 한개 이상 추가되지 않았다. 그러나 우리는 이미 이틀 간 두시간 잔 상태였고 어디를 어떻게 고쳐야할지 머리가 돌아가지 않았다. 모기 물린 곳이 너무 따갑고 몸이 아팠다😢 일단 글 하나까지는 작성이 되니 이 상태로 데모 영상 찍자고 했으나! apk를 받았더니 서버로 요청이 안감! 10시 마감! 끝~~ 이렇게 됐다 푸항항항 ^3^)))

후기

결과는 아쉽지만 그래도 정말 재밌었다. 배포 과정 개선의 필요성을 알게 되었고, CI/CD를 더 연습해야한다는 인사이트도 얻었다. 그리고 팀원들과 돈독하게 개발도 했고, 맛있는 것도 먹었다. 새벽 3시에 교정에서 별도 보고 남산 타워도 봤다. 별 보면서 코딩했다 하하. 다시 하겠냐고 물으면 다신 하고 싶지 않지만, 이틀이란 시간을 아주 알차게 쓴 것 같아서 재밌었다. 그리고 2학기에 백엔드 같이 한 언니랑 jpa 기능 개선과 채팅 서버 구현을 토이 프로젝트로 하기로 했다. 건설적인 이벤트였다. 함께 고생한 팀원들에게 감사를 전한다. 후기 끝!

profile
딩가딩가 백엔드 개발자

0개의 댓글