[네이버부스트캠프 웹・모바일 10기] 멤버십 22주차 회고
- 네이버부스트캠프
- 회고

들어가며
최종 발표를 앞두고 주말 내내 이어온 리팩토링을 월요일까지 마무리하고, 여러 시나리오로 테스트를 반복하며 드러나는 오류들을 하나씩 잡아 나갔다. 테스트를 돌릴 때마다 예상치 못한 엣지 케이스가 계속 튀어나왔고, "이 정도면 충분하겠지"라는 생각은 끝까지 하기 어려웠다. 그래도 오류를 하나 고칠 때마다 서비스가 단단해지는 게 느껴져, 피로감보다 안정감이 더 컸다.
그룹 프로젝트 마지막 목표는 최종 발표를 실제 화상 강의 상황에 가까운 데모로 보여주는 것이었다. 화상 강의에 쓰이는 도구인 만큼, 이 서비스가 왜 필요한지, 기존 강의 환경의 어떤 불편함을 해소하는지, 다른 서비스와 무엇이 다른지를 청중이 발표를 따라가는 과정에서 자연스럽게 체감할 수 있도록 구성하고자 했다.
실제 사용자처럼 매일 서비스를 두드리다
지난주 오픈 스테이지에서는 많은 이슈가 드러났고, 팀원들과 함께 원인을 빠르게 파악해 하나씩 해결해 나갔다. 그 결과 눈에 보이는 오류의 수가 이전보다 확연히 줄었고, 기능 전체의 안정성도 많이 높아졌다. 이슈를 하나씩 빠르게 쳐내며 PR이 연달아 올라오는 모습이 눈에 들어왔다. 괜히 속이 뜨거워지는 느낌이었다.
이번 주에도 매일 Plum에 접속해 실제 사용자처럼 기능을 사용하며 테스트를 이어갔다. 화면 전환, 입장과 퇴장, 네트워크 이슈 등 실제 강의에서 충분히 일어날 법한 상황들을 떠올리며 어떤 문제가 생길 수 있을지 계속해서 고민했다. 발견된 문제들을 그때그때 정리하면서 우선순위를 정해 개선해 나갔다. 이런 식으로 반복해서 서비스에 압력을 가하다 보니, 단순히 오류를 줄인다기보다 실제 사용 시나리오에 더 잘 맞는 형태로 다듬어지고 있다는 느낌을 받을 수 있었다.
돌아가지만 확신이 서지 않는 코드를 다시 짜다
프로젝트가 막바지로 갈수록 코드가 점점 지저분해지고 있다는 생각이 강하게 들었다. 특히 내가 맡은 영역을 다른 사람이 수정하거나 읽어야 하는 상황을 떠올리면, "이 코드를 그대로 넘겨도 괜찮을까?"라는 걱정이 늘 따라붙었다. 기능은 돌아가지만, 코드 자체에 대한 확신은 점점 줄어들고 있다는 점이 마음에 계속 걸렸다.
결국 불안을 만드는 코드가 과연 좋은 코드일까라는 질문을 스스로에게 던지게 되었고, 이를 계기로 구조를 다시 설계하는 리팩토링에 집중하기로 했다. 컴포넌트와 파일 이름을 역할이 잘 드러나도록 정리하고, 한 함수에 섞여 있던 책임들을 더 작은 단위로 쪼갰다. 덕분에 나중에 이 코드를 보게 될 사람도 전체 흐름과 의도를 훨씬 수월하게 파악할 수 있게 되었다.
전체 흐름을 다시 그리며 책임을 나누다
지난주부터 이어진 구조에 대한 고민을 본격적으로 풀어내기 위해, 이번 주에는 전체 흐름을 다시 그려 보며 코드를 재구성했다. 특히 mediasoup 관련 로직을 다른 비즈니스 로직과 분리하고 싶다는 생각이 강해서, 역할별 책임을 나누고 의존성을 줄이는 방향으로 모듈을 쪼개기 시작했다.
"이 부분은 왜 이렇게 엮여 있었는지", "어디까지가 이 모듈의 책임인지"를 생각하며 구조를 차츰 잡아나갔다. 다른 팀원들도 이해할 수 있는 코드를 기준으로 여러 번 구조를 바꾸고 되돌리는 과정을 거쳤다. 이 기준에 맞춰 설계를 다시 다듬다 보니, 다이어그램과 실제 코드 흐름을 나란히 놓고 봤을 때 각 부분이 맡은 책임이 훨씬 명확해진 상태로 정리되었다.

스스로에게 설명하며 근거를 점검하다
구조를 다듬는 과정에서는 지난주 아쉬움으로 남았던 부분도 함께 풀어냈다. 지난주에는 머릿속으로는 이해하고 있지만, 막상 말로 설명하는 순간 말이 꼬이고 흐름이 끊기는 아쉬움이 있었다. 그래서 이번 주에는 일정 단위 작업을 마칠 때마다 지금 무엇을 하고 있는지, 왜 이렇게 하고 있는지를 스스로에게 말로 설명해 보는 연습을 했다. 입 밖으로 꺼내다 보니 근거가 충분하지 않은 결정에서는 다시 한번 더 고민하게 되었다.
어떤 부분은 설명을 하다 보니 스스로도 납득이 되지 않아, 다시 다이어그램과 코드를 들여다보며 책임을 조정해야 했다. 이런 과정을 반복하면서 "이 기능은 왜 여기에 있어야 하는가?", "이 의존성은 정말 필요한가?"를 더 자주, 더 구체적으로 묻게 되었다. 말로 스스로를 설득할 수 있을 때, 비로소 그 코드가 진짜 내 코드가 된다는 걸 느꼈다.
Plum에서 최종 발표를 진행합니다.
최종 발표는 처음부터 끝까지 Plum 안에서 라이브 데모 형식으로 진행했다. 약 30명이 동시에 입장한 상태에서 실제 강의가 시작되고 흐름이 이어지는 것처럼 시나리오를 구성하고, 그 안에 주요 기능들을 하나씩 자연스럽게 녹여 소개했다.

발표가 끝나자마자 AI 요약 기능을 실행해 두고, 요약이 생성되는 동안 QnA를 받는 방식으로 시간을 설계했다. QnA가 활발하게 이어지는 사이 요약이 완료되어, 대화가 마무리될 즈음 요약본을 함께 확인하는 타이밍이 자연스럽게 맞아 떨어졌다.

발표 이후 돌아온 피드백
감사하게도 많은 분들이 적극적으로 의견을 남겨 주었다. 전반적인 완성도와 안정성에 좋은 평가가 많아, 그동안의 노력이 인정받은 듯해 뿌듯했다. 오픈 스테이지 이후 실사용에 가까운 테스트의 중요성을 느끼고 매일 Plum에 접속해 다양한 상황을 점검했던 경험이 발표에서 빛을 발했다고 생각한다.

강의 요약 기능에 대한 반응이 특히 좋았다. 마스터클래스를 들으며 "놓치는 내용이 너무 많다"라고 느꼈던 경험에서 출발한 기능인데, 그 니즈가 다른 캠퍼들의 경험과도 잘 맞아떨어진 것 같다. 제스처 인식도 인상적이었다. 캠퍼들이 적극적으로 사용해 주면서 분위기는 가벼워지고 집중도는 오히려 높아졌다. 추가되면 좋을 기능이나 사용성에서 아쉬웠던 점 같은 구체적인 피드백도 많아, 다음 단계의 우선순위를 또렷하게 정리할 수 있었다.
물론 부족한 부분도 있었다. 발표 중 브라우저가 크래시 났다는 피드백이 있었다. Zoom과 Plum을 동시에 실행하면 간헐적으로 크래시가 나는 문제는 이전부터 알고 있었지만, 원인을 찾지 못해 남겨 두고 있었다. 이번에 다시 마주한 만큼 리소스 사용량과 메모리, CPU 부하를 측정하며 원인을 추적해 보려 한다. 성능 때문에 제외했던 '참여자 목록 스크롤'에 대한 피드백도 있었다. 서버 부하를 낮추려는 결정이었지만, 사용자 입장에서는 기대했던 편의성이 빠진 선택일 수 있겠다는 걸 느꼈다. 경험을 해치지 않으면서 성능도 지킬 방법이 있는지 다시 들여다보려 한다.
그룹 프로젝트를 마무리하며
이번 프로젝트에서 가장 좋았던 점은 작업 분배가 유연하게 이루어졌다는 것이다. 각자의 역할과 담당 영역은 분명했지만, 상황에 따라 필요한 일을 먼저 가져가고 서로의 업무를 자연스럽게 돕는 흐름이 형성됐다. 겹치지 않게 분업은 하되 선을 긋지 않았다. 이런 방식이 가능했던 건 팀원 모두가 서비스 전반의 흐름을 이해하고 있었고, 풀스택 과정을 따라가며 관련 지식이 쌓여 있었기 때문이라고 생각한다. 정말 실력 있는 분들이 모인 팀이었고, 그래서 여기까지 올 수 있었다고 믿는다.
그래서인지 아쉬움도 함께 남는다. 하나는 초반에 규칙과 설계를 더 단단히 잡았으면 어땠을까 하는 점이다. 코드 스타일, 디렉토리 구조, 의사결정 방식 같은 기준을 초기에 조금만 더 구체적으로 정리했다면, 코드 품질을 더 끌어올리고 불필요한 시행착오를 줄일 수 있었을 것 같다. 다른 하나는 테스트 코드다. 요구사항 변화와 리팩토링에 맞춰 자주 고치다 보니 어느 순간 이게 정말 믿을 수 있는 테스트인가?라는 의문이 들었는데, 구현이 바뀔 때마다 함께 흔들린다면 그건 변하지 않는 기대 행동을 검증하는 테스트가 아니다. 다음에는 '무엇을 검증할 것인가'를 먼저 정하고 테스트를 작성해 보려 한다.
프로젝트가 공식적으로는 마무리되었지만, 팀원들과 논의한 끝에 Plum을 조금 더 개선해 보기로 했다. 시간의 제약 때문에 미뤄 두었던 문제들을 다시 꺼내 하나씩 시도해 보고, 기술적으로 어렵다고 느껴졌던 부분들을 중심으로 구조와 성능을 더 깊이 파고들 생각이다. 지금까지의 리팩토링은 일정과 오류 수정에 쫓기며 진행했으니, 새로운 기능을 얹기 전에 충분한 리팩토링 기간부터 확보하려 한다. 구조, 네이밍, 테스트까지 한 번 더 정리한 뒤, 그 위에 다음 버전의 Plum을 쌓아 올리고자 한다.
정리하며
이번 프로젝트가 이전 프로젝트들보다 유난히 완성도 높게 느껴진 이유는, 기능 구현에서 멈추지 않고 테스트와 모니터링까지 시도하며 서비스 전체를 더 넓은 관점에서 바라봤기 때문인 것 같다. 화면에 보이는 결과물뿐 아니라 서비스가 어디서 병목이 생기고 어떤 상황에서 문제가 터지는지를 직접 확인하면서, 서비스 단위로 생각하는 경험을 처음으로 제대로 해 봤다. 기간도 길고 강도도 높았는데, 끝난 뒤에도 계속 개선하고 싶은 욕심이 생기는 건 이번이 처음이었다. 배운 점이 많은 만큼 정리하지 못한 것도 많아서, 차분히 하나씩 정리하고 다음 단계로 나아가고자 한다.
그리고 프로젝트와 함께, 끝나지 않을 것만 같던 부스트캠프도 끝이 났다. 시간이 이렇게까지 빠르게 흘러갈 줄은 몰랐고, 막상 수료하고 나니 아직 준비가 덜 됐다는 느낌이 든다. 이제는 매주 미션이 나오지도, 일정에 맞춰 이끌어 주는 구조도 없다. 앞으로는 지금까지 쌓아 온 프로젝트와 학습의 기록을 토대로 스스로 방향을 잡아야 한다. 부스트캠프에서 지내온 시간을 떠올리며, 그 밀도를 잃지 않고 달려 보려 한다.
그 22주를 버틸 수 있었던 건 매주 빠짐없이 이어온 회고 덕분이었다. 어느새 22주치 기록이 쌓였다는 사실이 아직도 실감 나지 않는다. 회고에 들인 시간은 아깝지 않았고, 내가 어디까지 와 있는지 무엇을 계속 가져가야 하는지를 확인하는 데 큰 도움이 되었다. 앞으로도 회고의 습관만큼은 꾸준히 이어 가 보려 한다.