저축은행 차세대 프로젝트를 진행하면서 시간에 쫒겨 기계처럼 개발하다가 어느 순간 나의 소스를 보니 엄청난 현타가 왔다... 나의 업무 이해 부족으로 인해 처음부터 제대로된 설계를 하지 못한 상태로 개발을 시작했고 지금도 계속되는 현업의 추가 요구사항 때문에 나의 코드는 이미 복구 불가 상태였다. 더이상 수정조차 불가능한 단계까지 온 나의 더럽고 복잡한 코드... 오늘로서 안녕이다.

개발했던 서비스 중에 가장 사이즈가 크고 복잡한 실시간이체 서비스를 리팩토링하려고 마음먹었다. 단순 트랜잭션 스크립트 패턴으로 개발된 나의 5000줄짜리 서비스... :) 보고도 믿기지 않았다. 그래도 개발을 하면서 나름 중복코드를 최소화하려고 노력했고 특히 단말과 채널에서 공유되는 서비스였기 때문에 공통 서비스 업무 로직으로 구현하긴 했다.
public class SCBSLNFA63301 {
private RltmRmtncWhdrwlBizProc whdrwlBizProc;
...
public void executeChannelService(SCBSLNFA63301In in) throws Exception {
whdrwlBizProc = _getRltmRmtncWhdrwlBizProc();
// 입력 전문 조립
RltmRmtncWhdrwlIn whdrwlIn = _assembleWhdrwlIn(in);
// 채널 검증 BO 호출
whdrwlbizProc.verifyChannelCondtions(whdrwlIn);
// 실시간이체 BO 호출
whdrwlbizProc.executeWhdrwl(whdrwlIn);
...
}
...
private RltmRmtncWhdrwlBizProc _getRltmRmtncWhdrwlBizProc() {
if (whdrwlBizProc == null) {
whdrwlBizProc = ApplicationContext.getBean("RltmRmtncWhdrwlBizProc", RltmRmtncWhdrwlBizProc.class);
}
}
}
하지만...! executeWhdrwl() 메소드가 5000천줄짜리라는 함정! 업무 요건이 추가될때마다 이제 코드 수정이 점점 어려워졌고 헷갈리기 시작했다. 이제는 그래도 업무에 대해 빠삭하게 이해하고 있고 더이상 추가되는 요건이 없어지는것 같아 도메인 주도 디자인 방법으로 리팩토링을 할 수 있을것 같다... 하지만 어디서부터 시작해야할지 막막했다. 그래서 엔티티 개념, 추상화 클래스, 인터페이스 개념은 조금 아는것 같은데.. 막상 구현하려고 하니 답이 없었다...
To be continued...