2022년 2학기에 학부 캡스톤 디자인 프로젝트를 회고하는 글이다.
프로젝트 개요
내가 이번 프로젝트에서 팀장으로 선정되어, 3명의 팀원과 함께 안드로이드 애플리케이션을 개발하게 되었다.
우리 팀은 프로젝트의 주제를 결정하기 위해 회의를 진행하였는데, 주제를 정할 때 애로사항이 많았는데, 의견이 없거나, 의견은 있는데 개발 난이도가 높은 의견이 나왔다.
개발 난이도가 높은 의견 중에 대표적으로 중고거래 앱이였는데, 팀원 중 서버 경험자, 안드로이드 경험자가 둘 다 없었기 때문에 팀에 부담이 크다고 생각해서 기각하였다.
다른 주제를 고민하던 중, 전에 아플 때 어떻게 대처해야 할지, 어느 병원을 가야 할지 몰라 고생했던 기억이 났고, 이를 제안하여 응급상황시 도움을 줄 수 있는 앱을 만들기로 결정하였다. 이 프로젝트의 이름은 메디앱으로 정하였다.
핵심 기능으로 4개를 정하였는데 아래와 같다.
1. 부위별 증상과 대처
부위별 증상과 대처는 신체중 아픈 부위를 선택하면 그 부위에 해당하는 병과 통증을 리스트 뷰로 보여주어 해결방안을 보여주는 화면이다.
시작 페이지에서 부위를 고르고, 리스트뷰에서 병명을 찾아 클릭하면, 해당 상황의 해결방안과 가야 하는 진료과를 추천해 준다.
진료과 버튼을 누를 시 현재위치와 가까운 병원들들 검색해준다.
2. 응급처치 리스트
응급처치 리스트는 급박한 상황들을 모아놓아 해결방안을 보여주는 화면이다.
3. 질병 검색
질병 검색은 보편적인 혹은 부위별로 나누기 힘든 질병들의 해결방안을 보여주는 화면이다.
4. 병원 검색
현재 위치에서 필요한 가까운 병원들을 지도에 띄워주는 시스템이다.
자신의 위치를 기반으로 가장 가까운 병원들의 위치를 카카오맵에 핀으로 보여주고, 핀을 클릭 시 해당 병원의 정보를 대화상자에 출력한다.
아래 "가까운 병원"슬라이더를 통해서 리스트로 확인할 수도 있다.
프로젝트 진행과정
총 2개월에 걸쳐서 프로젝트를 진행하였고, 내가 개발 총괄 및 팀장을 맡았다.
UI 및 와이어프레임 설계 (2주): 프로젝트 시작 단계에서는 UI를 구상하고, 카카오 오븐을 활용하여 와이어프레임을 구현했습니다.
(파일은 날아갔지만...)
기초 앱 개발 (2주): 이후 2주 동안 리스트뷰의 구현과 컴포넌트 구현을 통해 앱의 기반을 구축하였습니다. 이때 ConstraintLayout와 리사이클러 뷰를 학습하고 활용하여 화면을 구현하는 것이 매우 흥미로웠습니다.
안드로이드 - 리사이클러 뷰(RecyclerView) 구현
데이터 연동 및 API (3주): 다음 3주 동안은 공공데이터 포털의 오픈 API를 활용하여 병원 정보를 호출하고 정제한 뒤 출력하는 작업과, 카카오 맵 API를 사용하여 애플리케이션에 지도로 병원의 위치를 제공하는 기능을 개발하였습니다.
마지막 테스트 (1주): 마지막 1주는 앱의 최종 테스트를 진행하였습니다
시행착오
크게 2가지의 이슈가 있었다.
1. 카카오 맵 API를 받아올 때 맵 대신 회색화면만 보이는 현상
지도 API를 배치하면 지도가 나와야 하는 데 아무것도 뜨지 않아 당황하였다.
침착하게 카카오 맵 공식 문서를 확인하니 주로 API 키에 문제가 있어 성공적으로 받을 수 없을 때 이러한 현상이 발생한다는 것을 알게 되었다.
그래서 공식문서를 보고 처음부터 API 키 생성과 등록 과정을 진행하였으나 오류는 여전했고, 구현 쪽도 오랜 시간 체크하였으나 문제가 없어서 정말 힘들었다.
검색과 카카오 API 커뮤니티를 열심히 뒤진 결과 하나의 글을 찾을 수 있었다.
바로 해쉬키 생성 방법 중 하나가 잘못된 해쉬 키를 제공할 수 있다는 글이었다.
나도 댓글과 마찬가지로 openssl e버전으로 해쉬키를 생성하였기에 다른 버전으로 해쉬키를 생성하였더니, 지도가 나왔다!
이를 통해서 공식 문서도 틀릴 수 있음을 생각할 수 있게 되었고, 예상되는 부분이 아니더라도 버그를 잡기 위해 테스트하는 실력을 기를 수 있었다.
2. 공공기관의 건강보험심사평가원_병원정보서비스 데이터를 불러오지 못하는 현상
메디앱에서는 건강보험심사평가원의 병원 정보를 활용하기 위해 공공 데이터 포털의 오픈 API를 사용하였으나, 이 데이터를 불러오는 과정에서 문제가 발생했다. API를 통해 받은 정보가 앱에서 확인되지 않는 문제가 있었다.
데이터는 XML 형식으로 받았으며, 웹페이지에서 이를 확인하였으나 제대로 표시되었으므로 애플리케이션에서 문제가 있음은 확인하였지만, 어느 부분이 수정이 필요한지 몰라 학교 개발자 오픈채팅방에 질문을 통해 한 선배님에게서 여러 조언을 얻을 수 있었다.
선배 개발자의 조언을 통해 해결되지 않았던 스레드 처리가 해결되었고, 이외에도 보안 인증서 및 API 숨기기와 같은 부족한 부분들을 짚어주셔서 메디앱에 적용하여 퀄리티를 올릴 수 있었다.
단순히 개발 진척도뿐만이 아니라, 질문과 이야기를 통해서 개발자의 마인드도 배울 수 있어서 정말 감사했다.(선배님에게 감사의 인사로 소소한 커피 기프티콘을 선물로 드린 것으로 마무리되었습니다)
캡스톤디자인 공모전 수상
완성한 메디앱을 가지고 공모전에서 발표를 하였고, "검색 상단바를 추가하면 좋겠다", "UI를 다듬으면 좋겠다." 등 여러 좋은 의견들을 받고 성황리에 발표를 마무리할 수 있었다. 다른 학생들의 작품들도 구경할 수 있었는데 서버를 활용하여 커뮤니티를 만들거나, 화려한 프런트엔드 작업으로 이목을 끄는 등 여러 재미있는 작품을 구경하는 시간을 가졌다.
공모전 발표를 끝마치고, 마지막으로 수상식을 하였는데 감사하게도 메디앱으로 우수상을 받을 수 있었다.
험난했던 개발과정을 겪어내고 상을 받으니까 인정받은 거 같아 기뻤었다.
앞으로도 많은 사람에게 도움이 되는 개발자가 되고 싶다는 생각을 하게 됐다.
아쉬웠던 점
아쉬웠던 점이 많이 있었었다.
1. 팀의 개발역량 부족
처음에는 혼자 하려 하지 않고 분업을 통해서 앱을 만드려고 했으나, 팀원들이 수준이 잘 올라오지 않아서 어려운 부분은 거의 내가 하였다. 팀원들에게는 프런트엔드 작업과 부족한 응급처치 시의 정보를 주로 분업시켰고, 모르는 부분이 있다면 언제든지 질문을 받아 팀원들과 같이 해결하였다. 하지만 서로 발전하는 느낌보다는 내가 가르쳐주는 느낌이 강했기 때문에 다른 팀에서 서로 발전하는 느낌의 개발을 해보고 싶은 욕심이 생기게 해 주었다.
2. 버전 관리의 부재
그때 당시에는 Github를 쓸 줄 몰랐기 때문에 버전관리를 통째로 import 해서 저장하고, 팀원의 작업물을 내가 복사 붙여 넣기로 합쳤었다. 버전 관리 툴을 사용했으면 편하게 저장과 공유를 동시에 구현할 수 있었을 텐데 아쉬움이 많이 남는다. 추후 프로젝트에서는 GIthub를 사용하여 버전관리를 하였다. (숙달이 필요하다)
3. 때깔이 안 좋다
프런트엔드를 개발했던 인원이 팀에 없었기 때문에 화려한 이펙트나 효과는 넣지 못했다.
또한 기본적인 UI에서도 하단의 서비스 전환 용 테스트 버튼을 수정하지 못하고 그대로 사용하였다. API문제 등등 핵심적인 파트에서 문제가 발생해서 UI구성에 손을 대지 못하고 이를 수정하지 못했는데, 애플리케이션 개발 마감에 맞추기 위해서는 UI를 뜯어내 다시 생성할 수가 없어 방치하였지만, 발표 때 뼈아픈 지적을 당했다.
4. 출시를 하지 못했다.
크게 2가지 이유가 있었는데, 첫쨰로는 응급상황 데이터의 부족이었다. 응급상황시의 처치법을 제공하려면 전문적인 지식이 있어야 했는데, 이러한 부분에서 막대한 데이터를 우리가 수집 및 활용할 수 있는 능력과 시간이 없었다.
두 번째로는 때깔이 안 좋기 때문이다. 프런트엔드가 없다 보니 이러한 현상이 발생할 수밖에 없었는데 이를 템플릿을 구매하거나 외주를 맡겨서 해결해 볼까 생각은 해보았으나 첫 번째 데이터의 부족 때문에 실행하지는 못하였다.
마무리
고생도 많이 하고 좌절도 많이 했지만 막상 완성하게 되니 뒤돌아 봤을 때 즐거운 추억이 되었다.
같이 따라와 준 팀원들도 고맙고, 도움을 청했을 때 도와주셨던 선배님에게도 감사의 말씀을 드리고 싶다.
또 내가 어려울 때 자신의 프로젝트가 아니어도 귀 기울여 주고 도와주려 노력해 줬던 친구 개발자가 있어서 힘듦을 이겨낼 수 있었다.
다음에도 좋은 프로젝트를 하고 싶다.
'코딩 공부 > 프로젝트 회고' 카테고리의 다른 글
학부 프로젝트 게임 개발에 대한 회고 (0) | 2023.06.25 |
---|