레거시 코드 다루기 - 기존 시스템과 함께 살아가기

레거시 코드란

레거시 코드는 테스트가 없는 기존 코드라고 마이클 페더스는 정의했습니다. 40년간 레거시 시스템을 다뤄온 저로서는 모든 개발자가 레거시를 만나게 된다고 말씀드립니다. 비난하기 쉽지만, 그 코드도 한때는 비즈니스 가치를 제공했습니다. 현실적으로 접근해야 합니다.

레거시 이해하기

먼저 시스템을 이해합니다. 문서가 없으면 코드가 진실입니다. 로그, 데이터베이스, 사용자 행동을 분석합니다. 도메인 전문가와 대화합니다. '왜 이렇게 했을까?'를 이해하려고 노력합니다. 섣부른 비판은 나중에 부메랑이 됩니다.

안전하게 변경하기

테스트를 먼저 추가합니다. 특성 테스트(Characterization Test)로 현재 동작을 기록합니다. 작은 변경부터 시작합니다. 큰 리팩토링은 위험합니다. 보이스카웃 규칙을 적용합니다. 변경할 때마다 조금씩 개선합니다. 기능 플래그로 점진적으로 배포합니다.

리팩토링 기법

'Working Effectively with Legacy Code'(마이클 페더스)가 필독서입니다. Seam(솔기)을 찾아 테스트를 주입합니다. Sprout Method/Class: 새 기능을 별도로 작성하고 호출합니다. Wrap Method: 기존 메서드를 감쌉니다. Extract Method로 복잡한 함수를 분해합니다. 인터페이스를 도입하여 의존성을 느슨하게 합니다.

현실적인 접근

모든 레거시를 다시 쓸 필요는 없습니다. 비즈니스 가치와 리스크를 평가합니다. '충분히 좋은' 상태를 목표로 합니다. 완벽을 추구하지 마세요. 팀과 지식을 공유합니다. 혼자 영웅이 되려 하지 마세요. 레거시와의 싸움은 마라톤입니다.

댓글

0
첫 번째 댓글을 작성해보세요!
← 목록으로