본문 바로가기

후기

[UMC 2기] 첫 협업 프로젝트 & 데모데이 후기

첫 협업 프로젝트

여름방학동안 첫 협업 프로젝트를 진행했다. 예전부터 협업프로젝트를 해보고 싶어서 아주 기대가 컸다. 우리팀의 프로젝트는 소비를 나누어, 소비를 줄일 수 있는 "나누어" 였다. 나누어는 자그만 소비도 부담이 될 수 있는 대학생, 사회초년생, 1인가구를 타켓층으로 하고 배달, 식재료, 택시, 구독과 같은 여러 카테고리에서 비용을 나누어서 소비를 절약할 수 있는 앱이다.

 

우리 팀은 서버 개발자3명(PM1명, 일반 서버개발자 2명), 클라이언트 개발자 2명, 디자이너 1명으로 구성되어 있고 서버는 spring boot, 클라이언트 android kotlin을 사용했다. 나는 이 프로젝트에서 클라이언트(Android) 개발자를 맡았다.

 

이번 UMC를 통해 Android를 처음 배워서 잘할 수 있을까 걱정이 많았다. 하지만 예전에 스스로 공부했던 웹프론트엔드 덕분인지 처음 웹프론트엔드를 맞이했을때보다는 수월했다. 결국엔 웹과 앱 같은 프론트엔드이고 UI/UX를 생각해야한다는 공통점이 있기 때문에 그랬던 것 같다.

 

우리 프로젝트의 핵심 기능

우리가 만든 앱에서 핵심 구현 기능은 세가지로 말할 수 있다. 1)로그인, 회원가입 기능 2)게시판 기능 3)채팅 기능 이다.

 

로그인, 회원가입 기능을 구현하면서 어떻게 로그인,회원가입이 이루어지고 jwt의 쓰임새에 대해 정확히 알게되었다. 서버에서 로그인API를 받고 사용하면 jwt를 반환한다. 클라이언트 단에서는 이 jwt를 저장해놓아야하는데 Android에서는 shared preference라는 곳에 저장해둔다. 저장해 놓은 jwt는 request header에 jwt가 필요한 API와 자동로그인과 같은 기능 구현에 쓰인다.

 

게시판 기능을 구현하면서 CRUD를 익히는 데 많은 도움이 되었다. 클라이언트 쪽에서는 서버에서 만든 API를 사용하면 되는 입장이지만 직접 서버분들이 작성한 API 명세서에 requset method, response값들을 보면서 CRUD가 어떤 식으로 작동하는 지 이해할 수 있었고 클라이언트 쪽에서는 이 CRUD의 UI를 어떻게 구현하는 게 좋을 지도 생각해보는 좋은 시간이었다.

 

마지막으로 대망의 채팅 기능! 채팅을 구현하기가 진짜 까다로웠다. 채팅 구현에만 우리 프로젝트의 70%의 시간을 투자했다고 해도 무방할 정도로 가장 힘을 쓴 기능 구현이었다. 우리는 stomp 라이브러리(https://github.com/bishoybasily/stomp)를 사용하여 웹소켓 통신으로 채팅을 구현하기로 했다. kotlin 관련 stomp 라이브러리의 자료도 많이 없고 웹소켓 통신에 익숙하지 않아서 구현하는 데 시간이 오래 걸렸다. 우리팀은 서로의 파트 구분할 것 없이 같이 구글링해주고 문제점을 찾아서 마침내 해결할 수 있었다. 서버통신까지는 성공했는데 그 후 문제는 UI가 메시지가 올때마다 업데이트가 되지 않는다는 문제점이 생겼다. 이 문제는 runOnUiThread를 사용해서 해결할 수 있었다. 정확한 이유는 모르겠지만 Android가 싱글 스레드 체제여서 메인 스레드에서만 UI작업을 할 수 있는 것과 관련이 있는 것 같다. 채팅을 구현하면서 "안 될 것 같아 보이는 일도 계속 부딪히고 하다보면 어떻게든 해결할 수 있다" 라는 교훈을 얻을 수 있었다.

 

협업 프로젝트 후기

이번 UMC 협업 프로젝트를 하면서 많은 것을 배울 수 있었다.

먼저 클라이언트 개발자, 서버 개발자, 디자이너가 어떻게 소통하고 협업하는 지 이해할 수 있었다. 클라이언트 개발자입장에서 서버개발자와는 서버개발자가 만든 API 명세서를 보며 소통이 이루어진다. 클라이언트 쪽에서 필요한 값이 response값에 없을 때 서버개발자한테 요청해서 변경을 요구할 수 있다. 디자이너와는 디자이너쪽에서 만든 UI가 클라이언트 단에서 구현하기 어려울 때 어떻게 하면 디자이너의 디자인은 살리면서 클라이언트에서는 구현이 가능할지 합의점을 찾아나간다.

깃과 깃허브 사용법을 익힐 수 있었다. 협업 프로젝트 하기 전에는 개인 프로젝트를 깃허브에 저장하는 수준에 add, commit, push 정도 명령어만 사용할 줄 알았다면 이번 프로젝트를 통해서는 branch, merge, pull requset와 같은 협업 명령어에 대해 익힐 수 있는 시간이었다. 왜 협업을 할 때 깃과 깃허브를 사용하는 지 몸으로 느낄 수 있는 시간이었다.

 

이번 방학이 가장 코딩하는 데 시간을 많이 쓴 것 같다. 그만큼 코딩실력도 많이 늘었고 구글링하는 법도 많이 늘었다. 8월 26일 데모데이 전까지 우리의 프로젝트를 구현할 수 있어서 아주 뿌듯했다. 방학동안 같이 회의하고 코딩하고 애쓴 우리 팀원분들도 정말 좋았고 감사했다. 많은 것을 배울 수 있었던 첫 협업 프로젝트 "나누어" 잊지 못할 경험일 것 같다!

 

https://www.notion.so/kidzero/8d99ca190ca04a08a131eab5dac4b4da

 

안녕하세요! 나누어 팀 입니다 👋

🔔 소비를 나누어 소비를 줄이는 “나누어”

www.notion.so

데모데이

UMC의 꽃 데모데이는 여름방학동안 협업 프로젝트 진행한 결과물을 사람들에게 시연하고 보여주는 날이다. 우리팀의 결과물도 보여주고 그 동시에 다른 팀들의 결과물까지 시연해보고 테스트하는 자리이다. 이런 경험이 처음이라 우리팀에 손님들이 왔을 때 어떻게 해야하는 지 잘 몰라서 당황했지만 금방 익숙해졌다. 우리 팀에 시연을 보러 온 대부분 손님들은 우리가 채팅 구현한 것을 보고 놀라거나 대단하다고 칭찬해주셨다. 그러한 반응과 칭찬을 들으니 방학동안 열심히 코딩했던 기억이 나면서 뿌듯했다. 반면에 직설적인 평가를 남겨주시고 간 분도 있었는데 프로젝트 관련 전문가이신 것 같았다. 그 분께서 주신 피드백을 듣고 앱을 만드는 데 더 많은 경험과 지식이 필요하다라는 것을 느꼈다. 돌아다니면서 다른 팀들의 프로젝트도 시연해보았는데 멋진 서비스들이 정말 많았다. 여행일정을 효율적으로 짜게 도와주는 서비스, 편지를 보관해주는 서비스 등 누군가에게는 필요할 법한 서비스들이 많이 있었다. 우리 서비스도 소개하고 다른 팀들의 서비스들도 구경하고 하느라 시간은 금방 지나갔다. 이제 마지막 시상식만 남았는데 나는 내심 기대했다. 방학동안 투입했던 노력과 우리 팀을 향한 사람들의 긍정적인 반응들을 종합해보았을 때 수상할 수 있을 것 같다는 생각을 했다. 그러나 아쉽게도 수상자 이름에는 들지 못했다. 조금 아쉽긴 했지만 우리팀 모두 데모데이를 성공적으로 마쳤다는 점에서 만족했다.