지난 1월 5일에서 6일 IT 연합동아리 코테이토에서 3번째 해커톤이 열렸다.
진행 과정
1월 5일 19시부터 다음날 08시까지 약 13시간 진행하는 코테이토 해커톤은 기획, 디자인, 백엔드, 프론트엔드로 팀을 구성해 현재 진행되는 기수(8기) + OM의 참가신청을 받아 진행하는 해커톤이다.
정해진 주제와 팀원을 전날 미리 공지했고 이번 주제는 사랑, 스포츠로 팀원은 기획 1, 디자인1, 백엔드3, 프론트엔드2로 진행되었다.
왜 참여했는가?
지난 2번의 해커톤 참여 기억이 너무 좋았다. 결과적으론 두 번의 해커톤 모두 우승을 한 것도 있지만, 해커톤이 끝나고 나면 항상 배우는 것이 많았기에 이번 해커톤에서도 그런 것들을 기대할 수 있지 않을까 싶었다.
첫 번째 해커톤에선 단순 Spring MVC패턴만 안다고 개발이 끝이 아니란걸 배웠고 두 번째 해커톤에선 로컬에서 CRUD만 짤 수 있다고 해서 개발을 잘 할 수 없다는 것을 느꼈다.
약 12시간의 짧은 시간동안 기획, 설계, 개발, 배포를 박치기하고 해커톤을 마치면 성장을 위해서 내가 해야할 일이 무엇인지 보이는게 좋았고 그걸 채워가는 과정이 좋았다.
이번 해커톤 또한, 내가 놓치는 것이 무엇인지와 부족한 점이 무엇인지를 알고자 참여했다.
이전과 다른점
우리 해커톤은 동아리 내에서 자체적으로 진행되는 해커톤이기에 나름 실력을 고려해 팀을 짠다. 지난 2번의 해커톤에선, 메인 백엔드가 존재하고 그에게서 배우는 역할이 컸다면, 이번 해커톤은 내가 백엔드, 프로젝트를 리드해야하는 입장이었다. 또한 7인의 팀원 중 5인이 해커톤을 처음 경험했기에 13시간동안 개발 뿐만 아니라 팀을 이끄는 역할까지 해야했다.
기술적으론, 지난 2번의 해커톤과는 다르게심사기준이 존재했고, 심사 기준엔 배포 여부, 백엔드 프론트엔드 CORS 연결 여부, Security 사용 여부 등이 존재했기에 전반적인 ERD 설계, API 명세, EC2 배포 등등 해야할 일이 많았다.
다행히 지난 코테이토 1년과 지금 진행하는 프로젝트에서 전반적인 팀장을 맡으면서 전보단 기술적으로도 협업에 있어서도 성장해있다고 생각했고 부족한 부분을 채울 수 있는 기회라고 생각했다.
프로젝트
우리는 '사랑'이라는 주제에서 단순 연인간의 사랑에서 벗어나 반려동물을 향한 사랑에 초점을 맞췄다. 이어서 반려동물 '자랑'에 초점을 맞춰 반려동물 자랑 대회 PETG: PettleGround를 기획했다.
특정 토픽에 부합하는 반려동물 게시글을 업로드하고 가장 많은 좋아요를 받은 게시글이 명예의 전당 '치킨'을 차지하게 되는 경연 시스템을 기획하고 개발했다.
위와 같은 기능명세가 나왔고 이후 백엔드 회의 결과 5개의 테이블과 총 15개 정도의 API가 나왔다. 팀원 모두 Secuirty와 배포 경험이 없었기에 나는 Spring Security와 JWT를 이용한 로그인 구현, CORS 설정, EC2 배포를 우선적으로 담당하고 백엔드 팀원들이 S3를 사용한 사진 업로드와 기본 CRUD로직 개발을 담당했다.
개발 과정
개발 과정은 생각보다 빠듯했다. 처음엔 전반적으로 배포와 설정을 담당하며 팀원들의 개발 로직을 보조해주고자 했다. 처음에 ERD와 JPA로 테이블 세팅, API 명세를 짤 때는 순탄했으나 JPA, Java에서 기초가 제대로 잡히지 않아 시간이 많이 지였되었다. 중간중간 추가되는 요구사항이 있었고 좋아요를 많이 받은 3개의 게시글을 확인하는 로직에서 양방향 매핑을 하지 않아 Join을 많이해야했다는 점, 핵심 개발 로직인 사진과 영상 업로드 기능 개발이 늦어져 프론트엔드의 연결 시도 가 늦어진 점이 아쉬웠다.
서버를 우선 배포하던 중간에 EC2의 Spring 서버 파일 프로세스를 종료하지 않고 다시 한 번 nohup 명령어로 jar파일을 실행해 중간에 프로세스를 종료하는데 상당한 시간이 걸린 점등 부족한 배포 경험도 발목을 붙잡았다.
결국 15여개의 API 중 약 9개만을 개발했고 그 중 7개만 서버에 배포되어 실제 시연 영상에서 보여줄 수 있었다.
그래도 결과는 3등..!
사실 5팀 중 3등이라 등수에 큰 의미는 없지만 그래도 안받고 넘어가는 것보단 뿌듯함이 다른 것 같다. 지난 2번의 우승보다 뿌듯한 것은 전반적으로 어느정도 구현을 한 프로젝트로 심사를 받았다는 것, 명백한 기준이 존재했을 때 성과를 냈다는 점이 성과가 쉽게 드러나지 않는 백엔드 개발자 입장에서 의미 있는 결과가 아니었을까 싶다.
배워야할 것 들
1. JPA 부족하다.
양방향, 다대일, 일대다 테이블을 깔끔하게 짰다고 생각했으나 수정이 잦았다. 게시글의 작성자와 토픽의 작성자를 구분하지 못해 Member - Post간의 매핑을 실수했다. 초기 Git을 세팅하고 브랜치를 파서 작업을 하는데 잦은 ERD 수정이 개발 속도를 더욱 더디게 한 것 같다.
또한, 연관관계 주인에게 값을 설정하지 않는 실수를 방지하고자 양방향 매핑을 지양했는데 좋아요를 가장 많이 받은 게시글 3개와 같은 요구사항을 만족하는 로직을 짜기 어려웠는데, 조금 더 Java나 JPA에 익숙했다면 쉽게 개발할 수 있지 않았을까 싶었다.
2. 정확한 명세의 필요성
중간 중간에 기능 명세가 바뀌긴했지만, 요구사항이 많아지고 토픽 등록, 게시글 등록, 반려견 등록 등 사진 + 타이틀 형식의 개발 요구사항이 증가하다보니 API간에 헷갈리는 부분들이 많았다. API를 대략적으로 설계만하고 시간이 부족하다는 이유로 정확한 명세서를 작성하지 않고 개발을 했는데 이런 부분에서 문서화를 하는 것이 오히려 개발 시간을 단축할 수 있는 방법이 아니었을까 싶었다.
또한, 프론트엔드와 API 연결을 할 때 소통함에 있어서 명세서만 보여주면 되는데 이를 말로 설명하거나 개발 중에 따로 정리하는 과정에서 시간 소모가 컸다.
3. JAVA 아직도 부족하다.
지난 2번의 해커톤과 달리 Java공부의 중요성을 알고 스터디에 참여하는 등 조금 더 자바 지식이 있는 상태로 해커톤에 참여했지만, 단순 CRUD를 넘어서 정렬과 같은 로직을 사용하는 과정에서 코드가 매끄럽게 짜지지 않았다.
개발 중에 GPT를 사용해서 코드의 도움을 받는 것도 한계가 있었고, 로직을 고민하는 시간 또한 12시간이라는 짧은 해커톤 내에선 불필요하게 개발 시간을 늦추는 과정이 아니었을까 싶다.
4. 로컬 호스트를 떠나야한다.
로컬에서 개발할 때는 PC 사양에 따라 연결도, 로직도 빠르게 처리되어 성능에 대한 고민을 하지 않았다. 하지만, 서버에 프로젝트를 띄우고 연결하고, 특히 EC2에 Java 프로세스를 2개 띄워 EC2 인스턴스가 먹통이 되었던 상황등을 고려해보면 왜 백엔드 개발자에게 빠른 성능이 중요한 요소인지 몸소 체험할 수 있었다.
지금 준비하는 프로젝트 또한 실 사용자가 존재할 프로젝트인데 로컬 호스트를 떠나 본격적인 유저가 사용을 하게 될 경우를 생각하면 얼른 로컬 호스트를 떠나 다음 부족한 점을 찾고 보완해야할 것 같다.
마치며
사실 운영진으로 기획하는 입장에서 지난 2번의 우승을 해본 결과 프로젝트의 디테일보단 발표의 중요성이 크다고 생각했다. 따라서, 발표 후 투표를 받는 부분보단, 기술적인 요소가 순위에 반영되었으면 좋겠다는 생각이 들었고 이번에 기술적인 심사기준과 디테일한 심사표를 만든 점이
지난 2번의 해커톤과 비교해보면 부원들 실력이 전보다 향상 되었다는걸 새삼 느꼈다. 이전 2번의 해커톤은 구현을 하지 못하거나 연결이 되지 않는 팀이 많았는데, 이번엔 참가한 5개의 팀 모두 모든 API를 연결하진 못하더라도 로그인 + 일부 로직 연결을 완료했다. 또한, 프론트엔드 코드 배포는 실패했지만 모든 팀들이 서버를 띄우고 적어도 요청은 서버파일로 보낸 결과도 큰 발전이었다.
8기를 시작하며 코테이토의 핵심 가치인 '성장'을 할 수 있는 기수를 만들고자 노력했는데, 해당 부분에서 부원 모두가 성장하고 있는 것 같아 운영진으로서 꽤나 뿌듯했다.
해커톤을 마치고 참가한 부원들과 이야기를 나눈 결과 몇시간만 더 있었으면.. 하는 시간이 부족하다는 후기가 대부분이었다. 그만큼 모든 부원이 열정적이었고 실제로 조금 더 시간이 있었다면 꽤 좋은 프로젝트를 보지 않았을까 싶었다.
다음 해커톤은 조금 더 많은 시간을 준비해, 조금 더 완성된 프로젝트를 볼 수 있었으면 좋겠다.
이번이 마지막이겠다 생각하면서도 참가한 해커톤은 너무 유익했고 이번엔 많은 것을 얻어가지 못할 것이라 생각했는데 또 많은 배울점을 남긴 의미 있는 시간이었다. 이 점들을 잘 보완해서 현재 진행하는 CS Quiz 프로젝트 완성까지 더 힘내봐야겠다.
다들 고생했다!
'활동 > cotato' 카테고리의 다른 글
IT동아리에서 운영진으로 성장하기 - (2) (2) | 2024.08.27 |
---|---|
IT동아리에서 일반 부원으로 성장하기 - (1) (4) | 2024.08.27 |
IT연합동아리 코테이토 교육팀 활동 회고록 (0) | 2024.03.11 |
제 1회 코테이토 해커톤 후기 -(2) (0) | 2023.07.03 |
제 1회 코테이토 해커톤 후기 -(1) (0) | 2023.07.03 |