프로젝트 '투게더'는 한마디로 소마고 사이드 프로젝트 매칭 플랫폼이다.
전국 소마고 네트워크 구축과 프로젝트 규모의 제약을 해소시키는 것을 목표로 제작되었다.
무려 3개월에 걸친 처음이자 대규모 프로젝트인 투게더, 나는 PM과 백엔드를 맡았다.
지금부터 나의 다사다난했던 첫 프로젝트의 A to Z를 소개하겠다
프로젝트 기획을 위해 우선 해결하고 싶은 문제점을 찾아보았다.
당시는 프로젝트 전성시대. 모두가 프로젝트를 하나씩은 맡게 되는 시기여서 프로젝트의 근본적인 문제에 대해 생각해보니, 자신과 친한 친구들끼리만 모여서 프로젝트를 하게 되어서 친하지 않은 친구들은 실력과 별개로 프로젝트에 참여하기 어렵다는 사실과 이로인해 프로젝트의 규모가 한정된다는 사실을 찾게 되었다.
이를 해결하기 위해서는 같은 문제점을 공유하는 소마고 학생들 모두 프로젝트 참가/모집이 가능한 플랫폼을 만드는 것이라고 판단했고. 결국 '소마고 사이드 프로젝트 플랫폼'을 기획하게 된 것이다!
기존의 사이드 프로젝트 플랫폼들을 조사해 보았다.
기획을 했으니 프로젝트를 함께할 팀원들을 모아야 했다. 우선 실력이 좋은 2명의 친구들(iOS, 디자인)을 구했고, 그 다음 협업할 백엔드 1명, iOS 1명, 그리고 안드로이드 1명을 구했다. 마지막으로 프로젝트의 아이덴티티를 위해 소마고 연합 토크쇼의 인연으로 다른 소마고 학생 (프론트) 1명을 구하게 되었다
처음에는 별 생각없이 프로젝트를 진행했다. 먼저 기본적인 기능을 짜고(나름 MVP) 이를 API 명세로 만들었다. 그 후 백엔드 개발&디자인 → 클라이언트 개발 순으로 물 흐르듯이 진행시켰지만, 여러 문제가 발생했다
위와 같은 문제로 인해 애자일을 도입시켜보았다.
애자일은 린 프로세스를 착안한 소프트웨어 개발 방법론으로, 이슈에 빨리 대응하는 것을 목표로 한다. 우리는 스크럼 프레임워크를 사용하여 앞서 말했던 문제를 해결하려고 아래와 같이 노력했다
사실 이미 프로젝트가 이미 진행되고 있는 상황이라서, 이미 기획된 MVP(최소 기능 제품)구현을 목표를 남은 작업들을 스프린트로 관리하는 시스템으로 진행시켰다.
진행상황을 한눈에 파악하기 힘들고, 스프린트의 주기가 너무 길어서 피드백 주기도 길어졌다
2차 스프린트에는 스크럼 보드를 사용하여 프로젝트 진행상황을 시각화하고, 스프린트 주기를 2주로 줄여서 실행했다
이번 프로젝트를 진행하면서 직접 AWS에 배포하고, 여러 에러들을 핸들링하는 이른바 ‘데브옵스’ 업무도 수행하였다
CI/CD는 지속적 통합, 지속적 배포라는 뜻이다. 쉽게 말해 협업 시 일어나는 브랜치 오류 방지와 커밋 시, 변경된 코드를 다시 배포하는 과정을 자동화하는 시스템이다. 우리 팀은 깃허브 액션과 도커, AWS를 이용해서 CI/CD를 구축하였다.(다음에 배포 방법도 포스팅하겠다). 이를 통해 코드가 바뀔 때마다 배포하는 번거로운 과정을 생략하여 훨씬 효율적으로 작업할 수 있었다.
이번 프로젝트를 하면서 클라이언트와의 통신에서 생기는 여러 에러들을 해결하는데 꽤 많은 시간을 할애했다. Postman을 사용해서 기능 테스트를 하였지만 꼼꼼하게 하지 못한 탓에 연결하면서 많은 오류가 터졌다…얻은 교훈은 더욱 꼼꼼한 테스트보다는 ‘테스트 코드’ 였다.
위의 테스트 피라미드를 보면, 가장 근본적인 테스트는 단위 테스트인 것을 확인할 수 있다. 단위 테스트 코드를 짬으로서 각 클래스 작동여부를 확인할 수 있고, 문제 발생시 원인을 빠르게 찾을 수 있게 된다.
우리 팀의 특별한 것중 하나는 바로 요기요에서 배운 Postmortem(부검)이다.
요기요 포스팅 읽으러 가기
프로젝트 진행 중 발생하는 오류의 발생 원인과 해결 방법을 기록해서, 재발을 방지하는 데이터베이스를 구축하는 것이다. 예를 들어 가장 골치 아팠던 CORS 파트를 아래와 같이 작성했다.
사실 Postmortem의 효과는 많이 체감하지 못했다. 왜냐하면 문제 해결시 다음에 재발할 가능성은 현저히 낮았고, 또한 대처법을 기억하고 있으므로 동일한 문제 발생 시 바로 해결 가능했다. 하지만 시간이 지나서 다른 프로젝트 진행 중에 같은 문제가 재발하는 상황을 막기 위해서, 또한 발생시 해결하기 위해서는 데이터베이스에 정보를 저장해놓는 것이 최선의 방법이라 생각했고, 지금까지도 잘 구축한 팀 문화중 하나라고 생각한다.
위와같이 Pull Request를 통한 코드리뷰는 서로의 코드의 품질을 향상시키는데 도움을 주며, 프로젝트 코드의 구조를 이해하는 필수적인 과정이지만 다른 공부를 우선시하여 코드 리뷰 간격이 늦어지게 됐고, 서로 리뷰를 기다리지 않고 바로 머지해버리는 악순환이 반복되었다. 이로 인해 분명 내가 참여하는 프로젝트인데 내가 모르는 부분이 생겨서 코드 수정이나 기능 추가시 접근하기에 까다로워지는 치명적인 문제점이 생겼었다.
첫 팀 프로젝트라 많은 문제가 있었지만, 이를 극복했다는 점에서 상당히 뿌듯했다. 느낀 점을 간단히 추려보자면
프로젝트 레포 : https://github.com/D-PRlME
웹/앱 을 동시에 출시하여 언제 어디에서나 모집, 참가를 할 수 있게 하고 1:1 채팅기능을 구현하여 ‘투게더’안에서 모든 모집/참가 과정을 완료할 수 있게 하기
EmployeeConnection.net Insite