리팩토링과 마이그레이션에 대해서. 나는 이제는 한번에 모든걸 바꿀 수 없다.
주니어 때는 관련된 부분을 전부 다시 만들곤 했다. 2~3일 정도 잠을 거의 자지 않고 작업한 뒤, 개발 서버와 웹사이트, 모바일 앱을 전부 준비해 테스트했다. 배포 전략도 테스트하고, Nginx 프록시 설정을 바꿔 한 번에 전환했다. 잘 동작하면 재미있었다. 오래된 코드가 사라지고 새 구조가 바로 서비스되는 느낌도 좋았다.
그러나 이제는 그렇게 하지 않는다. 호환성을 유지하며 점진적으로 전환한다. API를 바꿔야 한다면 버전에 따라 라우팅하거나, 일부 요청만 새 API를 사용하게 한다. UI라면 피처 플래그를 사용해서 제한된 사용자부터 새 기능을 노출한다.
서비스 전체를 옮기거나 새 프레임워크를 도입할 때도 같다. 새 시스템을 만들고 기존 시스템을 없앤 버전을 배포하기보다, 두 버전이 모두 동작 가능한 상태를 만들고 기능을 조금씩 옮긴다. 구버전과 신버전을 일정 기간 함께 유지한다.
거대한 스위칭에 대한 도파민은 사라지고, 일상적인 개선 작업이 된다.
이런 변화는 주니어와 함께 일하기 시작하며 생겼다. 팀의 주니어가 레거시를 개선하는 것에 열정을 느끼는 것은 나에게도 상당히 즐거운 일이고, 응원하고 싶어지는 일이었다.
그러나 내가 새로운 팀에 합류하고 만난 상황은, 주니어 개발자가 UI 리뉴얼에 이미 짧지 않은 시간을 보내고 있었고, 팀의 매니저는 새로운 기능을 추가하지 못하는 것에 불만이 있었다.
나는 안다. 자신이 작성하지 않은 레거시 코드를 유지보수하는 것은 그렇게 유쾌한 작업은 아니다. 그리고 그것을 뒤엎으면서 새 기능이 나오지 않는 기간은 팀을 괴롭힌다.
그래서 나는 작업을 쪼개는 것을 더 선호하게 되었다. 두세 달간 100을 내놓으려 하지 말고, 일주일에 5만 쌓아가자고 이야기하게 되었다.
시니어로서 언제나 작은 개선과 작은 PR을 이야기한다. 하지만 영향을 주는 모든 곳을 깔끔하게 한 번에 바꿔버리고 싶은 욕구는, 아직도 줄어들지 않는다. 이건 더 즐거우니까.
그래서 나는 여전히 주니어처럼 작업할 때도 많다.