모노산달로스의 행보

[경기대학교] 컴퓨터공학부 3학년 기초캡스톤 프로젝트를 끝내며 (2/2) 본문

Side Project/Project

[경기대학교] 컴퓨터공학부 3학년 기초캡스톤 프로젝트를 끝내며 (2/2)

모노산달로스 2024. 6. 13. 22:08

기초 캡스톤 디자인 프로젝트

 

 

What is capstone design

 

캡스톤 디자인이란? 돌 산을 쌓을 때 가장 윗부분을 캡스톤이라고 합니다. 지금 까지 배운 내용들을 통해 모두가 힘을 모아서 마지막 윗부분을 만드는 것, 그것이 바로 캡스톤 디자인입니다.

 

경기대학교에서 컴퓨터공학부 3학년이라면 모두가 기초 캡스톤에 참여합니다. 실력이 좋은 사람, 자신이 없는 사람, 자신의 능력을 모르는 사람 등 모두가 팀을 이루어 결과물을 발표하고 경쟁합니다. 글쓴이 또한 2024년 3학년을 맞이하여 기초 캡스톤에 참여하게 되었습니다.

 

해당 포스트는 3월부터 6월까지 경기대학교에서 수행한 기초캡스톤 프로젝트 진행 과정을 필자 시점으로 정리한 내용입니다. 긴 글이 되어 두 개로 나누어 작성하게 되었습니다.

 

기초 캡스톤 프로젝트를 끝내며 (1/2)


후반 작업

 

본격적인 후반 작업이 이어졌습니다. 가장 먼저 백엔드에서 만든 미션 api를 사용하는 도중 미션 관리라는 행위가 필수적이라는 것을 알게 되었습니다. 지금까지 선생님이 미션을 제공하고 그것을 통해 아이들이 도장을 수집한다. 라는 개념만이 존재했지만 실제로 그 미션을 만들고 나서 그것을 확인하고, 미션을 종료하는 것을 생각하지 않았던 것입니다. 또한 이를 위해 세션 유지가 필요하다는 사실 또한 알게 되었습니다. 이처럼 개발 중에 계속해서 기능이 추가되는 경우도 있었습니다.

 

따라서 백엔드에게 주어진 임무는 아래와 같았습니다.

  • 미션을 종료하는 기능 구현
  • 세션을 유지하는 기능 구현
  • 아이들에게 알림을 보내는 기능 구현

프론트 공부를 끝낸 둘에게도 임무를 주었습니다.

  • 지도 스크린 구현
  • 미션 관리 스크린 구현

그동안 글쓴이는 Bump 기능(하이파이브) 개발에 집중하도록 하였습니다.

 

 


 

 

Bump

범프란 이런 것을 의미합니다

 

처음에는 본명 그대로 bump라는 이름으로 부르며 개발했습니다. bump란 두 사용자가 스마트폰을 흔들어 서로가 가까이 있다고 인증하는 기술입니다. 이러한 기술을 통해 어린아이들이 서로 만났다는 것을 확인한 뒤, 도장을 지급하고 다른 아이들에게 알림을 전송하고자 했습니다.

 

문제는 bump api를 사용하고자 생각하고 시작했지만, 그러한 api가 존재하지 않았습니다. 조사 과정에서 알게 된 사실은 다음과 같습니다.

 

  • 과거 bump라는 회사가 존재했지만 구글에게 인수된 후 사라졌다.
  • gps와 accelator를 통해 구현한 것으로 추정된다.

 

솔직히 조금은 막막했습니다. 0부터 시작하여 기술을 개발하는 것은 불가능하다고 생각했습니다. 그렇게 고심하던 중 Nfc를 이용해 보면 어떨까? 하는 생각이 떠올랐고 바로 실행에 옮겼습니다.

 

 

나름대로 전략을 세우고 구현해보고자 했지만... Nfc를 통한 peer-to-peer 형태의 통신은 개발할 수 없다는 것을 알게 되었습니다. (보안 문제로 추정) 절망에 빠진 상태로 이번에는 '두 device의 연결'이라는 키워드로 자료를 찾아보았습니다. 그러던 중 한 패키지를 발견하게 되었습니다. 

 

마치 한줄기 빛을 발견한 것 같았습니다. NearbyConnection는 플러터 근거리 통신을 제공하는 패키지로 peer-to-peer 방식을 통한 연결을 제공하고 있었습니다.

Flutter NearbyConnection Package

 

해당 패키지와 shake detector를 적절히 사용하면 bump 기능을 구현할 수 있겠다고 생각이 들었습니다. UI를 개선하고 작동 초기화 부분을 조작하는 것을 통해서 작업을 이어갔습니다.

 

그러던 중 하나 문제점을 발견했습니다. 사용자가 기기를 흔드는 것을 테스트하기 위해 실제 Device를 이용하여 테스트를 진행하다 보니 로컬 서버에 접근이 안된다는 것이었습니다. 즉 실제 서버를 개설할 필요성을 인지하게 된 것입니다.

 


서버 구축

AWS EC2

 

 AWS EC2(Amazon elastic compute cloud)는 아마존 클라우드에서 제공하는 가상 컴퓨팅 환경입니다. 이를 통해서 가상 서버를 구축하여 사용할 수 있습니다. 백엔드 팀원 중 한 명이 서버 담당을 맞게 되었습니다. 해당 팀원이 도맡아 AWS EC2를 통해서 가상서버를 구축했습니다.

 

이를 통해서 로컬 서버에서 벗어나게 되었습니다. 이제 테스팅을 위해 백엔드 작업물이 필요하지도 않고, Physical device에서도 통신이 잘 이루어지게 되었습니다.

 

 

 

 

 

추가적으로 테스팅을 위해 swagger 또한 도입되었습니다. 백엔드 api를 쉽게 확인하고 테스팅하는 기능입니다. 이제는 노션에 페이지를 만들어 reqeust와 response의 정보를 직접 손수 작성할 필요가 없어졌습니다.

 


 

기업 미팅

기초캡스톤 디자인을 진행하면서 각 팀은 전문가 자문을 받아야 합니다. 우리 팀은 앱 개발이라는 목표에 맞게 '모바일앱개발협동조합'이라는 회사에 자문을 받게 되었습니다. 자문 내용 중 가장 의미 있었던 것은 디자인 지원이었습니다.

 

앱 UI 디자인 지원은 아니었고, 전시회에서 사용할 포스터 디자인이었습니다.

 

디자이너분과 포스터 내용과 배치에 대한 대화를 주고받았습니다. 그 결과 꽤나 아름다운 포스터가 결과물로 나오게 되었습니다.

 

제작 과정에서 학교에서 진행한 특강 '이종필 교수의 presentation skill'을 들었습니다. 발표와 포스터 제작에 대한 방법을 배웠는데, 포스터 내용 배치와 발표 준비에 있어 길라잡이 역할을 해주었습니다.

 


 

속도를 올리자

 

마감 일이 다가올수록 하루 작업 량은 늘어나갔습니다. 이제는 모든 팀원이 학교에서 모여 합을 맞추어 작업을 진행했습니다. 특히나 마지막 3일은 새벽까지 밤을 새우면서 완성하고자 힘을 쏟았습니다.

 

How to push alert using firebase

 

알림 기능의 구현은 Firebase를 이용하게 되었습니다. 프론트에서 유저의 FCM toekn을 넘겨주면 백엔드가 Fireabase 서버와 통신하여 알림을 전송하는 방식이었습니다. 여러 가지 어려움이 있었지만 어떻게든 구현에 성공하며 핵심 기능인 하이파이브와 모이자 기능을 완성할 수 있었습니다.

 

 

가장 놓치고 있었던 부분은 세션 유지였습니다. 작업 후반부에 백엔드와 실제로 연결해 보니 세션 유지가 잘 작동하지 않았는데, 이는 플러터에서 cookie 사용이 기본적으로 불가능하다는 이유 때문이었습니다.

 

이를 위해 dio packagedio cookie manager 그리고 cookie jar package를 사용해야 했습니다. 어떻게든 코드를 만들어 쿠키를 통한 세션 유지에 성공했습니다.

 

유저 로그인시 백에서 생성한 쿠리를 사용하기위해 저장

 

쿠키가 정확히 무엇인지, 플러터에서 어떻게 사용하는지에 대해 프로젝트가 끝난 이후에 다시 공부하고자 생각했습니다. 어찌 되었건 우선 유지에 성공했다는 것에 큰 희열을 느꼈습니다.

 

그리고 전시 하루 전, 다른 두 프론트 팀원에게 작업물을 건네받았습니다. 해당 작업물들을 합치고 UI를 개선하는 작업을 계속해서 이어나갔습니다. 다른 사람의 코드, 심지어 잘 정리되지 않은 코드를 보는 것은 상당히 힘든 작업이었습니다. 어떻게든 마무리를 해야 한다는 일념 하나만으로 정신을 놓지 않았습니다.

 


 

전시회 당일

그렇게 잠에 들지 못하고 전시회의 아침을 맞이했습니다... 어떻게든 힘을 내 회장에 도착하였고 바로 부스를 만들기 시작했습니다. 기초 캡스톤 발표는 오후였는데, 오전까지도 계속해서 버그를 수정해야만 했습니다. 도장의 지급과 표시 그리고 미션 완료 부분에서 작은 버그들이 아직 존재했었기 때문입니다.

 

이와 더불어 발표 준비도 계속 이어나갔습니다. 작품만큼이나 발표 또한 중요했기에 입으로는 계속 발표 내용을 중얼거렸습니다. 처음 계획은 핸드폰 거치대를 올려두고 시연을 할 생각이었습니다. 하지만 그렇게 되면 하이파이브 기능을 제대로 보여주기 힘들 것이라고 판단되었습니다. 따라서 두 팀원이 핸드폰을 들고 발표를 돕는 것으로 최종 결정 되었습니다.

전시회 당일 부스의 모습

 

 

전시회 당일 다른 여러 팀들도 구경했습니다. AI 기술을 선보이는 팀이 대다수였고 게임을 만든 한 팀과 키오스크를 사용한 팀이 인상적이었습니다.

 

심사는 2시부터 6명의 심사위원분들이 각자 부스를 돌며 진행했습니다. 심사위원 분들 앞에서 발표를 진행할수록 점점 발표가 유연해지는 것이 느껴졌습니다. 그렇게 마지막 발표를 진행하였는데, 조금 생각을 깨우는 개선점을 들을 수 있었습니다.

 

그것은 바로, 데이터의 이용이었습니다. 기본적으로 아이들의 행동을 트래킹 하는 앱이기 때문에 활동적인 아이, 비활동적인 아이로 나누어 데이터를 수집하기가 좋습니다. 이렇게 수집한 데이터를 통해서 어떤 장소에 아이들이 많이 몰리는지 통계를 낼 수도 있고, 사업자에게 이러한 통계를 제공하기도 유용하다는 피드백을 받았습니다.

 

지금까지 회의를 거치며 생각하지 못한, 한 단계 더 나아간 '사업성' 측면에서 앱 개발을 고심하게 되었습니다.

 


 

 

끝내며

만찬

 

드디어 3개월을 걸친 프로젝트가 끝이 났습니다. 처음으로 접하는 큰 프로젝트이자 지금까지의 공부의 성과를 본다는 생각에 들떠있었습니다. 이번 기초캡스톤을 통해서 배운 점도 많았고 아쉬운 점도 참 많았습니다.

 

배운 점은 프로그래밍, 개발협업, 리더십 세 가지로 나눌 수 있습니다.

 

첫 번째로 Flutter 개발 자체에 대한 지식이 많이 늘었습니다. 지금 까지 flutter를 공부한 어느 순간보다 많은 성장을 이뤘다고 생각합니다. http를 통해 통신, nearbyconnection 및 shake 기능 사용, 반응형으로 앱 만들기, 쿠키 사용하기 등등... flutter 개발 능력 측면에서 공부를 많이 하게 되었습니다. 이와 더불어 백엔드 지식이나 CS지식 또한 조금이나마 얻어낼 수 있었습니다.

 

두 번째로 협업에 관하여 많이 배웠습니다. 혼자 개발하는 것이 아니다 보니 깃과 더불어 잘 소통할 필요가 있었습니다. 깃을 사용하는 방법을 배우기는 했지만 이렇게 실제로 사용한 경험은 많이 없었습니다. 이번 기회에 브랜치를 사용하는 방법, 코드 리뷰, 풀 리퀘스트, 푸시, 패치, 풀 등등... 깃에 대한 많은 것들을 실제로 느낄 수 있었습니다.

 

세 번째로 리더로서 역할을 조금 더 배웠습니다. 어떠한 작업자가 다른 작업자를 기다리지 않도록 일정을 만들어야겠다고 생각했습니다. 또한 회의를 적절하게 진행하고 내용을 정리하여 다시 작업자들에게 상기시키는 것 또한 중요하다는 것을 알게 되었습니다. 리더로서의 역할, 팀을 잘 이끌고 팀원을 관리하는 것에 대하여 다시 한번 경험할 수 있어서 좋았습니다.

 

물론 아쉬운 점 또한 남았습니다.

 

첫 번째로 요구사항 명세서, 프로덕트 백로그 등 기초캡스톤 개발을 시작할 때는 몰랐던 것들이 아쉽습니다. 직접적인 개발을 시작하기 전 이러한 부분을 잘 정리했더라면 작업 후반부에 업무가 과중되는 문제가 조금 줄어들었을 것이라고 생각합니다.

 

두 번째로 깃의 사용법이 조금 아쉬웠습니다. 프론트와 백의 레포지토리를 따로 나누어 관리하는 것이 더 좋다는 것을 차후에 알게 되었습니다. 이번 프로젝트에서는 깃의 사용에 있어 브랜치도 엉망이고 머지 과정에서 충돌도 자주 발생했습니다. 다음에 깃을 사용한다면 더 잘 사용하고자 생각했습니다.

 

https://github.com/Capstone-Project-Basic/capstone

 

GitHub - Capstone-Project-Basic/capstone: 🌱 Application help to increase sociability for children

🌱 Application help to increase sociability for children - Capstone-Project-Basic/capstone

github.com

 

결과물이 궁금하다면 깃허브 레포지토리를 참고해주세요.

 


 

 

 

결과는 은상을 받았습니다

 

 

처음으로 협업을 해보고 끝을 보았다는 것에서 큰 기쁨을 얻었습니다.

 

친구들과 처음 보는 사람들과 함께 프로젝트를 진행하는 것은  앞으로 해야 하는 일의 미리 보기와도 같습니다.

 

글쓴이도 리더 역할을 하면서 더욱 열심히 임하였고 팀원들도 잘 따라와 준 덕에 프로젝트가 잘 끝이 났다고 생각합니다.

 

특히 끝맺음이 있다는 것, 항상 장대하게 시작하더라도 후반부로 갈수록 지지부진 해지는 자신을 돌아보게 되었습니다.

 

이번에는 내 전공 프로젝트에 있어 끝을 보았다는 사실이 참 행복합니다.

 

진행기초 캡스톤 발표는 오후였는데, 오전까지도 계속해서 버그를 수정해야만 했습니다. 중인 프로젝트, 앞으로 해나갈 프로젝트도 꼭 열심히 임하여 좋은 결과를 맛보았으면 좋겠습니다.

 

 

 

 

 

 

 

 

이상으로 읽어주셔서 감사합니다. 기초캡스톤 후기를 마칩니다.