네이버 부스트캠프의 6주간 팀 프로젝트 기간 이후 이번 기수에 진행된 프로젝트 중 하나를 선택하여 리팩토링할 수 있는 기회가 생겼다. 처음에는 당연히 그동안 했던 프로젝트를 하고 싶었다. 시간 상 구현을 못했던 부분이 있기도 하고, 바쁘게 보냈던 프로젝트 기간에는 집중하지 못했던 부분을 채워 나갈 수 있을 것이라 생각했다.
프로젝트 선정 과정
아쉽게도 기존 팀원 분들이 참여하시지 못하는 일이 생겼다. 리팩토링 기간에는 새로운 팀으로 프로젝트를 진행하는데 하고 싶은 프로젝트의 우선순위를 기준으로 팀이 결정된다. 1순위는 당연히 퀴즈 그라운드를 선택했다. 나머지 순위를 정할 때 기준이 있었는데, WebRTC
, canvas
, 생산성
, CRDT
키워드가 들어간 프로젝트를 선택하고 싶었다. 기억 상 2순위로 “방해꾼은 못 말려”, 3순위로 “Octo docs”를 선택했던 것 같다. 둘 모두 훌륭한 프로젝트이다. 새로운 리팩토링 팀이 결정되고 회의를 통해 방해꾼은 못 말려 프로젝트로 결정을 했다.
방해꾼은 못 말려는 구경꾼이 제시어를 보고 그림을 그리고, 방해꾼을 이를 방해하며, 구경꾼이 제시어를 맞추는 게임이다. 캔버스에 여러 플레이어가 동시에 그림을 그려야 하므로 웹소켓과 CRDT가 사용되었다.
CS 리팩토링
1월에는 3주간 CS 리팩토링을 진행했다. CS 리팩토링이 무엇이냐면 CS 지식 기반으로 프로젝트를 리팩토링을 하는 것이다. 알고리즘이 되었든, 테스트가 되었든 무엇이든 상관이 없다고 한다.
1주차에는 먼저 소스코드 분석을 했다. 처음에 방대한 프론트엔드 코드를 보고 살짝 쫄았다. 그러나 페이지를 기준으로 하나하나 뜯어보니 쉽게 이해할 수 있었다. 이 과정에서 이 프로젝트를 개발했던 분들의 의도와 생각을 조금 알 것 같았고 재밌었다.
전체적인 동작 원리를 알게 된 2주차에는 어떤 리팩토링을 할 지 정해야 했다. 처음에는 CRDT와 캔버스 로직 사이에서 성능 최적화를 할 수 있을 것이라 생각했다. 그러나 이 부분에 의한 성능 저하는 미미했고, 리액트 리렌더링에 의한 성능 저하가 더 컸다. 최적화 후 Playwright와 CDP를 통해 몇몇 지표가 크게 향상된 것을 확인했지만, 성능에 대한 뚜렷한 목표치가 없었다는게 조금 아쉽다.
3주차 마지막 날에는 “방해꾼은 못 말려”를 개발한 팀의 리팩토링 발표를 들었다. 이 팀에서는 라이트하우스 점수 향상과 선 보간법, OffscreenCanvas 등의 작업을 했었다. 같은 프로젝트인데도 결과가 이렇게 달랐던 점이 흥미롭기도 하고 아쉽기도 했다.
인공지능 리팩토링
2월에는 인공지능 리팩토링을 진행했다. 이름은 리팩토링이지만 사실상 인공지능을 이용한 기능 추가이다. 팀에서 다양한 인공지능 기능에 대한 다양한 의견이 나왔다. 그림을 그리는 AI, 그림을 맞추는 AI 등등. 중간에 인공지능 분야에서 일하시는 분과 멘토링도 했는데, 시간이 짧으므로 너무 어려운 기능은 피하라고 조언을 주셨다. 이후 추가적인 회의를 통해 캔버스에 그려진 글자를 인식해 삭제하고 제시어와 연관된 글자를 쓴 플레이어에게 패널티를 주는 기능을 기획했다. 이 프로젝트는 하나의 문제가 있었는데 캔버스에 제시어를 쓸 경우 구경꾼이 그걸 보고 그냥 맞출 수 있다는 것이었다. 이러한 문제를 인공지능으로 해결할 수 있으므로 좋은 선택이었다 생각한다.
로직 설계 및 구현은 순조롭게 진행되었다. 그러나 성능과 OCR 인식률에 문제가 조금 있어 이를 해결하기 위해 대부분의 시간을 투자했었다. 이후 쇼케이스에서 성공적으로 시연을 하고 기획한 인공지능 기능과 최적화 방법들에 대해 좋은 반응을 얻았다. CS 리팩토링은 아쉬웠던 점이 많지만 인공지능 리팩토링은 좋은 결과물을 낸 것 같다.
마치며
또 다시 6주 간의 리팩토링 기간이 끝났다. 벌써 2025년 2월의 막바지이다. 리팩토링을 하기 전에는 내가 했던 프로젝트를 리팩토링을 하고 싶었지만, 지금와서는 이 프로젝트를 리팩토링한 것이 오히려 더 좋았다고 생각한다. 부스트캠프에서 다른 팀의 프로젝트를 리팩토링을 하는 것을 추천했는데 그 이유를 알 것 같다. 실무에서 다른 사람의 코드를 만질 일이 많으므로 이번 경험은 앞으로 많은 도움이 될 것이다. 또한 프로젝트 기간 동안 흥미롭게 봤던 프로젝트의 코드를 볼 시간이 주어졌던 점도 좋았다.