[팀 프로젝트] HARUCHI
UMC 6기
학기 중에는 주어진 워크북을 통해 공부를 하고 공부했던 내용을 바탕으로 방학에는 팀 프로젝트를 진행한다. UMC 이전에 혼자 공부할 때는 내가 과연 프로젝트를 할 수 있을까라는 의문이 있었는데, 워크북을 통해 공부한 후에는 프로젝트를 진행할 수 있겠다는 자신이 있었다. 나의 실력을 체크할 수 있는 프로젝트가 빨리 진행되기를 바랬다.
Pre-Meeting Day
6월 말 즈음에 PM이 자신의 아이디어에 대해 소개를 하는 프리미팅데이를 가졌다. 프리미팅데이 는 지부마다 운영되며, 우리 지부는 한양대 에리카, 한국외대, 명지대, 가천대, 경희대 총 5개의 학교로 구성되어 있었다, 약 15분의 PM이 자신의 아이디어에 대해 소개를 하셨다. PM분의 설명을 들으면서 개발자인 나와는 다른 분야이지만 다양한 프로젝트 경험, 인턴 활동 등 정말 대단하신 분들이 많음을 느꼈다.
프리미팅데이 이전에 PM분의 아이디어를 볼 기회가 있었는데, 그 당시에는 흥미를 느끼지 못했던 아이디어가 프리미팅데이를 통해 머리 속에 깊이 남았고 반면 그 때 흥미를 느꼈던 아이디어는 그다지 매력을 느끼지 못했었다.
프로젝트 매칭은 1순위부터 10순위까지 작성해 내면 매칭이 되는 시스템이였다.
나에게는 하루치가 무조건적인 1순위였고 나머지는 거의 비슷한 순위였다. 프로젝트 경험도 없는 무지랭이라서 사실 1순위는 거의 안 될 것 같았고 한 7 ~ 10순위에 매칭될 것이라고 생각하고 있었다.
신기하게도 1순위인 하루치로 매칭이 되었다!!
하루치(HARUCHI)
하루치를 선택하고자 한 이유는 내가 사용하고 싶은 서비스였다. 다른 PM분의 아이디어 자체는 되게 좋았지만 내가 사용할까라는 의문에는 거의 대부분 No였다. 하지만 하루치는 기존 가계부의 기록에 초점이 된 것이 아니라 지출 통제에 초점이 되어있어서 더 매력적이었다.
프로젝트 진행
4명의 백엔드 개발자로 구성이 되어있었고, 초반에는 프로젝트 세팅&에러핸들러 구현(1), CI/CD(1), ERD 및 API 명세서 작성(2) 각자 파트를 나누어 진행을 했다. 이 이후에는 도메인 별로 나눠서 API 구현을 했다.
나는 ERD 및 API 명세서 작성을 맡았다.
UMC 워크북을 통해서만 ERD 설계를 진행해봤는데, 직접 작성해보려고 하니 되게 어려웠고 생각보다 오래 걸렸다. 테이블에 어떤 필드가 들어가야하는지, 두 테이블간의 관계를 어떻게 해야할지, 매핑 테이블에 있어야 할 필드값은 무엇일지, 테이블을 나누는게 더 나을지 합치는 게 나을지 등 고민해야할 거리들이 많았다. 2명이서 설계를 진행했지만 의문이 생기거나 의견이 갈리는 부분이 있으면, 다른 백엔드 팀원에게도 피드백을 받아 수정해 나갔다.
API 명세서 설계할 때는 쉬울 것이라고 생각했는데 URL 작성하는 부분에서 고민이 많았다. URL은 사실 마음대로 작성을 해도 되긴 하지만 보기에 더 깔끔한 URL을 작성하고 싶었고, pathvariable을 사용할지 아니면 request body로 사용할지 등 여러 고민 사항들이 많았다.
각자 도메인 별로 API 구현을 나누었는데 나는 GET, POST, DELETE 등 여러 HTTP 에 대해서 작성해보고 싶은 마음에 DayBudget을 선택했다. API 구현을 하면서 생각보다 놓치는 로직들이 많이 있었고 점차 로직들을 수정해나가면서 API 구현도 완성할 수 있었다.
후기
그리고 데모데이에서 하루치가 최우수상을 받았다!! 사실 내가 잘해서 받은 상은 절대 아니고 PM분이랑 팀원들이 잘한 덕이지만… 그래도 첫 프로젝트에서 상까지 받으니까 되게 뿌듯했다.
거의 6주동안 진행된 프로젝트지만 API 연동이 꽤 걸릴 것을 예상해 백엔드는 한 3~4주 정도 안에 끝났다.
나의 첫 프로젝트를 끝내보니 막상 프로젝트 시작 전에는 느끼지 못했던 것들을 많이 생각하게 되었다.
일단 나는 부족한 부분이 너무 많다는 사실이다. 어쩌면 정말 기본적인 ERD나 API 설계 부분에서도 헷갈리는 개념들이 존재했기에… 나름 부끄러웠다. ㅎ… 아직 API 구현을 할 때도 익숙하지 않아 UMC 워크북을 많이 참고하면서 작성했다는 점.. 또한 AOP, 의존성 주입 등 스프링 기초 개념들에 대해서도 좀 더 자세히 알아서 코드 작성할 때 확실하게 이해를 하면서 했으면 어땠을까라는 생각도 들었다.
그리고 프로젝트를 진행할 때 가장 중요한 것은 마음가짐이라는 생각도 들었다. 사실 이번 프로젝트를 진행할 때 내 마음 가짐은 다른 팀원에게 폐를 끼치지 말자였다. 그래서 파트 분배를 할 때도 내가 그나마 확신을 가지고 구현할 수 있는 부분을 맡으려고 노력했다. 프로젝트가 끝난 후에는 이번 프로젝트를 진행하면서 새로운 내용을 배워간다라는 마음으로 임했으면 어땠을까라는 생각이 든다. 내가 제대로 해보지 못한 CI/CD를 해본다거나 아니면 한 번도 해보지 않은 회원가입, 로그인 등 스프링 시큐리티 부분을 맡는다거나… 그랬다면 프로젝트가 끝나고 나서 얻는 게 뭐라도 더 있지 않았을까하는 아쉬움이 남는다. 뭐… 일단 첫 프로젝트니까 그동안 배웠던 것들을 복습한다는 느낌이였다고 합리화를 하면서…
앞으로 프로젝트를 선택할 수 있는 기회가 온다면 단순히 이 프로젝트를 내가 사용하고 싶은가가 아니라 이 아이디어를 구현할 때 사용할 수 있는 기술에 대해서도 고민해보면 좋겠다고 느꼈다. 예를 들면 프로젝트에 사진이 많기에 S3를 사용한다거나, 카카오 소셜 로그인이라던가, 아니면 Chat GPT를 사용한다거나 이런 기술적인 부분에 대해서도 고민하고 선택하고 싶다.
이렇게 나의 첫 팀 프로젝트가 끝났고, 진행하면서 느낀 부분들을 활용하면서 다음 팀 프로젝트 뿐만 아니라 개인 첫 프로젝트도 진행하고 싶다.


