여러분! 9월 초부터 약 3주간 모두 너무너무 고생하셨습니다! 정말… 모두 니르바나가 예쁘고, 완성도 높은 결과물로 남을 수 있도록 노력해주신 덕분에 짧은 기간과 제한적인 api를 이용하고도 나름 만족스러운 서비스가 나온게 아닌가… 하는 생각이 듭니다 😀 리팩토링과 자율적 고도화를 제외하고 프로젝트의 마지막 단계로서, 최종 회고가 남았습니다! 아래 3개 주제에 대해 KPT 회고를 작성하시면서 이번 프로젝트 경험을 여러분 각자의 멋진 성장을 위한 양분으로 삼으셨으면 합니다. 못난이 팀장 잘 따라와주셔서 감사합니다 🙇♂️🙇♂️🙇♂️
담당한 페이지 / 컴포넌트 / 기능 개발에 대해
여러분 각자가 담당하게 된 페이지, 컴포넌트 또는 기능 개발은 어땠나요?
김민재
Keep
서비스에서 가장 먼저 사용자와 상호작용하는 회원가입, 로그인 페이지를 만들었습니다. 회원가입, 로그인 기능이 빨리 마무리 되어야 다른 페이지에서도 테스트 해볼 수있기 때문에 최대한 빠르게 개발했습니다.
인증, 인가와 관련된 기능을 개발해보면서 나름 꼼꼼히 기능개발, 유효성검사 했다고 생각했는데 아직도 고도화할 수 있는 부분이 많이 남아있는것 같습니다.
Problem
기능 개발을 하기 전에 어떤 기능이 필요할지 먼저 생각해 보고 문서화 하면서 진행했으면 더 좋았을거 같습니다.
제가 담당한 페이지만 집중했다보니 공통 컴포넌트를 한 개만 작성했었습니다.
Try
기능 개발하기 전에 먼저 구조를 생각해보기, 문서화 해보기.
공통 컴포넌트로 분리할 수 있는 부분 생각해서 개발하기.
김혜성
박나연
팔로우, 검색, 알림 기능을 만들었습니다.
Keep
리액트 쿼리에서 제공하는 많은 기능들을 적극 사용하여서 최대한 리액트 쿼리로 서버에서 받아온 데이터를 상태 관리하였다.
Problem
내가 사용한 훅들이 공통으로 쓰일 것 같으면 적극 분리했어야 했는데 그렇지 못하고 구현 마감시간에 쫓겨서 구현하게 되어 중복되는 훅 로직들이 생겼다.
공통 컴포넌트들이 재사용성을 위한 Prop의 수가 늘어나면서 점점 추상화 되었다.
Try
처음에 UI상에서 공통 컴포넌트들을 분리하고 어떤 Prop들이 필요한지, 어떤 기능에서는 어떤 공통 컴포넌트들을 사용할지 정리를 함께 하고 공통 컴포넌트들을 개발해봐야겠다.
조수연
포스트를 작성하는
Post
페이지, 포스트들을 볼 수 있는 Posting
페이지, 그 외 공통 컴포넌트와 CSS 수정을 담당하였다.Keep
- 무턱대고 도전하기
무한 스크롤을 적용한다는 이야기를 들었을 때, 프로젝트의 완성도를 높이기 위한 기능을 구현할지 말지 고민할 때 지르고 보자! 라는 생각으로 팀원들에게
제가 해도 될까요?
라고 나섰던 용기를 계속 가져가고 싶다.. 평소 미루고 있던 기능 구현을 팀 프로젝트라는 강제성과 책임감이 부여됨으로써 구현해보자, 라는 마음이었다.이런 식으로 어렵고 부담스러운 작업이라는 생각이 들면 무턱대고 제가 구현해보겠다는 말을 먼저 던져놓고, 제 말에 책임을 지기 위해 어떻게든 기능을 구현하려고 했다. 나쁘게 말하자면 무모함이고, 좋게 말하자면 용기였는데 무모했다는 생각은 전혀 들지 않았다.
그 과정과 결과로부터 많은 지식을 배우기도 했고, 어려울 때 팀원들에게 도움을 구하는 방법도 습득하였기 때문에 다음에 있을 팀 프로젝트에서도 이런 용기를 가지고 팀 프로젝트에 임해서 더 많은 것을 배우고자 한다.
Problem
CSS 리팩토링을 내가 한번에 진행하면서 알게 된 문제점이 있다. 또한 프로젝트를 진행하면서 끊임없이 고민한 문제이기도 하다.
- 컴포넌트 재사용성 높이기
- 컴포넌트의 확장성이 너무 크거나, 없는 문제
- 다른 사람이 이미 만들어놓은 공통 컴포넌트를 생각하지 못하고 내가 따로 만들어서 사용을 하는 문제
- 기존에 생각했던 컴포넌트의 용도가 달라지는 문제
공통적으로 사용되는 컴포넌트의 경우
/components
폴더에 작성하였다. emotion styled 라이브러리를 사용하여 prop 으로 여러 스타일과 관련된 속성을 받아서 재사용성이 높은 공통 컴포넌트를 작성하려고 했는데 이 과정에서 어떻게 해야 적절한 컴포넌트를 만들 수 있는지 고민을 했다.내가 맞닥트린 컴포넌트 재사용성과 관련된 문제는 다음과 같았다.
- CSS 스타일링
- 안정성 측면
- 회의를 진행하지 않고 나혼자 진행한 측면
페이지 기능이 우선순위가 높다보니 피그마 디자인과 미묘하게 다른 부분이 많았는데, 이 모든 걸 일일이 팀원들과 상의하고 조정하려고 하기 보다는 나도 우선순위를 뒤로 미루었던 것 같다. 그렇다보니 후에 욕심이 생겨서 팀원들이 설정해놓은 CSS 를 전체적으로 손보았는데 다음 면에서 별로 좋지 못한 방법이었던 것 같다.
Try
- 컴포넌트 재사용성을 높이기 위해
본격적인 페이지 기능 구현을 하기 전 팀원들과 상세하게 논의하여 공통 컴포넌트에 들어갈 요소들을 미리 분리하고, 자유도를 설정하는 방식으로 해결할 수 있다는 생각이 든다. 어떤 공통 컴포넌트가 있는지 파악한 상태에서 페이지 개발을 진행하면, 페이지에 종속된 컴포넌트를 추가로 만들지 않고 중복 코드를 줄일 수 있을 것 같다.
- CSS 스타일링
다음번엔 피그마를 CSS 로 그대로 구현하는 것이 얼마나 중요한지 팀원들에게 설명을 한 다음, 팀원들의 동의를 먼저 얻어내고 싶다. 아무래도 개발자다 보니 심미성보다는 기능 개발이 중심이 되는 것 같아서, 이 번거로운 작업이 중요하다는 인식을 모두 공유하는 게 우선이라고 생각한다.
그리고 PR 을 merge 하기 전 디자인과 달라진 점은 없는지 꼼꼼하게 검사하는 문화를 만들고자 한다.
홍창기
Keep
Meditation 페이지 내 타이머 테두리 부분을 천천히 회전시키는 작업에서 구현 상 어려움이 있었는데, 5일 이상 걸려도 구현할 수 없던 것을 비슷한 상황에서 구현 경험이 있는 팀원들에게 조언을 구함으로써 반나절만에 구현해냈다. 또한 명상의 테마를 고를 수 있는 컴포넌트의 CSS 처리 또한 역량 부족으로 구현하기 어려웠는데, 이 또한 팀원에게 도움을 요청해서 완성할 수 있었다.
Problem
원래 포스트의 상세 정보를 확인하는 페이지의 구현 담당이었는데, CSS 스타일이 제대로 적용되지 않는 문제를 오랜 시간동안 해결하느라 다른 중요한 부분들에 대한 구현이 점점 늦어지고 있었다. 결국 이 페이지는 다른 팀원 분이 구현하게 되었다.
Try
구현 상 어려움을 만났을 때 고민하다보면 언젠간 완성할 수 있겠지~ 라는 낙천적인 생각을 하지 말고 일정표를 보고 ‘지연 가능성이 있겠다’라는 생각이 들자마자 팀원에게 도움을 요청해야 할 것 같다.
팀 컨벤션과 스크럼에 기반한 협업과 팀원들 간 소통에 대해
코드 컨벤션과 스크럼, 깃 브랜치 전략 등을 포함한 협업 방식과, 슬랙 / 디스코드를 활용한 소통은 어땠나요?
김민재
Keep
늦게나마 git issue를 사용했었는데 오류를 공유하고 파악하기가 더 쉬웠고 PR도 연결해서 오류를 해결하고 공유하기가 편했습니다.
슬랙을 통해 비동기 커뮤니케이션을 하면서 질문을 하고 답을 기다리는 시간에 기능개발을 할 수 있어서 시간을 많이 확보할 수 있었던 것 같아서 좋았습니다.
Problem
PR Merge를 위해서 Approve를 두명이상 받아야 하는 부분과 해당 일 6시간 안에 리뷰하기 같은 규칙은 좋았다고 느껴지지만, 저를 포함해서 개발하느라 해야할 PR 리뷰를 놓치는 경우가 종종 있었던 것 같습니다.
Try
프로젝트 초반부터 Git Issue를 적극 사용해보기
김혜성
Keep
이슈에 대해 즉각적으로 리액션이 있었다.
Problem
스크럼이 ‘오늘 내가 무엇을 했다’에 집중됐던 것 같다. ‘오늘 이런 것을 했는데 이런 오류를 겪었다’ 또는 ‘오늘 이런 것을 했고 이 부분은 다 같이 알아야 하는 부분이니 공유하겠다’ 이런 부분까지 확장해서 다뤘다면 더 효율적이지 않았을까?
팀 회의 시간이 종종 지나치게 길어지는 듯한 느낌을 받았다. 깃 이슈, 칸반보드 등을 적극 활용했다면 회의의 역할을 대신할 수 있지 않았을까?
팀 소통 수단에 대한 이해가 각각 조금씩 달랐던 것 같다. 누구는 깃 이슈를 쓰고 누구는 칸반보드를 쓰고 하다보니 결국 회의를 통해 해결하려고 했던게 아닐까?
컨벤션이 결국 잘 지켜지지 않았는데, 우선 나를 포함한 개인의 컨벤션 숙지 부족과 새로 추가된 컨벤션이 공유되지 못했던 이유가 컸던것 같다.
Try
회의 or 스크럼을 통해 상황을 공유하기 보다는 깃 이슈, 칸반보드 등 툴을 통해 공유하자.
스크럼은 문제 해결 중심으로 진행해보자.
eslint의 옵션을 활용하여 컨벤션을 자동화 해보자.
프로젝트를 시작할 때 세세하게 코드 컨벤션을 만들고, 새로운 컨벤션은 즉각 반영하자. 헷갈리는 부분은 항상 문서화된 컨벤션을 확인하자.
박나연
Keep
브랜치를 간단히 페이지별로만 나누는 것이 아니라 세부적으로 자신이 구현할 기능들에 따라 브랜치를 나누고, 나눈 브랜치에서 개발하고 머지 후 삭제하는 브랜치 전략은 훌륭한 전략이었다. 충돌나는 것이 현저히 적었고, 브랜치를 세부적으로 나누다 보니 브랜치 내에서 구현 해야 할 것들에 집중하여 개발할 수 있었다.
Problem
코드 컨벤션이 잘 유지되지 않았다. 코드 컨벤션에 대한 코드 리뷰가 적극적으로 진행되었어야 했을까 아니면 더 자세한 코드 컨벤션 정리가 이루어졌어야 했는지 많은 생각이 든다.
스타일이 디테일하게 적용하지 못했다(나를 포함) 적용되지 않다 보니 나중에 전체적으로 스타일에 대한 디테일 수정이 이루어졌다. 코드 리뷰 때마다 스타일 디테일 적인 부분을 잡았어야 했나? 라는 생각도 든다.
스크럼 시간을 제대로 활용하지 못했던 것 같다. 오늘 해야할 일 공유 정도로만 스크럼 회의가 그쳤던 것 같다. 만약 더 유익한 회고 시간이 되려고 한다면 지금 자신이 만난 이슈를 간단하지만 팀원들이 이해할 수 있을 만큼의 글로 작성되었어야 할 것 같다.
Try
코드 컨벤션을 잘 숙지하고 최대한 규칙을 지키자!
다음 팀에서는 각자 오늘 해결하지 못한 이슈에 대해 짧은 글을 작성해보자는 의견을 내보려고 한다.
조수연
Keep
- 컨벤션 초기 지정
자칫 거슬릴 수도 있는 자잘한 컨벤션을 팀 프로젝트 초반에 미리 적용해놓길 잘했다는 생각이 든다. 그렇지 않았다면 PR 리뷰마다 일일이 스크럼에서 코드 컨벤션을 지정하며 시간을 소비했을 거라는 생각이 든다.
- PR approve Rule
Pull Reqeust 를 위해 reviewer 들 2명의 승인을 받은 룰도 좋았다. 혼자서 알 수 없었던 문제를 방지할 수 있기도 하고, 팀 전체의 코드 수준을 끌어올릴 수 있는 방법이었기에, 다음 팀에서도 적용하고 싶다.
Problem
- 지켜지지 않는 컨벤션들
컨벤션 규칙을 세워도 그 모든 컨벤션을 빠짐없이 지키기란 쉽지 않은 문제인 걸 안다. 변수 네이밍이나 개개인이 코드를 작성하는 방식 자체는 어쩔 수 없는 문제이지만, 이왕 세운 규칙을 이후에 재논의하는 일이 없도록 ESLint 나 Prettier 를 더 적극적으로 활용할 수 있지 않았을까 하는 아쉬움이 든다.
- 효율적인 PR Review
PR Reviewer 로 등록되었음에도 이를 뒤늦게 확인하거나, 리뷰할 코드를 읽는 데 많은 시간을 썼다는 느낌이 든다. 어떻게 해야 더 효율적인 리뷰를 할 수 있는지 고민하기보단 기능 구현이 급급했다.
Try
- ESLinst, Prettier
- 이번 프로젝트가 마무리되어갈 무렵 이전 기수 선배(?) 님으로부터 조언을 받았는데, ESLint 에 생각보다 많은 기능이 있었다. import 규칙이나 type 명시 등이 그러했다. 다음엔 관련된 ESLint 규칙을 더 꼼꼼히 찾아보아야겠다.
- 꼼꼼한 PR 규칙
- 여러 팀 프로젝트의 PR 템플릿을 살펴보고, 코드 작성자와 리뷰어들 모두가 편할 수 있는 템플릿을 만들어 코드를 파악하기 쉽도록 하고 싶다.
- 깃 허브에서 제공하는 자동 라벨링 기능을 활용하여 어떤 파일이 변경되었는지 직관적으로 표시하고 싶다.
홍창기
Keep
오픈 스크럼 / 클로즈 스크럼을 통해 팀원들의 개발 진척 상황을 파악하고, 현재 당면한 어려움은 있는지, 빠르게 논의할 사항을 사전에 공유함으로써 팀 전체의 일정 관리와 개발 효율을 올릴 수 있었다. Github에서 브랜치 병합 규칙을 설정해서 꼼꼼한 리뷰가 필수적으로 이루어지게 한 것도 좋았고, 프로젝트 막바지에 도입한 것이지만 Github의 Issue 기능을 활용한 이슈 관리 방식도 PR과의 연계, Slack 알림 연동을 통해 Issue 할당자에게 빠르게 이슈 내용을 전달할 수 있던 점에서 좋았던 것 같다.
Problem
우리 팀은 당일의 채팅 스레드 내 댓글 수가 많은 편이었다. (평일 기준 평균 100개?)
단순하게 생각하면 프로젝트에 대해 활발한 소통 문화가 잘 적용되어있구나… 싶을 수 있겠지만 댓글을 남기는 데 드는 것은 결국 시간과 에너지로 구성된 비용이다. 즉, 댓글 수가 많은 것은 어디선가 소통의 비효율성이 발생했다는 뜻도 포함할 수 있는 것이다. 중간에 멘토님께서 커피챗을 통해 조언해주신 각 멤버별 작업 진행 상황을 한 눈에 파악할 수 있도록 하는 칸반 보드의 도입이나 Slack에서 Github에 관한 알림을 받을 수 있도록 조치한 것 덕분에 소통 비용이 많이 줄었다고 생각했는데, 그럼에도 프로젝트 마감 전날, 당일을 제외하고 댓글 수가 많은 날들이 종종 있었다.
그리고 프로젝트 초반에 작성했던 프로덕트 백로그 문서를 잘 활용하지 못한게 아쉬웠다. 아무래도 해당 문서를 구글 독스에 딱딱한 디자인의 액셀 파일로 업로드한 뒤, 노션에 링크를 올리는 식으로 활용하다보니 노션에서의 연계성도 떨어질 뿐더러, ‘프로덕트 백로그’라는 문서 자체가 익숙치 않은 팀원도 있을 것이었다.
Try
2-depth 이하의 깊이로 끝낼 수 있는 간단한 질의응답을 제외하고 나머지 팀원간 논의는 음성을 통해 진행되도록하는게 어떨까…? 라는 생각을 했다. 음성으로 생각을 전달하는 방식보다 텍스트로 정리해서 생각을 전달하는 것을 선호하는 팀원도 있겠지만, 꼬리질문이 3번째 들어오는 상황이면 그런 팀원분도 차라리 잠깐 다른 회의실에서 빠르게 논의하고 내려오는게 어떨까요? 라는 생각을 하게되지 않을까 싶다.
그리고 백로그에 대해 시도할 만한 것은 에픽을 Github에 있는 Milestone으로 관리하고, 스토리는 Github Projects에서 관리하는 방법이 있을 것 같다.
담당한 업무에 따른 스스로의 일정 관리에 대해
스프린트 단위의 일정한 주기동안 코어타임에 공유한 각자의 업무는 잘 수행되었나요? 더 좋은 일정 관리 방법이 있었을까요?
김민재
김혜성
Keep
작업의 데드라인을 스스로 잘 설정하고 지켰다.
Problem
각 기능 개발에 대한 man/day를 나름대로 정했지만 계속해서 유지하지 못했다. 귀찮은 걸 정말 극도로 싫어하는 것 같다.
스프린트 목표 설정, 일정 관리가 프로젝트 전체적인 부분에서 이루어지지 못하고 바로 앞에 놓은 기능 개발에 대한 것에 그쳤다.
칸반보드를 도입했지만 개인적으로 잘 사용하지 않았다.
Try
개발을 시작하기 전에 충분한 시간을 가지고 프로젝트 전반적인 계획을 세부적으로 잡아보자.
깃 이슈, 칸반 보드, jira 등 일정 관리를 위한 툴을 사전에 정하고 적극 사용해보자.
박나연
조수연
Keep
- 우선순위 분배
어떤 기한을 정하면 딜레이되는 태스크들이 별로 없었다. 지나치게 욕심을 내서 완성도를 올리느라, 혹은 지난 태스크를 붙잡고 있느라 기한이 늦어지는 일은 없었다. 다들 책임감이 높은 덕분도 있겠지만 우선순위를 설정하고 무엇이 급한 일인지 팀원들 내에서 조정한 덕분이라고 생각한다.
또 비교적 늦게 스프린트 개념을 세우고 도입했음에도 불구하고 개개인이 각자의 우선순위를 팀원들에게 공유하고 다른 팀원들의 의견을 구한 덕에 기능 구현이 정상적으로 이뤄졌다고 생각하여, 다음 팀에서도 효율적인 시간 분배를 위해 이 점을 도입하고 싶다.
Problem
- 진행 사항 공유
칸반보드를 작성하고, 스크럼을 진행했음에도 각자 어떤 페이지를 담당하고 있다는 점만 인지한 상태로 얼마나 작업이 진행되었는지에 대해선 불투명했다는 생각이 든다. 더 명료하게 서로의 진행사항을 전달하고 받을 수 있는 규칙을 세우면 좋았을 것 같다.
Try
- 스프린트 일정
- 개발 일정이 진행되기 전에 스프린트 일정을 세워서 주차별로 완료될 사항을 정리하면 다같이 설정한 계획 내에서 개발이 진행되기 때문에 현재 진행사항을 더 빠르게 파악할 수 있을 것 같다.
- 팀원이 모두 참여할 수 있는 시간 & 요일을 고정하여 스프린트를 진행하고자 한다.
- 프로그레스 바
- 일정 파악의 연장선 이야기이지만, 깃허브나 노션의 프로그레스 바를 사용하여 기능 구현 사항을 잘게 쪼개서 공유한 뒤 체크하는 방식으로 진행하면 팀원들이 할당한 기능을 어떻게 구현하는지 & 얼마나 진행되었는지 한눈에 파악하기 쉬워 다음 팀 프로젝트에선 적용해보고 싶다.
홍창기
Keep
개발 일정에 대한 정보를 팀원들간 공유하기 위해 칸반 보드를 도입했다. 칸반 보드에 어떤 Task를 등록한다면 해당 Task의 등록일, 완료 예정일, 실제로 완료한 일을 포함시켜 작성하도록 했다.
Problem
칸반 보드가 노션 플랫폼에 있었기 때문에 개발하면서 팀 전체의 작업 상황을 수시로 확인하기가 어렵다는 단점이 있었고, 그로 인해 칸반 보드 자체의 활용률이 감소해버리는 문제가 있었다. 그리고 실제로 해당 Task를 완료한 일자를 기록했는데, 완료 예정일이 실제 완료일보다 앞선다면 이 Task는 지연된 Task로 분리했지만 지연된 Task가 생겼을 때 해당 지연된 Task의 할당자는 아무런 불이익을 받지 않았다. (그냥 좀 하핫… 하고 머쓱해지는 정도?)
Try
Github의 Projects를 적극 활용하고, Task를 지연시킨 팀원에 대해 불이익을 줄 수 있는 장치에 대해 고민해볼 수 있을 것 같다. (일정 기간동안 Repository Write Access를 박탈한다거나…)