왜 리팩토링을 해야하나요.
https://careerly.co.kr/qnas/1831 답변글을 옮깁니다. 기술적인 관점보다는 서비스/비즈니스 관점으로 답변해보겠습니다. 비즈니스 규모가 커지고, 서비스가 고도화 되면서 여러 요구사항이 발생합니다. 신규 기능이 추가되거나, 기존의 기능을 고치고 개편하거나, 기존 기능을 아예 없애는 경우 등이 있습니다. 떡볶이 집을 들어서 설명해볼게요. 소규모 자본으로 동네 골목에 작은 떡볶이 가게를 창업했습니다. 차츰차츰 입소문을 타고 손님도 많아지고 떡볶이 장사가 잘 되기 시작합니다. (수익 창출) 떡볶이만 팔다가 뜨끈한 국물도 먹으면 좋을 것 같다고 손님들이 요청합니다. (기능 요청) 그래서 어묵도 팔려고 합니다. 어묵도 팔아보니 반응이 괜찮습니다. (A-B 테스트 진행) 이제는 떡볶이와 어묵도 함께 팝니다. (신규 기능 추가) 우선 장소가 협소하니, 떡볶이 조리대를 나눠서 한 칸은 떡볶이를 만들고 한 칸은 어묵을 조리하도록 변경했습니다. (신규 기능 추가로 인한 리팩토링 발생) 날씨가 점점 추워지니 더 많은 손님들이 안에도 들어가고 싶어합니다. 좌석이 부족합니다. 그래서 구석 한 켠에 공간을 확보해 스탠딩 테이블을 추가로 만들었습니다. (서비스 개편으로 인한 리팩토링 발생) 그리고 1년이 지났습니다. 떡볶이 장사가 더 잘 됩니다. (비즈니스 성장) 때마침 옆 가게가 싸게 나왔습니다. 그래서 확장을 하게 되었습니다. 혼자 가게를 감당할 수 없어 조리 담당과 서비 담당 인원을 충원했습니다. (개발자 고용) 기존 조리대도 너무 작아 새 것으로 교체하려고 합니다. 테이블 위치도 바꾸고 개수도 더 추가하려고 합니다. (대거 리팩토링 발생 예상) 인테리어 회사에 문의해보니 비용이 너무 높아 적자를 볼 것 같습니다. 그래서 점진적으로 인테리어를 개선하고자 합니다. (분기별로 리팩토링 결정 - 플래닝) 일단 새로운 조리대를 먼저 설치하고(새 모듈-코드로 교체) 올해 봄까지 먼저 벽 페인트 칠만 진행하는 것으로 합니다. (일부만 리팩토링 진행) 이처럼 서비스는 비즈니스 요구에 따라 끊임없이 변화하고 진화됩니다. 코드가 바뀌지 않는 서비스는 죽어있는 상태와 마찬가지 입니다. 그래서 개발자는 오래된 코드와 새로운 코드가 공존하는 불편한 상황을 늘 마주합니다. 결정의 때?가 도래하면, 다시 개발 투입 비용을 산정하고 프로젝트 우선 순위에 따라 리팩토링 여부를 결정하게 됩니다. 프로덕트 관점에서 리팩토링은 일정 지연의 요인이 될 수 있고, 기능 변경 사항이 없기 때문에 우선순위에서 낮아지게 됩니다. 이 때 개발자는 리팩토링 작업을 통해 얻는 이점을 의사결정자들에게 충분히 설명하고 설득시킵니다. 문제를 진단하고 최선-최고의 해결 방안을 제시하기 위해서는 전문적인 지식이 뒷받침되어야 합니다. 과거에 내렸던 판단이 오늘날은 옳을 수도, 아닐 수도 있기 때문입니다. 그래서 개발자는 계속 지식을 쌓아야 합니다.