[네이버부스트캠프 웹・모바일 10기] 멤버십 13주차 회고
- 네이버부스트캠프
- 회고
들어가며
그룹 스프린트의 마지막 구현 주차였다. 남은 작업이 1, 2주차 못지않게 많아 걱정도 되었지만, 예상보다 많은 부분을 구현할 수 있어 다행이었다. 중간중간 이번 프로젝트에서 부족했던 점들을 돌아보며 어떻게 더 개선할 수 있었을지 고민하는 시간도 많았다. 아쉬운 점들이 남긴 했지만, 이만큼 완성했다는 사실만으로도 충분히 의미 있다고 느꼈다.
마지막 데모 시간에는 다른 팀들의 완성된 결과물을 보며 많은 인사이트를 얻었다. 활발히 오간 질문과 답변 덕분에 미처 생각하지 못했던 관점을 접할 수 있었고, 특히 우리가 생각만 하고 실제로 구현하지는 못한 부분들을 관심 있게 살펴보았다. 이번 주말에는 그들의 코드와 기록들을 살펴보며 어떻게 진행해왔는지 참고해보고자 한다.
챕터 단위로 쌓인 개념을 그래프로 잇기로 하다
남은 일주일 기간에 맞는 계획을 세우고 완수하는 것, 스트레스 받지 않는 행복한 개발 흐름을 유지하는 것, 설계 및 구현 고민 과정을 문서로 기록해 팀 전체의 이해도를 높이는 것, 시간에 쫓기지 않으면서도 각 작업의 완성도를 높여 안정적인 데모를 준비하는 것이 이번 주 목표였다.
팀 내 목표는 개발보다 외적인 부분에 초점이 많이 가 있어서, 개인적으로는 실제 동작 방식과 구현된 방식이 일치하는지, 그렇지 않다면 어디까지 신경 썼는지를 따로 목표로 세웠다. 80% 정도는 이루었다고 본다. 새로운 기능을 추가할 때마다 실제로 어떻게 동작할지 생각하며 작업했지만, 알고 있는 개념과 얕게 찾아본 개념을 적용하다 보니 정확하지 않은 부분도 있었을 것이다. 이에 대한 학습이 더 필요하다.
애매하게 아는 개념이 여전히 입 밖으로 나오지 못했다. 키워드는 떠오르지만 이들을 연결하지 못했다. 복습이 부족했던 건지, 제대로 이해하지 못한 건지부터 차근차근 정리해보려 한다. 머릿속 지식이 시험공부하듯 챕터 단위로만 정리된 탓에 연결고리를 찾지 못하는 것 같다. 옵시디언의 그래프뷰처럼 개념끼리 연관 지어 연결하는 작업이 필요하다고 느꼈다.
익숙한 방식을 내려놓고 팀원들의 방식을 받아들이다
부스트캠프 이전의 협업에서는 주로 팀장을 맡았다. 하지만 조율을 잘해서가 아니라 경험이 조금 더 많았기 때문이었고, 팀 운영도 익숙한 도구와 이전 템플릿을 가져와 늘 하던 방식을 반복하는 데 그쳤다.
그래서 이번에는 내 방식을 제안하기보다 팀원들의 다양한 방식을 받아들이고 그 이유를 생각해보려 했다. 다행히 팀원들 모두 협업 경험이 풍부했다. 문서 관리, git 전략, 작업 진행 방식을 경험하며 왜 이 방식이 더 효과적인지 고민했고, 처음 써본 슬랙, GitHub 프로젝트, 노션을 팀원들이 체계적으로 활용하는 모습에서 많이 배웠다.
슬랙, GitHub 프로젝트, 노션을 제대로 쓰는 법을 배우다
슬랙은 이전에 디스코드만 활용했었는데, 부스트캠프에 들어오면서 처음 사용해보았다. 그룹 슬랙에서 스레드 기능을 적극적으로 활용한 덕분에 원하는 이슈를 쉽게 찾을 수 있었고, 각 이슈가 독립적으로 관리되어 효율이 높아졌다. 특정 이슈에 대해 팀원들이 나눈 의견을 스레드로 한 곳에 모아볼 수 있었던 점이 인상적이었다.
GitHub 프로젝트는 이전 미션에서 처음 써보고 다루기 어렵다고 느꼈던 도구다. 이번에는 잘 다루는 팀원 덕분에 많이 배웠다. 마일스톤과 이슈를 함께 쓰니 팀 진행 상황과 작업 단위별 내용을 한눈에 파악할 수 있었다. 다만 모든 팀원이 성실하게 최신화해야만 의미가 있다는 게 단점이었다. 첫 주차에는 모두 낯설어 최신화가 잘 안 됐지만, 논의를 거쳐 개선한 뒤로는 칸반 보드가 늘 활성화됐다. 내 작업이 끝나면 남은 일을 확인하고 바로 다음 작업에 투입할 수 있었다.
노션은 늘 써와서 자신 있었지만, 이번에 정말 일부 기능만 알고 있었다는 걸 깨달았다. 나는 직접 작성하거나 복사/붙여넣기를 반복했을 뿐인데, 팀원들은 정보를 적절히 나누고 데이터베이스끼리 연동하며 자동화까지 활용했다. 데이터베이스를 단순한 표로만 생각했던 나에게는 신기한 방식이었다. 특히 한 팀원이 버튼 한 번으로 데일리 스크럼 페이지를 만들고 캘린더에 자동 등록되게 해 매일 반복하던 작업이 크게 줄었다. 정적인 HTML만 다루다 AJAX를 처음 접한 듯한 신선한 경험이었다.
기존 같으면 프로젝트 초반에 존재하던 템플릿을 복사해와 그대로 사용했을 것이다. 빠르고 다른 고민을 해보지 않아도 되니 안주하기 쉬웠기 때문이다. 하지만 이번에는 다른 팀원들의 활용 방식을 적극 반영하고 배워보려 노력했고, 어떤 점에서 효율적이고 효과적인지 고민하며 그 장점을 확실히 가져가려 했기에 많이 배울 수 있었다고 생각한다.
분위기가 좋은 것과 협업이 잘되는 것은 다르다
평소 팀장 역할을 선호하지 않았다. 이끄는 것보다 옆에서 분위기와 사람을 챙기는 데 자신 있었고, 그래서 팀 프로세스를 깊이 고민해본 적이 없었다. 이번 주차에는 부스트캠프에서 계속 상기시키는 '분위기가 좋은 것과 협업이 잘되는 것이 같은가'를 생각해보았다. 분위기가 나쁘면 협업에 지장이 있지만, 너무 들떠도 방해가 된다. 즐거운 분위기에서 작업으로 자연스럽게 돌아오는 과정이 늦어질수록 팀 전체도 늦어지기 때문이다.
그동안은 작업으로 돌아올 수 있는 말을 해주는 사람이 좋은 리더라고 생각했다. 하지만 그런 사람이 특별한 게 아니라, 팀 내에서 이런 과정이 자연스럽고 당연해야 협업이 잘된다는 생각이 들었다. 어쩌면 그동안 누군가에게 책임을 미루고 있었던 건 아닐까 하는 반성도 하게 되었다. 일과 그 외적인 경계가 명확하고 팀 모두가 작업을 최우선으로 인지하는 것이 건강한 협업이라고 느꼈고, 너무 들뜬 분위기로 이끄는 것에 대한 점검과 나만의 기준을 만드는 것도 좋은 방향이라 생각한다.
몇 명을 버틸 서비스인지부터 정했어야 했다
요구사항에 맞춰 기능을 도출하고, 그에 알맞은 기술을 도입하며 구현해나가는 것이 목표였다. 추가 요구사항에 다중 사용자 지원이 있었지만 선택 사항이라 논의가 자꾸 뒤로 밀렸다. 다중 사용자를 고려하면 기능 구현 방식이 분명히 달라지는데, 별도 필드 생성과 다양한 기술적 고려가 필요하다는 걸 놓친 채 진행하다 후반부에 많이 수정해야 했다.
다중 사용자 지원이 선택 사항으로 미뤄진 게 원인이었다. 초기부터 이를 목표로 삼았다면 확장성 고려가 더 철저했을 것이고 중간의 고민과 수정도 줄었을 것이다. 목표가 명확하지 않아 반복적인 수정과 고민이 계속됐다.
마지막 주차인 만큼 배포 서버를 공유해 여러 사용자가 접속해 테스트를 진행했는데, 다른 팀의 서비스를 살펴보니 다수 사용자가 접속할 때 문제가 발생하는 경우도 있었다. 이 과정에서 '사용자가 많아질 때 우리 서비스는 잘 버틸 수 있을까'라는 근본적인 질문에 도달했다. 우리 팀은 파일 입출력을 사용 중인데, 다수 사용자가 동시에 읽기/쓰기할 경우 데이터 충돌과 레이스 컨디션이 발생할 수 있다. 또한 파일 입출력은 디스크 I/O에 의존하므로 동시 접근이 많으면 대기 시간과 병목 현상이 발생해 성능이 크게 저하될 가능성이 있다.
특정 기술로 성능을 개선하려는 시도도 필요하지만, 우리 서비스는 몇 명까지 안정적으로 지원하는지와 그 한계 내에서 문제점은 무엇인지 구체적으로 정의하고 설명하는 것이 더 현실적이고 좋은 접근이라는 생각이 들었다. 앞으로는 프로젝트 초기에 목표 사용자 수를 명확히 설정하고, 이를 기준으로 기술 선정과 설계, 성능을 고민하고 설명해보고자 한다.
AI가 다듬은 문서에서 우리의 언어가 희석되다
AI 활용의 목표는 프로젝트 내 각 구현 단계에서 적절하게 AI를 활용하는 것이었다. 구체적인 제한을 두지 않은 이유는 활발한 코드 리뷰 과정을 통해 결과물을 지속적으로 검토하고 개선할 수 있다고 판단했기 때문이다. 팀 내 구현 과정에서는 AI가 적절히 잘 활용됐다고 생각한다. 모두가 마지막 주차까지 활발하게 코드 리뷰를 진행했고, 팀원들이 자신의 코드를 명확히 설명하고 이해시키는 모습도 볼 수 있었다.
다만 문서 작성에 AI를 활용한 부분은 아쉬움이 남았다. CS 연결고리 문서를 작성하는 과정에서 AI로 중간에 문서를 다듬었는데, 우리가 말하지 못한 단어들을 AI가 추가하고 표현을 다듬으면서 오히려 우리 고유의 고민이 담긴 언어가 희석된 느낌이었다. 좀 더 활발히 토론하며 우리만의 언어로 문서를 작성하거나, AI가 만든 내용과 우리가 작성한 내용을 비교하며 다시 논의하는 과정이 있었다면 더 도움이 되지 않았을까 싶다.
당시 느낀 점을 솔직히 표현하지 못한 것도 아쉽다. 모두가 피곤하고 힘든 상황이었지만, 누군가는 그런 분위기를 깨고 의견을 제시해야 팀이 성장할 수 있다. 익숙함과 귀찮음에 젖은 것 같아 후회가 된다.
AI의 발전이 본질적인 고민과 탐구에 집중하는 시간을 줄이고 흐름을 방해하는 측면이 있는 건 아닌지, AI 없이 직접 고민하고 부딪히며 얻을 수 있는 부분들을 놓치고 있는 건 아닌지 생각하게 된다. AI는 팀 대화나 논의 과정을 정리하고 구조화하는 데는 분명 유용하지만, 그렇게 정리된 내용을 다시 토론하거나 AI가 제안하는 새로운 아이디어를 충분히 활용하지는 못한 것 같다. 도구를 쓰는 것에 그치지 않고 더 깊이 있게 활용할 방법을 고민해야 할 시점이다.
리팩토링 기간에는 전체 흐름부터 그려보기로 하다
팀원 모두가 열심히 참여해 많은 기능을 구현했고 다양한 의견이 활발히 오갔다. 처음에는 모두가 NestJS에 익숙하지 않아 어려움을 겪었지만 점차 잘 활용하며 프로젝트에 대한 이해도도 높아졌다. 다음 리팩토링 기간에는 높아진 이해도를 바탕으로 전체적으로 검토하고 아쉬웠던 점들을 개선하는 데 힘쓰려 한다.
주말 동안 요구사항의 실제 동작 방식을 더 깊이 공부할 계획이다. 비슷한 구현을 하려면 동작 원리를 명확히 알아야 비교와 선택이 가능하다고 생각한다. 지금까지는 개별 단위에 필요한 내용만 부분적으로 살펴봤다면, 이번에는 전체적인 흐름과 내용을 연결해 큰 그림을 그려보며 동작 방식을 체계적으로 이해하려 한다.
다이어그램과 사용자 시나리오도 적극 활용할 계획이다. 실제 모듈들이 어떤 관계를 맺고 흐름이 어떻게 진행되는지 시각적으로 표현하는 다이어그램이 지금까지 부족해 흐름을 이해하는 데 시간이 더 걸렸다고 느꼈는데, 다른 팀들이 이를 효과적으로 활용하는 모습을 보며 참고해보려 한다. 사용자 시나리오도 처음 작성한 후 다시 검토한 적이 거의 없었으니, 작성한 시나리오를 실제로 따라가며 전체 흐름을 점검하고 그 과정에서 발생할 수 있는 오류와 문제점을 찾아보고자 한다.
회고를 마치며
부족한 부분들을 채울 수 있는 팀원들을 만나서 정말 행운이라고 생각한다. 늘 '평균은 되겠지'라고 생각하던 나에게 부족한 점을 많이 깨닫게 해주었고, 팀원들을 통해 이를 보충할 수 있었다. 깊이와 방법에서 큰 차이를 느꼈고 더 많은 학습이 필요함을 실감했다. 하나씩 익혀가며 그들을 쫓아가고자 한다.
그림을 그려보자. 아직 머릿속으로만 이해하기는 어렵다. 직접 하나씩 그려가며 어느 부분에서 막히는지 확인하고, 부족한 점을 보완해 나가자. 연결 다리를 하나씩 이어가며 내 머릿속에 하나의 지도를 완성하는 것이다.