드디어 모든 교육과정이 끝나고 기대와 설렘으로 시작한 프리프로젝트가 시작되고 끝났다. 사실 프로젝트 중간에도 글을 쓰고 싶었는데 팀장, 프로젝트, 가정, 육아의 콜라보가 나를 쉴 틈 없이 몰아붙여서 중간 기록을 남기지 못한게 아쉽다. 하지만 그래도 끝 마무리를 지으며 경험과 깨달음들을 두서 없이 적어내려 한다. (아마 나중에 다시보고 정리 하지 않을까 싶다)
프리프로젝트의 주제는 개발자들이 한번 이상은 신세졌다는 'stack overflow' 사이트를 클론코딩 하는 것이었다. 팀은 랜덤으로 배정되었고 우리팀은 모두가 비전공자 출신의 팀이었다. 나는 프론트도 독학이지만 그래도 스스로 개인 프로젝트를 해보면서 비동기 통신으로 서버에 API 요청을 보내 데이터를 받아 가공해서 간단한 기능들을 구현해본 경험이 있어서 프론트와 백엔드 모두를 아우를 수 있고 팀장의 자리를 경험해보고 싶어서 먼저 팀장을 하고 싶다고 이야기했다.
하지만 이것은 훗날 나에게 불어닥칠 후폭풍을 모르는 나의 선택이었다.(그래서 메인때는 절대 팀장 안한다 했지만 결국 팀장이 되어버렸다... 왜지?) 팀장이 되고 나서 너무 프로젝트에 몰두하고 열심히 하는 바람에 육아를 계속 담당하고 있던 아내랑 계속 싸우게 되었다. 물론 이 부분은 잘 이야기를 했는데 이 글의 끝에서 다루려고 한다.
프로젝트를 돌이켜 보면 나부터 모두가 이러한 프로젝트가 처음이라는 것이었다. 나름 육아를 하면서도 최대한 끝까지 남아서 다음에 해야 할 것들을 미리 준비하고 고민 해야 할 부분들을 먼저 고민하면서 회의도 진행하고 프로젝트 전체 흐름을 진행했지만 역시 모두가 처음이라 생각보다 순탄하지 않았던 것 같다.
다음에 프로젝트를 하기 전에 이 글을 보고 다시 한번 중요 포인트를 상기 할 수 있게 먼저 팀으로 협업하면서 중요하게 생각해야 하는 부분들을 기록 해보겠다.
(참고로 팀은 프론트엔드 3명, 백엔드 3명이 기본인데 우리팀은 백엔드가 4명이었다.)
1. 백엔드 끼리의 협업을 할 때 놓쳤던 부분
우리는 먼저 요구사항과 기능을 0순위 ~ 3순위로 나눠서 0~1순위는 2주동안 무조건 구현하는 것으로 목표를 잡았다. 그리고 2순위 부터는 여유가 될 때 구현하는 것으로 생각했다. 각각의 역할 분담을 도메인 단위로 했고 0순위는 일단 기존의 커리큘럼이나 교육 컨텐츠에서 충분히 익혔다고 생각했다.
- 협업으로 코드를 구축해 나갈 때 협업의 관점으로 먼저 개발해야하는 우선순위를 정하기
프리프로젝트를 들어가기 전에 stack overflow와 비슷한 QnA 게시판을 만드는 것을 혼자 해봤다. 그때는 혼자서 개발하기 때문에 질문을 개발하다가 다른 엔티티나 클래스 혹은 기능에 의존하는 로직을 만들게 되면 바로바로 만들어서 하면 되었었다. 근데 나는 도메인이 분리 되어있으니까 각자의 개발에 집중하면 되겠다고 생각했는데 생각보다 하나의 도메인을 완성하기 위해서 여러 도메인의 엔티티나 response DTO나 하는 것들이 필요하게 되었었고 그게 먼저 개발 되지 않으면 작업을 완료하기가 어려웠다.
도메인이 분리되어있고 역할 분담을 잘 나누었어도 개발함에 있어서 협업은 결국에 코드가 유기적으로 연결 될 수 밖에 없다는 것을 알게 되었고 내가 A를 해줘야 다른 사람이 B를 진행 할 수 있다는 것도 알게 되었다. 그래서 앞으로 없는 것에서 부터 새롭게 만드는 프로젝트를 하게 되면 다른 패키지나 도메인에 어떤 것들이 필요할지 먼저 이야기를 해보고 개발의 우선순위를 정해서 그것부터 먼저 개발할 수 있도록 하는 것이 필요하겠다 생각했다.
2. 프론트와의 협업에서 놓쳤던 부분
- 프론트와 백엔드의 작업 싱크를 맞추는 부분이 어려웠다.
백엔드는 기존에 해봤던 코드들이 있고 기본 CRUD 게시판의 특성에서 크게 벗어나지 않아서 기능들을 굉장히 빠르게 구현 할 수 있었는데 프론트 측은 컴포넌트 단위로 작업이 진행되다 보니까 서로가 어느정도까지 작업이 진행되고 있는지를 파악하고 그 싱크를 맞추는 부분을 열심히 체크했다 생각했지만 백엔드가 기능 구현을 앞서가면서 2단계 기능들을 거의 다 구현하기 시작하면서 프론트측에서 에러를 수정하고 테스트하고 하는 부분 때문에 잘 따라오지 못해서 어려워했다.
프론트의 에러 중에서 한 FE 분이 본인의 코드에 문제가 있고 본인이 잘 찾지 못하는 것이라 생각하고 오전의 모든 시간을 다 보낸 적이 있다. 근데 알고 봤더니 백엔드 측에서 해결해줘야하는 부분이었던 것이 있다. 만약 새로운 기능을 개발하는 리소스를 조금 줄이고 이런 서버와 연결하고 하는 부분에 있어서 각 기능을 맡은 사람들이 테스트 해보고 오류가 나면 같이 해결 할 수 있도록 좀 더 가이드를 해줬더라면 기본적인 기능들이 더 안정적으로 빨리 완성되지 않을까 한다.
3. 팀장으로서 팀원들과의 어려웠던 점, 해결한 방법
- 커뮤니케이션의 어려움
월요일 FE 측에서 소집을 했다. 한 팀원이 주말동안 해결하지 못한 문제를 나머지 두 팀원이 가져가서 해결해야 하기 때문에 기능 하나를 포기하고 축소하자는 이야기였다. 사유는 해당 팀원이 구현 해야하는 컴포넌트가 낮은 난이도의 컴포넌트였는데 예상치보다 훨씬 많은 시간이 소요되었고 월요일 새벽 3시에 부팀장에게 몸이 아파서 당일 휴가를 내야하는 부분에 대해서 이야기를 했다.
소집이 끝나고 부팀장님과 둘이 이야기를 나눴는데 첫번째 어려움은 소통이 잘 안된다는 것이었다. 예상치보다 훨씬 많은 시간이 걸린 컴포넌트에 대해서 왜 이렇게 오랜 시간이 걸렸는지 물어봤을 때 그냥 시간이 좀 걸렸다고 했었다고 했다. 그리고 주말 동안 해야하는 PR들이 안되어있고 월요일 휴가로 인해 부재인 상태일 때 부팀장님의 입장에서는 이 팀원이 굉장히 중요한 컴포넌트들을 가져갔는데 컴포넌트를 구현 할 실력이 정말 어려운 건지 아니면 어떤 사정이 있는건지 알기 어려워서 농담이지만 자기도 탈주하고 싶다고 했다
이런 이야기를 들을 때 나의 마음은 생각보다 침착했다. 사실 간사를 하면서 겪은 어려움에 비하면 이런 갈등과 어려움은 아무것도 아니었다. 그래서 부팀장님께 일단 내일 팀원이 돌아오시면 소통을 먼저 잘 해보면 좋겠다 말씀 드렸고 혹시나 여전히 소통이 어려우면 나랑 같이 면담을 해보자고 말씀 드렸다.
그리고 만약 내일도 프로젝트에 안돌아오시게 되면 (왜냐면 우리의 입장에서는 이분이 휴가를 내시고 갑자기 팀을 이탈하시는 것은 아닌가 까지 생각이 들었다.) 빠르게 기능 구현에 대한 역할과 우선순위를 재분배하고 백엔드가 4명이니 나도 프론트에 뛰어들어서 일단 프로젝트를 완료하는 것을 목적으로 열심히 도울테니 걱정하지 말라고 말하고 절대 부팀장님 도망치면 안된다고 했다 ㅋㅋㅋ
결론적으로는 잘 돌아오셨고 알고보니 그날부터 주말동안 꽤 많이 아프셨던 것 같았다. 몸이 좋지 않았다고만 말씀해주셨는데 미리 말씀해주시거나 자세히 이야기를 해주셨으면 다른 팀원들이 그 짐을 나눠 가질 수 있었을 텐데 아쉬웠다. 그래도 맡은바를 잘 해주실 실력을 가지고 있으셨고 해프닝이 있었지만 잘 마무리 되었다.
교훈으로는 소통이 정말 중요하다는 것이랑 어쩌면 이러한 소통을 잘 할 수 있는 팀, 조직 문화를 구축하는 것도 굉장히 중요한 일이라는 생각이 들었다.
4. 에러 해결과 기술적인 회고
프로젝트를 진행하면서 만나게된 에러를 해결하면서 나중에 더 공부를 하면 좋을 내용이나 팀원들에게 공유하면 좋을 이슈 및 에러 해결에 대한 내용들을 프로젝트를 진행하면서 꾸준히 정리를 했다. 물론 군데 군데 비어있긴 하지만 일단은 그래도 키워드나 참고 블로그 정리해야하는 내용들로 채워져있다.
오히려 이런 프로젝트를 진행하면서 바로바로 정리를 러프하게 나마 해놓으니까 나에게도 큰자산이 되는 것 같고 혹 팀원이 이슈나 해결 방법에 대해서 물어볼 때 공유 할 수 있는 자료가 되어서 더욱 좋았다.
팀 노션에 이런 것처럼 본인이 이슈를 해결하는 것들을 공유해달라고 했는데.. 결국 나만 올렸다. 아마 다들 그럴 여유가 쉽게 없었을 거라 생각이 들었지만 아쉬웠다.
어쨋든 이 에러 처리 과정들은 다시 정리해서 블로깅을 하려 한다. 그때 더 자세한 에러 회고나 기술 회고를 할 수 있을 것 같다.
결론
그러고보니 팀장을 하면서 아내랑 어려웠던 점 그리고 어떻게 해결했는지는 적지 못했는데 그것도 다른 포스터 글로 글을 남기려고 한다.
'개발일지' 카테고리의 다른 글
Java Set: HashSet, TreeSet, LinkedHashSet 완벽 가이드 (0) | 2024.11.28 |
---|---|
[pre-project 문제해결 공유] @RestController 어노테이션과 @Validated 어노테이션 충돌문제 (0) | 2023.08.22 |
[프리프로젝트] 프론트, 백엔드 서버 배포 관련 조사 (0) | 2023.06.29 |
[솔로 프로젝트] TodoList Test 작성 및 API 문서화 하기 2탄 / API문서화편 (0) | 2023.06.10 |
[KPT] Section 4을 마치며 하는 회고 feat.코드스테이츠 백엔드 (1) | 2023.06.08 |