▼ Why ?
대학 생활하면서 아는 사람들과 해커톤을 한 번 참여해보는 것이 버킷 리스트 중 하나였고 GDSC를 들어오고자 했던 가장 큰 이유 중 하나이기도 했다. 비록 이번에 참여하게 된 해커톤은 아는 사람들이 아닌 모르는 사람들과 팀을 구성해 진행하는 것이긴 했다. 하지만 처음 만난 사람들과 함께 약 24시간동안 프로젝트를 진행하여 완성하는 것이 사실 해커톤이 아니면 경험해볼 수 없는 것이었기 때문에, 그만큼 새로운 것을 얻어갈 수 있는 값진 기회라고 생각이 들어 참여하지 않을 이유가 없었다. (근데, 지원하고 보니 우리 학교 GDSC에서 지원한 사람이 나랑 한 분 빼고 없었다는 게 이해가 안됐는데 참여해보니까 다들 왜 피했는지 알 것 같은 느낌..)
▼ 팀 프로젝트 & 회고
Influence : 예방 접종 앱
- 해커톤의 주제 ?
- UN의 지속가능한발전목표(SDGs)
- "사랑"
- "다짐"
- "예방 접종" 페이스메이커
➙ 최근 들어 독감 감염자 수가 급격하게 증가하고 있다.
➙ 대표적인 백신의 종류 중 하나인 '독감(flu)' 예방 접종의 촉진과 가족, 친구, 지인에게 선한 '영향(influence)'을 준다는 취지에서 애플리케이션명을 "Influence"로 정하였다.
- 애플리케이션 페이지별 기능 상세
- 간단한 로그인/회원가입
- 메인 페이지
"자신이 맞아야 하는 백신을 쉽게 확인할 수 있도록 하자 !"
➙ 올해 맞아야 하는 백신과 이미 맞은 백신들을 한 눈에 볼 수 있도록 메인 페이지에 리스트업한다.
"맞춤형 예방 접종 관리 앱을 만들자 !"
➙ 개인별로 등록한 특이사항에 따라 접종받을 수 있는 백신만 필터링한다.
"코로나가 유행하던 시기에 주변 사람들이 상당히 아파하는 것을 보고 백신을 맞으려는 사람들도 많았다."
➙ "아파요.." 버튼을 만들어 자신이 특정 질병에 걸렸을 때 자신의 아픈 정도를 친구로 등록된 사람들에게 코멘트로 전송하여 주의 의식을 심어준다.
"투두리스트처럼 성취감을 심어줄 수 있으면 좋을 것 같다."
➙ 자신이 이번년도에 맞아야 하는 백신을 접종받은 만큼 퍼센트로 달성률처럼 나타나게 한다.
"친구 추가"
➙ 가입할 때 등록한 이메일을 입력하면 친구로 추가 가능하도록 '단방향'으로 구현. - 백신 상세 페이지 ('웹 크롤링'을 통해 가져온 데이터를 이용)
"질병관리청에 모든 정보가 나와있지만 접근성이 너무 떨어진다."
➙ 백신을 선택했을 때 해당 백신과 밀접한 관련이 있는 질병에 대한 정보와
"가족, 친구, 지인이 필요한 백신을 맞을 수 있도록 독려해줄 수 있는 기능이 필요할 것 같다."
➙ 해당 백신을 맞은 친구와 맞지 않은 친구로 구분하여 리스트업하고, 친구의 아이콘을 클릭하여 "찌르기"를 할 수 있도록 한다. - 백신별 지역 접종률 리스트 페이지
"코로나가 유행할 시기에도 보면 해당 지역에 감염된 사람이 많다는 통계를 보고 백신 접종률이 점차 높아진 이유가 무엇일지 생각해보자 !"
➙ 백신마다 전국에서 지역별로 접종받은 시민들을 퍼센트로 나타내 해당 지역 시민들에게 '사회 의식'을 심어주자. - 마이페이지
"게임 캐릭터를 키우는 것처럼 자신의 접종률에 따라 자신의 캐릭터가 성장하도록 보여주면 좋을 것 같다."
➙ 가입할 때 자신의 프로필 사진으로 등록할 식물 이미지를 선택하는데, 달성률이 높아질수록 식물이 자라나는 이미지로 변경되게 하자.
- 간단한 로그인/회원가입
- 데이터베이스 스키마(scheme)
- 아쉬웠던 점
- 대개의 경우 시간이 부족해서 구현을 포기하였다.
- 특이사항에 따른 백신 필터링
➙ 이 부분까지 고려하게 되면 테이블도 너무 많아지고 필터링하는 로직도 구현하기에 복잡한 것 같아 판단해서 과감하게 버리게 됐다. 필터링 관련된 기능을 구현해본 적이 없어서 나와 같이 백엔드를 맡으신 분이 작성하신 것을 보면서 어떻게 구현해야 하는지 대강 알아갈 수 있었으면 좋을 것 같지만 시간이 부족했다.. - 코멘트
➙ 이 기능은 친구들이 해당 질병에 관한 백신을 접종하는 데 도움을 줄 수 있는 필요한 기능이었지만, 급하게 개발을 하다보니 이 기능을 빠뜨린 걸 나중에야 알게 되었다. - 지역별 접종률 퍼센트
➙ 지역적인 사회에서 접종에 대한 의식을 키워준다는 점에서 이 프로젝트의 취지에 걸맞는 기능이었는데 다른 기능의 완성도를 높이기 의해 포기했다.
(사실 해당 지역에 사는 모든 시민들의 데이터가 있어야 의미가 있을만한 지표라는 의견이 이 기능을 포기하게 됐던 가장 큰 이유이긴 했다.)
- 특이사항에 따른 백신 필터링
- 데모 영상
influence-android_demo copy.mp4
4.00MB
- 백엔드 기술 스택
- Spring JPA, Spring Security, JWT, MySQL, GCP
회고
- 아이스브레이킹을 통한 주제 구상부터 해서 UI 와이어프레임과 디자인 그리고 필요한 기능을 구현하는 동시에 협업까지 해야 하다보니, 내가 작년에 했던 프로젝트를 하루 안에 압축한 느낌이 들었다. 그러다보니 내가 전반적인 개발 능력과 프로젝트 협업 경험이 얼마나 부족한지 느낄 수 있었던 시간이었던 것 같다.
- 정말 운이 좋았고 해커톤을 참여하기를 잘했다고 생각했던 부분이 같은 팀원분들 중에 현재 토스에서 안드로이드 개발자로 일하시든 분이 있던 것이었다. 안드로이드를 개발하시지만 백엔드에서 어떤 api를 전송해야 할지도 많이 조언해주시고 개발 이외에도 기획부터 발표 자료 준비까지 순조롭게 진행되는 느낌을 받았고, 솔직히 우리팀이 최우수상을 받는데 매우 큰 역할을 하시지 않았나 싶다. 프로젝트 이외에도 개인적으로 많은 조언을 받을 수 있었는데, 기억에 남는 건 개인 프로젝트를 많이 해보고 가능하다면 실제로 서비스까지 해보며 실사용자들과의 경험을 쌓아보라는 말이었다. 그래서 졸업하기 전까지 실사용자들까지 받아보는 프로젝트를 해보겠다는 목표를 세우게 됐다. (밤을 새고 팀원들 다같이 멍 때리고 있었는데 갑자기 3등도 아니고 2등도 아니고 최우수상 팀으로 우리팀이 불리니 진짜 얼떨떨했다..)
- 해커톤을 하면서 개발적인 측면에서 가장 어려웠던 점은 어떠한 기능을 구현하기 위해 필요한 데이터를 생각하고 RDS 관계를 설계하는 부분이었던 것 같다. 일단 api를 작성하는 과정에서 DB 스키마에서 미처 생각하지 못했던 필요한 데이터들이 생각보다 많이 나왔다. DB 스키마를 완벽하게 설계했다고 하더라도 개발하면서 요구사항에 맞게 조금씩 수정하게 되는건 당연한 것이지만, 그걸 감안하더라도 스키마를 짤 때 구상한 비즈니스 로직에 따라 좀 더 딥한 부분까지 고려하는 능력이 부족한 것 같다는 것을 느꼈다. 그래서 하나의 프로젝트를 하더라도 스키마를 보다 정교하게 설계하기 위해 보다 많은 고민을 해볼 필요가 있을 것 같다.
- 사실 지금의 나로썬 구상한 로직에 따라 코드로 구현하는 능력을 키우는 것이 가장 우선적이긴 하다. 주제 선정, 기능 구상, 데이터베이스 스키마, 엔티티 작성까진 순조롭게 참여할 수 있었지만, 비즈니스 로직에 따른 세부적인 구현을 짧은 시간 내에 해내려니 너무 막막하고 많이 부족하다는게 느껴지면서 1인분이라도 해야된다는 강박감이 너무 컸다.. 그래서 "(1)메인 화면에서 맞아야 하는 백신 리스트들 띄우기", "(2)어떤 백신을 클릭했을 때 관련 질병 정보와 해당 백신을 맞은 친구와 맞지 않은 친구 정보 띄우기", 총 두 가지 기능이 문제없이 작동할 수 있도록 api를 작성하는 데에만 집중했던 것 같다.
- 협업할 때마다 느끼는 것이지만 깃 사용이 익숙하지 않아서 그런지 깃 충돌을 해결하고 푸쉬하는게 아직 너무 어려운 것 같다. 내가 맡은 두 기능이 사실 메인 기능이라고 할 수 있었는데 충돌을 해결하려다 작업한 파일이 다 날아가버리는 사고가 났을 때 머리가 하얘졌다.. 그래도 인텔리제이 IDE 자체에서 갖고 있는 로컬 히스토리애서 날아간 파일을 가져와 복구할 수 있었다. 이번에도 그렇고 매번 충돌 해결에 어려움을 겪었던 이유를 생각해보면, 많은 사람들 혹은 많은 파일들을 커밋할 때까지 로컬에서 작업하다가 작업한 파일들을 한 번에 올릴 때 충돌이 나면서 해결해야 될 부분들이 너무 난잡해졌 것 같다. 따라서 여기서 얻은 교훈은 "커밋을 자주 하는 습관을 들이자 !"이다.