티스토리 뷰

반응형




상황.

참 잘 돌아가는 소스코드이지만, 웹 상품 리스트 쪽 레거시 코드가 참 맘에 안들었습니다.

첫째로 맘에 들지 않았던 것은 뷰단의 jsp 코드가 제 마음에 너무 들지 았았습니다. 스크립틀릿으로 중복되고 복잡한 로직이 있는 것도 맘에 들지 않았고, 스크립트와 스크립틀릿이 섞여서 이해하기 어렵고 수정하기 어렵고, 스크립트와 html간의 의존성이 높은 코드도 맘에 들지 않았습니다.

둘째는 같은 비즈니스 로직인데 앱쪽과 웹쪽이 다른 식으로 구현된 것도 맘에 들지 않았습니다.

셋째도 비슷한데 같은 화면인데 다른 로직과 다른 파일들로 구현된 것이 맘에 들지 않았습니다.

그래서 이 부분을 꼭 수정하리라 벼르고 별렀습니다.


신규 프로젝트가 시작되었습니다. 이번 기회에 맘에 안드는 부분을 뜯어 고치기로 계획했습니다. 사실 리펙토링이라고 하기 어렵고요 소스를 다 새로 만드는 작업이었죠. (리빌딩이라는 표현이 더 적당할 듯 합니다.)  

처음에는 스클립트 템플릿 엔진을 적극적으로 사용하는 방식을 생각했지만, 제가 그 부분을 깊이 이해하고 있지 않고, 시간이 부족했기 때문에 페이징 하는 부분에서만 스크립트 템플릿 엔진을 사용하고, 나머지는 모두  jsp로 그리기로 했습니다. 

작업을 시작했습니다. 앱쪽과 비즈니스 로직을 공유하고, 중복된 소스들을 통합했습니다. 그리고 스크립틀릿을 모두 제거하고 JSTL/EL로 페이지를 만들었습니다. 스크립트는 html과 의존성을 최소화 하기 위해서 인라인으로 작성된 코드들을 모두 제거하고 스크립트 파일에 잘 정리했습니다.

열심히 했지만 시간이 부족했습니다. 이 프로젝트에 대한 일정의 추정이 너무 잘못되었기 때문이었습니다. 그래도 리빌딩은 시작되었기 때문에 꼭 해야한다고 마음먹고 주말에도 밤늦게 까지 일하면서 작업을 했습니다. 개발리뷰 전날까지 죽어라 달렸지만 결국 실패했습니다.

화면은 다 만들었지만 페이지의 기능(스크립트)이 제대로 구현이 안되었습니다. 개발리뷰를 미루고, 그냥 기존 소스를 수정하기로 했습니다. 완벽한 실패였습니다.



분석.

이 실패에는 여러 이유가 있습니다. 작업의 양에 대한 추정도 잘못 되었고, 세세한 계획도 부족했습니다. 그런데 저는 소스를 리팩토링한게 아니라 리빌딩하려고 한 것이 가장 큰 원인이라고 생각합니다. 

사실 레거시가 역사를 쌓아 오면서 당연하게 여기지만 새로 만들려면 당연하지 않은 기능들이 많이 있습니다. 예를 들어서 페이징, 필터 등등 새로 구현하려면 생각보다 기간이 오래걸리는 기능들이 있습니다. 그리고 나도 모르게 분석을 위해서 집계하는 것들이 많이 있습니다. 즉 한마디로 레거시는 쉽게 볼 수 없을 만큼 많은 기능들을 축적해왔습니다. 

이런 것들을 처음부터 새로 만든다는 것은 사실 충분한 준비가 없다면 불가능한 일입니다. 회사에서 잘 되는 기능을 고치라고 시간을 주지도 않고요. 그리고 만약 그 일을 해냈다고 하더라도 테스트는 어떡하나요. 그 많은 케이스를 또 회귀테스트 해야 하는 건가요.

결국 저는 점진적으로 수정해야 하는 것이다 라고 결론을 얻었습니다.



결론.

역사를 한 번에 바꿔버리는 것은 정말 큰 일입니다. 큰 일을 하려면 크게 준비해야지요. 그러나 회사 입장에서는 기존에 잘 되던 기능을 코드 품질을 위해서 처음부터 다 뜯어 고치라고 하기는 쉽지 않죠. 그래서 우리는 코드 품질을 위해서 점진적으로 코드를 발전시켜야 합니다. 잘게 기능을 쪼개고 쪼개진 기능들을 하나하나 리팩토링 하고 테스트해 나가면서 우리 코드 퀄리티를 높여야합니다.

우리 클린 코드를 향해서 한발씩 걸어 나갑시다.


( 제가 지금 느낀 이 생각이 언제 바뀔지는 모르는 겁니다. )


 



반응형
댓글
댓글쓰기 폼