2 분 소요

소스코드에도 유통기한이 있다면 그 기간을 만년으로 하고 싶다.

아… 만년…

너무 긴거 아닐까요? 설마 여러분의 소스코드가 만년동안 유지된다고 생각하는 것은 아니겠죠?

얼마정도가 지나면 소스코드가 썩기 시작할까요? 얼마가 지나면 썩어서 악취가 날까요?

정상적인 프로그래머라면 적어도 하루에 백라인이상(스티브 맥코넬은 Code Complate2에서 10~50라인이라고 한 바 있습니다. 요구사항 수집, 설계, 디버깅, 테스트를 포함한 기간이겠죠?)의 코드를 작성할 것이며 3개월이면 만라인정도를 작성하게 됩니다. 만약 그 이하라면 일이 없거나, 일을 안하시거나, 자신이 감당하기엔 너무 복잡한 문제를 떠앉은 겁니다. 이때는 팀원의 역할분담을 재수립하여야 합니다.

만라인정도가 되면 소스코드는 썩기 시작합니다. 잘 설계했던 코드라도 사용하기 어려운 빈혈 모델이나 재활용이 어려운 빙산 클래스가 생기기 시작합니다.

코드가 늘어나고 기능이 추가될 수록 기존의 코드와 새로운 코드가 화학 작용을 하게 됩니다. 큰 진흙 공이나 블롭이 되어 서로 영향을 주고, 서로에게 의존하며, 애초의 설계 개념은 점차 흐려지기 시작합니다. 이렇게 소스코드가 썩게되면 썩은 부위를 수술하는 데에도 많은 시간과 노력을 투자해야 합니다.

이를 피하기 위해서는 만라인이 되기 전부터 틈틈히 리팩토링을 해야 합니다. 구조를 변경하고, 변경된 구조에 대한 설계서를 재작성하여야 합니다.

빡빡한 개발 일정 때문에 리팩토링을 할 시간이 없어 리팩토링이 힘들다고 하시는 분들 계실까요? 리팩토링도 포함해서 개발 일정을 잡으시면 됩니다. 리팩토링은 코딩 못지 않게 중요한 개발 활동 이니까요.

썩은 소스코드로 유지보수할 생각을 해보세요. 악취로 인해 스트레스를 받은 팀원들은 하나둘씩 퇴사하고, 신입사원은 썩은 소스코드를 분석하다 지쳐 자신이 직접 함수를 만들게 됩니다. 중복코드가 하나 둘씩 생기고, 소스코드는 금새 백만 라인이 됩니다. 사소한 기능을 하나 추가하려고 해도 버그가 수십개씩 만들어 지고, 버그 하나를 고치면 멀쩡하던 다른 기능이 오동작을 하게 됩니다. 버그 투성인 데다가 유지보수도 어려운 여러분의 제품은 시장에서 매장되겠죠.

리팩토링은 개발 일정이 넉넉하고 시간이 남아서 하는 작업이 아닙니다. 개발을 더 빨리 할 수 있도록 소스코드를 재구성하는 작업입니다.

실제로 한 프로젝트에서 일주일의 하루는 리팩토링 하는 날로 정해서, 강제적으로 리팩토링을 수행해 보았습니다.(보이 스카우트 원칙 참고) 그 결과 소스코드는 구조적으로 안정적이고 버그도 적었습니다. 불필요한 코드나 중복된 코드도 생기지 않았죠. 설계시에 고려하지 못했던 추상화 개념(의존성 역전 원칙 참고)을 도입하여 분석도 용이하고 코드량도 현저히 줄었습니다. 한달 두달이 지났지만, 간결하게 유지된 소스코드 덕택에 구조 변경이나 기능 추가가 쉽더군요. 그래서 일주일의 하루를 리팩토링이란 업무를 했음에도 불구하고, 전체적인 개발일정이 !!!단축!!!되는 놀라운 결과를 보여 주었습니다. 만약 리팩토링을 안했다면, 한 3개월쯤 개발한 뒤 작성한 코드를 분석하다 한숨만 내쉬었겠죠.

내가 이 기능을 어디서 만들었던것 같은데, 그게 어디있지?

어! 이거 구현된 기능이었던것 같은데, 갑자기 왜 안되지?

한 3개월쯤 지나고 나서 대부분의 프로그래머가 시간을 보내는 업무는 기능 추가를 위해(혹은 이미 잘 구현된 기능이 버그가 발생하여) !!!기존 소스코드 분석하기!!! 입니다. 리팩토링을 안하고 썩기 시작한 소스코드라면 분석하는 데에 시간이 많이 걸립니다. 기능추가는 힘들어지고, 한참을 분석하다 왜 분석하기 시작했는지 잊어서 멍한 상태로 남게 되죠. 분석에 지친 프로그래머는 함수를 새로 작성하기 시작합니다. 이런, 소스코드는 금새 백만라인이 되고, 제품은 시장에서 매장됩니다.

잊지 마세요.

  1. 소스코드의 유통기한은 !!!3개월!!!입니다.

  2. 일주일에 한 6시간쯤 투자하여 리팩토링을 하시면 소스코드가 절대 썩지 않습니다.

  3. 리팩토링 주기가 짧으면(일주일정도) 개발기간이 !!!단축!!!됩니다.

  4. 리팩토링 주기가 길면(3개월정도) 개발기간이 늘어납니다.

  5. 리팩토링은 소스코드와 설계서에 모두 적용되어야 합니다.

  6. 리팩토링은 개발기간을 !!!단축!!!시키는 코딩 테크닉입니다.

  7. 유통기한이 만년인 것은 !!!사랑!!!뿐입니다.

댓글남기기