5월 20~21일 참여했던 솝커톤이 너무 좋은 기억으로 남았기에 티켓팅부터 수상까지 당시의 경험을 상세히 기록하고자 이렇게 회고를 적으려합니다.
솝커톤이란? 💬
솝커톤은 대학생들이 모인 국내 최대 규모의 대학생 연합 IT벤처창업 동아리인 SOPT에서 내부적으로 개최하는 해커톤입니다!
큰 가능성과 수준 높은 실력을 가진 사람들이 많이 모이는 튼튼한 동아리인 만큼 내부에서 다양한 행사를 진행하는데,
솝커톤도 그 중 하나입니다.
티켓팅 🎟️
저는 활동 기수라면 아무나 참가할 수 있다고 생각했는데, 그렇지만은 않았습니다.
솝트는 활동기수(YB, OB)와 비활동 맴버가 존재하는데 비활동 중이어도 참여할 수 있는 행사는 ‘티켓팅’을 통해 참가 신청이 진행되고 있었습니다.
(만약 너무 바빠서 언젠가 비활동 맴버로 활동 하게 되더라도 솝커톤, 엠티 등 각종 행사 등은 참여할 수 있다는 점이 너무 좋았습니다.)
티켓팅은 솝트의 모든 인원이 참가할 수 있다보니, 네이비즘으로 시간을 측정하면서 신청하는 인원도 있을 정도로
이해하기 쉽게 비유하자면 대학 수강 신청 급이었습니다.
열정 가득한 우리 서버파트는 26명을 지원받는 티켓팅이 거의 7초만에 마감 되었는데,
운 좋게도 저는 그 안에 들었습니다 ✌️
팀 빌딩 🫂
팀 빌딩은 신청 시에 지원한 분야(IOS / 안드로이드 / 웹)에 따라 가능한 원하는 곳으로 배치 되었습니다!
본인은 앱 개발 팀으로 지원하였고, 안드로이드 팀인 🌸9조🌸 로 배치 되었습니다.
팀 구성은 [기획2 / 디자인 2 / 안드로이드 4 / 서버 2] 이렇게 총 10명이었으며,
이들과 협력하여 16시간 동안 하나의 서비스를 구축해야했습니다!
생각보다 인원도 많고 고수분들도 많이 계셔서 든든했습니다!☺️
ZOOM을 통한 킥오프 🗣️
🌈 서로 이번 솝커톤에서 바라는 점 나누기
반가운 자기소개와 인사 시간을 가진 후, 이번 해커톤에서 바라는 점을 나누며 서로 이번 솝커톤에서의 목표와 이루고싶은 점에 대해 이야기하는 시간을 가졌습니다.
본인는 기획자가 함께하는 프로젝트가 처음이다보니 너무 든든했고, 함께 탄탄하고 실용적인 프로젝트를 기획하여 솝커톤에서 끝내지 않고 점진적으로 디벨롭하여 다양한 공모전, 대회 등에 출품했으면 좋겠다는 의견을 전달했습니다!
또한 일회성으로 쓰이고 버려질 코드가 아닌 유지보수가 가능한 객체지향적이고 클린한 코드로 개발할 것을 다짐했습니다.
🔥 “‘이 파트’가 ‘이것’만큼은 꼭 해줬으면 좋겠다!” 나누기
과거 유니톤에 참여했을 때, 각 파트 별로 정해진 아이디어에 대해 서로 다른 방향으로 이해하여 프로젝트가 산으로 가는 경험이 있었기에 기획분들이 2시간마다 아이디어를 리마인드 할 수 있도록 이끌어주시기를 부탁드렸습니다!
서버 파트는 API문서를 최대한 깔끔하고 이해하기 쉽도록 만들어보기로 약속하였습니다!
마지막으로 안될 거 같은 기능은 처음부터 안 될 것 같다고 말하고 할 수 있는 것들만 확실히 잡고 가기로 정하였습니다. 이건 정말 중요한 내용이며 실제로 이전 솝커톤 당시, 개발 마감 시간이 7시 30분이었지만 서버파트에서 마감 30분 전인 7시에 기능 구현이 불가능함을 통보하였고, 이 때문에 클라이언트 측이 너무나도 고생한 적이 있었다고 합니다.
☀️ 그라운드 룰 정의하기
서로 할 일에 집중하느라, 잊고 가는 부분이 있을 수 있겠다 싶어 그라운드 룰을 정의하였습니다.
저희가 정한 그라운드 룰은 1시간에 한 번씩 스크럼하기 입니다!
아무래도 개발만 계속 진행하는 것이 아니라
솝커톤 중간 과제 제출을 했는가, 서로 어디까지 개발되었는지 알리기 등이 필요했기 때문에
기획파트의 담당 하에 1시간마다 스크럼을 진행하기로 하였습니다.
실제로 스크럼 덕분에 솝커톤 중에 지속적으로 팀원들의 진행상황을 브리핑 받을 수 있었고,
대화 도중 서로 다르게 이해하고 있던 내용이나 소통이 필요한 부분을 발견할 수 있어 굉장히 유익했습니다! ⭐️
뿐만 아니라, 여럿이 함께 하는 일이다보니 서로를 배려하는 분위기를 조성하기 위해 이러한 내용에 대해서도 이야기했습니다!
저희 9조는 여기 있는 모든 내용을 지키며 평화롭게 솝커톤을 진행했습니다 🙂
💼 준비물 정하기
팀원들과 함께 필요할 준비물에 대해 얘기하고, 나눠챙길 것과 각자 챙겨야할 부분들에 대해서도 나열하였습니다!
기획분들이 정말 대단하다고 느낀게 이런 내용들을 노션에 너무 이쁘게 잘 정리해주셔서 멋지고 감사했습니다!! 😌
🍛 솝커톤 시작 전 첫 식사
대망의 솝커톤 당일 든든하게 배를 채우기 위해
세미나가 끝나고 4시반쯤!
팀원들과 부대찌개&삼겹살을 파는 식당에 갔습니다!
너무너무 맛있었는데, 부대찌개 라면이 무한리필이어서 계속 넣다보니 부대찌개가 점점 그냥 라면으로 변해가던 게 아직도 기억에 남습니다🤣
+그리고 삼겹살에 소주를 못 참겠다는 팀원들에 의해 간술도 해버렸습니다..(살짝 아차차 싶긴했는데 결국 본인도 맥주 한잔 마셨습니다😁)
다 먹고 솝커톤 장소로 이동하면서 요런 기여운 4컷사진도 찍었습니다:)
저희 9조 너모 기여워요!!!! 쵝오!!🫶🫶
🏡 장소 도착
목걸이 이름표가 솝트에 소속감을 더해줘서 너무 좋았고 당 떨어질 때 먹으라고 챙겨주신 꿀!
너무너무 감사하고 센스있었습니다🍯
+이름표 안에는 이번 솝커톤 이름인 “Hello, World”가 적힌 귀여운 스티커도 넣어주셨습니다! 솝트 활동 진짜 풀만족..
솝커톤 시작 🏁
📃 주제 선정
주제는 솝커톤이 시작하고 공개되었는데요!
다음과 같은 주제에서 저희 팀은 앱 개발팀이기 때문에
서울시의 사회 현안 키워드 해결을 주제로 진행하게 되었습니다!
📚 과제 확인
솝커톤의 가장 재밌는 점 중 하나는, 중간 과제가 있다는 점이었습니다!
주구장창 개발, 디자인, 기획만 하는 것이 아닌 ”n시 까지 이 정도 내용은 끝나 있어야 한다.” 라는 것이 과제로 정의되어있어 더욱 긴장감과 책임감을 가지고 열심히 임하도록 만들어주는 도구로 작용했습니다!
또한 실수하지 않도록 신중한 과제 제출을 위해 집중하다 보니, 졸리고 피곤한 것도 잊게되는 굉장한 경험을 했습니다..!
💡 아이디어 구상
과제 확인과 정리를 끝낸 뒤에 바로 아이디어 구상으로 넘어갔습니다.
마련된 책상이 너무 길어서 서로의 목소리가 잘 들리지 않아서
바닥에 모여앉아 옹기종기 모여 같이 아이디어 회의를 진행하는 모습입니다 😭
아이디어 회의 도구로는 피그잼 을 사용하였습니다.
노란 종이에는 주제를 적고, 분홍 종이에는 각자의 아이디어를 적으면서 괜찮은 아이디어를 찾기 위해 머리를 맞대고 고민했습니다.
또한 스케치북을 통해 자신의 생각을 이미지로 구체화하여 사람들과 공유했습니다.
해당 과정 도중, 본인은 기상 및 재난안전 카테고리에 꽂혀 관련 사고를 생각해보던 중,
작년 폭우로 인해 지하 주차장에서 많은 사람들이 안타깝게 돌아가신 사건이 떠올랐습니다.
뿐만 아니라 세월호, 대구 지하철 화재 사건, 이태원 참사 등 사람들이 안전 수칙을 인지하고 있었더라면 피해를 훨씬 감축시킬 수 있었을 사건들이 많이 있었습니다.
이러한 생각으로부터 시작된 저희의 서비스 아이디어는 대화를 통해 점점 단단해졌습니다.
초등학생 시절부터 고등학생때 까지 무수히 많은 재난안전교육을 받지만,
항상 집중하지 않고 대충 흘려보내는 문제점과 성인이 되면 재난안전교육을 들을 기회가 거의 없다는 문제점을 해결해보고자
팀원들과 의견을 나누었습니다.
그리고 멋진 9조 친구들은 의견들을 종합하여 재난에 대한 안전 수칙, 대응법 등을 딱딱하고 무거울 수도 있을 법한 주제를
대화형 시뮬레이션 방식으로 재미있게 풀어낼 수 있는 게임 형태로 구체화시켰습니다!
팀원들도 모두 만족했고, 이에 대한 아이디어 구체화 작업을 통해 재난상황 대비 교육 서비스 ‘큐잉’이 탄생하였습니다 ✨
큐잉은 "rescue"의 어원 "cue"에서 차용하여, 사용자에게 대피의 단서를 준다는 의미를 가졌습니다!
또한 저희 팀은 재난 대응법 교육 서비스를 개발할 예정이기도 하고, 마침 조가 구조(9조)였기 때문에
조 이름은 자연스레 '9조를 9해줘' 가 되었습니다ㅋㅋ
📑 협업 룰 정의 및 배포
아이디어를 굳히고 기획 파트에서 와이어 프레임이 완성될 때까지 서버 파트는 개발이 불가능하기 때문에
다음과 같은 협업 룰 정의 작업을 진행했습니다.
- 커밋 컨벤션 정의
- 이슈 컨벤션 정의
- 브랜치 네이밍 컨벤션 정의
이러한 규칙을 정의하지 않는다면 누가 어떤 커밋을 했는지, 어떤 작업을 수행했는지 시간이 지나면 알 수 없고
개발 중에도 서로가 무슨 작업을 하고 있는지 알 수 없기 때문에 꼭 필요한 작업이라고 생각합니다.
추가적으로 이 시점에 서버 배포 환경 세팅도 진행하였습니다.
짧은 기간의 해커톤이기 때문에 간단히 EC2와 RDS만 사용하여 배포 환경을 구축하였습니다.
🗺️ 설계
아이디어 회의가 20분 정도 지나니 기획 측에서 와이어프레임이 완성했습니다.
(진짜 너무 빠른 속도에 감탄했습니다.. 기획파트 그저 빛✨)
와이어프레임이 완성된 이후로 이를 바탕으로 개발팀원들과 기능 분리 작업을 시작했습니다.
시간 내에 완성하기 어려울 것 같은 부분은 안드로이드 측에서 만들어주고,
이 외에 기능은 API로 데이터를 받아 사용하기로 하였습니다.
개발팀에서 얘기한 사항과 수정이 필요한 와이어프레임은 기획파트에 전달했고,
프로들 답게 곧바로 수정이 이루어져 정말 빠른 속도로 설계 단계가 진행되었습니다.
ERD 설계 🫧
함께하는 서버 파트원과 와이어프레임을 분석하며 곧바로 ERD 설계에 돌입하였고,
볼륨이 작은 해커톤 프로젝트이다보니 금방 설계를 완료할 수 있었습니다.
(설계는 ERD 클라우드를 사용하였습니다.)
API 문서 작성 📃
와이어프레임과 ERD를 토대로 API 문서도 작성하기 시작했습니다.
이때, 바로 API 문서를 작성하는 것이 아닌
기능명, 기능의 구체적 동작, HTTP Method, request 데이터, response 데이터 를
먼저 생각하고 정의해본 뒤에 문서 작성을 시작했습니다.
그렇게해서 만들어진 API 문서입니다.
함께 서버 개발을 담당한 친구가 가지고 있던 API 문서 양식을 토대로 개발하였는데,
틀이 잡혀있는 템플릿을 사용하니 문서 또한 금방 작성할 수 있었습니다.
그리고 이때 협업의 장점을 다시 한 번 느낄 수 있었습니다! 🫂
ERD를 보며 엔티티 설계, API 문서 작성 두 가지 업무를 나눠서 하니 업무가 훨씬 수월하고 빠르게 진행되었습니다.
혼자라면 오래걸리고 문제가 생길 수도 있는 것들을 서로 보완해주며 협력하는 일은 언제나 유익하고 소중한 시간이 되는 것 같습니다!
💻 개발 시작
설계가 끝난 이후, 대략 새벽 1시 쯤부터 최종 설계를 바탕으로 기능 구현을 시작했습니다.
구현할 API가 총 4개 정의되었는데,
아직 서버 개발에 대한 개념이 자리잡는 중인 팀원에겐 API 1개를 부탁하고,
본인이 3개를 책임지고 개발에 들어갔습니다.
사실 프로젝트 개발에 있어 개발자 모두가 공평한 경험을 하는 것이 옳다는 생각을 가지고 있었지만,
짧은 시간내로 개발을 완료해야했기 때문에 아쉽지만 이렇게 정하고 개발하였습니다 😢
중간에 미디어팀이 오셔서 저희 팀원들 사진을 찍어주고 가셨어요!
저희 팀명은 '9조를 9해줘' 이기 때문에 양손을 모아 비는 제스쳐를 취하고 있습니다ㅋㅋㅋ
🥪 중간 간식
4시반 쯤 저녁 식사를 하고 그 뒤로 개발만 하고 있자니 배가 굉장히 고파왔는데,
솝트는 역시 프로 중에 프로 동아리 였습니다.
센스있게 홍루이젠 샌드위치를 미리 준비해두셨습니다 ㅠㅠ 🥪
덕분에 배를 채우고 행복하게 개발을 이어갈 수 있었습니다 ☺️
🥱 팀원들과 중간 휴식
중간에 팀원분이 “포토부스로 사진찍자!!” 라고 하셔서
암것도 모르는 저는 “?? 여기 포토부스도 있어요?!”라고 했는데
맥북의 포토부스였다는 일화를 담은 사진입니다.
💻 서버 개발 완료
서버 파트가 클라이언트보다 2시간 정도 개발 종료 시간이 빨라서 개발이 끝난 섭팟 사람들과 잠시 쉬는 시간을 가졌습니다.
잠시 휴식 후엔 고생하고 있을 클라, 디자인, 기획 팀원들에게 돌아가
요구사항이나 문제 사항이 있는 지 물어보고 서로 도울 수 있는 것들을 도와가며 모든 개발이 종료될 때까지 노력했습니다.
EC2 배포 서버 종료 이슈 🚨
중간에 EC2에 배포한 서버가 메모리 부족으로 종료되는 이슈도 발생했었습니다.
역시 끝났다고 쉴 것이 아니라 계속해서 점검하는 것이 중요하다고 다시 한번 깨달을 수 있었던 경험이었습니다.
메모리 부족 문제로 팅기던 서버는 EC2를 재시작 후, jar 파일을 실행 시에 -Xmx512m 옵션을 덫붙여 해결하였습니다.
nohup java -jar Xmx512m jar파일명.jar &
Xmx 옵션은 jar 파일이 가질 수 있는 최대 동적 메모리 설정 옵션입니다.
처리하는 쓰레드가 많거나, 메모리에 들고있어야하는 데이터가 많은 경우에 크게 잡아주면 됩니다.
우리 서버는 512MB 면 충분하기 때문에 'Xmx512m' 옵션을 붙여주었습니다.
🏃🏻 솝커톤 종료
개발, 발표자료가 모두 종료되었을 때 운영진 측에서 띄워준 화면이었습니다.
진짜 우리 개발팀 여러 이슈도 있었지만 포기하지 않고 끝까지 열심히 해줘서 너무 고맙고 피곤했을텐데
끝까지 디자인 수정하고, 발표준비하고 보조하느라고 여러모로 고생한 디자인팀, 기획팀도 정말 너무너무 고맙고 수고 많았어요 😭
🌸 9조가 최고다!!!!! 🌸
프로젝트 발표 및 투표 🗣️
프로젝트 발표는 기획의 리드로 함께한 다민 양이 아주 멋진 딕션으로 담당해주었습니다!
밤을 새느라고 피곤했던 참가자분들이 많이 졸고 있었기 때문에
발표에 대한 어텐션을 끌어올리기 위해 우리 9조도 열심히 화력을 지원했습니다!
“다민아 9조를 9해조~!!” 응원 멘트 발사와
실제 재난 상황에 대해 설명할 때, 안드 파트의 태희형과 함께 벌떡 일어나서
“(두리번두리번) 부,,,불이야!!!!”
를 외쳐 이목을 끌어주었습니다..!ㅋㅋㅋ
결과 발표 및 수상 🏆
성공적인 퍼포먼스와 발표 그리고 이를 뒷받쳐 준 개발,디자인,기획..
모두가 서로 배려하며 노력해준 덕분인지 운 좋게도 안드로이드 부문 대상을 수상할 수 있었습니다ㅠㅠ
저번 솝커톤은 절대평가로 대부분 수상했다고 하지만, 이번 솝커톤은 상대평가로 상을 주는 비율이 상당히 낮아졌습니다.
그럼에도 불구하고 대상 수상 해버린 우리 9조!! 너무 듬직하고 멋있습니다! 🌸
팀워크도 너무 잘 맞았고, 소통도 빠르고 원활했습니다! 무엇보다 너무 재밌었습니다!
모든 것이 완벽했던 9조,, 제가 정말 아낍니다:)
솝커톤이 끝나고 💬
(너무 고생한 우리 섭팟 멋쟁이들 사진도 한 장)
🌸 이뤄낸 점
- 세미나를 통해 배운 AOP를 사용한 예외처리를 이번 솝커톤 프로젝트에 적용해보고자 하였던 목표를 달성할 수 있었습니다!
- 일회성 코드가 아닌 유지보수가 가능한 클린 코드로 개발하고자 다짐했는데, 이 부분 또한 최대한 노력하였고 달성했다고 생각합니다!
- 깃허브에 이슈 컨벤션을 등록해볼 수 있었습니다. 솝트의 클/디/서 합동 세미나 과정에서 Pull Request 컨벤션을 깃에 정의하고 이를 풀리퀘스트 생성 시, 자동으로 입력되도록 설정할 수 있다는 것을 배웠습니다. 때문에 이와 비슷한 컨벤션들도 자동으로 입력되게 구현할 수 있을 것이라 생각하였고, 간단한 학습을 통해 자주 사용하는 이슈 기능에 대한 컨벤션을 자동 입력되도록 설정하여 가시성 높은 이슈를 작성할 수 있었습니다.
- “클라이언트 측에서 이해하기 쉬운 API 문서를 작성하자”라는 다짐을 이뤄냈습니다.
필요한 데이터와 데이터 타입, 요청 형태, HTTP 메서드 뿐만 아니라 요청 예시, 응답 예시, API 정상 작동 테스트 이미지 등 구체적인 내용들 또한 문서에 추가하여 클라이언트 측에서 API 사용에 어려움을 느끼지 않도록 이끌었습니다.
실제로 API 사용법에 관련한 질문을 거의 받지 않았습니다! (다행,,)
💭 아쉬운 점
- Pull Request 컨벤션 등록을 하지 못한 것이 아쉬웠습니다.
클라/디자인/서버 합동 세미나 과제 중, 팀원에게 Pull Request 컨벤션을 정의하고 Pull Request 시에 자동으로 지정한 컨벤션이 입력되도록 설정하는 법을 배웠는데 시간이 부족하여 이를 적용해보지 못한 것이 아쉬움으로 남았습니다. 코드 유지보수 작업을 시작하면 그때 꼭 등록하고자 다짐하였습니다. - 앱 측에선 GET 메서드로 서버에 요청 시, 요청 값을 Request Body에 넣어 보낼 수 없었는데,
이 부분을 Body로 보내도록 설계하여 클라이언트 측에서 혼란을 겪게 만들었습니다.
다신 이런일이 없도록 Http Method 통신에 대해 복습하기로 다짐하였습니다.
💡 느낀 점
- 바로 옆에서 타 파트원들과 마주보고 프로젝트를 수행하며, 다른 파트의 고충을 충분히 이해할 수 있었습니다.
특히 클라이언트 측의 작업 시간과, 기획 파트의 시나리오 구상에 대한 노고, 계속해서 수정이 들어가던 디자인 파트의 반복 작업 등 16시간 동안 작업의 시간을 함께하며 서로의 노력과 고생을 이해할 수 있었던 소중한 시간이었습니다. - 협력의 소중함을 느낄 수 있었습니다.
서로 어려운 부분에 대해선 보완해주며,
내가 A를 할 때 그 동안 B를 누군가 해주고 있으니 생각만으로도 든든했습니다.
동료의 소중함, 협력의 장점을 모두 느낄 수 있었던 소중한 시간이었습니다.
글을 마치며.. 💬
솝트에 들어온지 얼마 되지 않았다고 느껴지지만 어느덧 벌써 솝커톤이 끝나고 공식 활동을 2차 행사와 앱잼만 남아있다는 것을 생각하니 너무 아쉽고 시간이 빠르게만 느껴집니다.
능력있고 멋진 솝트 사람들과 함께하는 매 순간들이 저에게는 항상 영광이고 행복합니다!
왜 이렇게 사람들이 솝트 활동 후기에 아쉬움을 가득담아 적는 지, 저도 이제는 이해가 가고 있습니다.
아무래도 몇 기수 더 하게 될 거 같네요 ㅎㅎ,,
솝트! 항상 감사하고 앞으로도 열심히 해보겠습니다!! GO 솝트!🔥
🗃️ Github
https://github.com/SOPKATHON-9th/SERVER
'외부활동 > 동아리' 카테고리의 다른 글
[SOPT] 라이온하트 2차 회고, 그리고 솝트 32기 회고 (0) | 2023.08.03 |
---|---|
[SOPT] 앱잼, 라이온하트 개발 중간 회고 (1) | 2023.07.23 |
[SOPT] 솝트 32기 서버 파트 지원 및 합격 후기 (4) | 2023.03.26 |
[DND 후기] 사이드 프로젝트 동아리 DND 6기 활동 후기 (3) | 2022.03.01 |
[DND] 걱정 기록 서비스 - 중간 회고록 (0) | 2022.02.07 |