3년 된 스프링 프로젝트 리팩터링한 후기 (테스트 붙이기 포함)

입사하고 처음 맡은 게 3년 된 스프링 프로젝트였습니다. 컨트롤러에 비즈니스 로직이 다 들어있고, 테스트는 커버리지 4%짜리였죠. 6주 동안 리팩터링하면서 느낀 걸 정리해봅니다.

1. 테스트 없이 구조부터 바꾸면 반드시 사고 난다. 저는 먼저 특성 테스트(characterization test)로 지금 동작을 박제했습니다. 이게 제일 오래 걸렸지만 제일 중요했습니다.

2. 한 번에 다 바꾸려 하지 말 것. 서비스 레이어로 로직 빼는 작업만 PR 20개로 쪼갰습니다. 리뷰어도 편하고 롤백도 쉬워요.

3. 도메인 로직에 이름을 붙여주는 것만으로도 코드가 달라집니다. 의미 없는 if문 덩어리에 메서드 이름을 붙이니 버그가 눈에 보이기 시작하더라고요.

결론은 리팩터링은 기술보다 인내의 문제라는 것. 급하게 하려면 하지 마세요. 진짜로.

작성자 궁금한사람713

9 개의 답변

ㅇㅈ 특히 1번. 테스트 없이 구조 바꾸는 건 지뢰밭 눈 감고 걷는 거임

작성자 문과출신개발자125 · ▲0

출처 있음? characterization test는 마이클 페더스 책인가 그거 맞죠?

작성자 초보개발자782 · ▲0

3번 공감합니다. if문 덩어리에 메서드 이름 붙이는 거 진짜 효과 커요. 이름 짓다 보면 "어? 이거 두 개가 같은 조건인데?" 하는 순간이 오거든요. 저는 그때 Extract Method 하면서 조건 반전 버그 두 개 찾았습니다

작성자 코딩하는곰158 · ▲0

오 이건 몰랐네. 특성 테스트라는 개념은 처음 들어봐서 찾아봐야겠다

작성자 뉴비탈출431 · ▲0

저도 그래요. 지금 딱 그 상태라서 조심스럽게 시작하는 중인데 PR 쪼개는 기준을 어떻게 잡으셨는지 궁금하네요. 기능 단위? 레이어 단위?

작성자 월급루팡790 · ▲0

6주 동안 PR 20개면 꽤 잘게 쪼갠 편인데, 그거 리뷰해준 팀원들도 고생 많았겠다 ㅋㅋ 실제로 리뷰어 반응은 어땠어요? 저는 예전에 비슷하게 하다가 "이거 언제 끝나냐" 소리 들었음

작성자 AI덕후329 · ▲0

동의 안 됨. 결론이 인내의 문제라는 건 좀 뭉뚱그린 얘기 같은데. 인내보다 중요한 건 범위 합의랑 롤백 계획 아닌가. 그거 없이 인내만 있으면 그냥 야근임 ㅋㅋ

작성자 지나가던행인806 · ▲0

글쎄 그건 좀. 특성 테스트부터 박제하는 게 맞다고는 하는데 커버리지 4%짜리 레거시에 6주면 솔직히 운 좋은 케이스 아님? 저희는 그 정도 규모면 의존성 얽힌 것부터가 지옥이라 6주로 안 끝나던데

작성자 호기심천국139 · ▲0

좋은 글인데 한 가지 딴지 걸면, "급하게 하려면 하지 마세요"는 결국 조직이 리팩터링 시간을 안 주면 아무것도 못 한다는 얘기잖아요. 그런데 그 시간을 어떻게 설득했는지가 이 글에서 제일 궁금한 부분인데 빠져 있음. 기술 얘기보다 그게 핵심 아닌가 싶습니다

작성자 무한도전러803 · ▲0