오래되거나 작성자가 떠나 유지보수가 어려운 코드. 단순히 오래된 코드가 아니라 테스트 없는 코드를 포함한다.

 

Michal Feathers 정의 : 테스트가 없는 코드가 레거시 코드다.

 

위험한 이유

 

테스트 없는 코드 -> 수정하면 어디서 터질지 모름 -> 수정이 두려워짐 -> 수정 안 하고 그 위에 덧댐 -> 코드의 복잡화 -> 더 수정하기 두려워짐. -> 악순화 반복

 

대응하기법

 

1. 이해 : 코드 읽기, 문서화 -> 수정 전 동작 파악

2. 보호 : 테스트 먼저 작성 -> 수정 후 동작 보장

3. 리팩토링 : 내부 구조 개선 -> 안전망 있으니 가능

4. 검증 : 테스트 재실행 -> 사이드 이펙트 확인

 

레거시 코드 리팩토링 기법

 

1. Strangler Fig : 레거시를 조금씩 새 코드로 교체하는 작업으로 대규모 시스템 교체 시 자주 사용하는 기법이다.

2. Seam 찾기 : 최소한의 수정으로 테스트 가능하게 만드는 지점으로 테스트 추가 전에 자주 사용하는 기법이다.

3. Extract Method : 긴 함수에서 의미 단위로 메서드 분리로 가독성 개선 시에 자주 사용하는 기법이다.

4. Wrap and Modify : 레거시를 감싸는 래퍼를 만들어 그 위에서 수정하는 작업으로 직접 수정이 위험할 때 자주 사용하는 기법이다.

 

연결되는 단어들

보이스카우트 규칙 : 코드를 건드릴 때마다 왔을 때보다 조금 더 깨끗하게 남기는 원칙. 레거시 누적을 막는 습관.

Strangler Fig 패턴 : 레거시를 한 번에 교체하지 않고 새 코드가 조금씩 감싸며 대체하는 리팩토링 전략.

Seam : Michael Feathers가 정의한 개념. 코드 수정 없이 테스트를 끼워 넣을 수 있는 지점. 레거시 코드에 테스트를 추가할 때 찾아야 하는 것.

회귀 테스트 (Regression Test) : 수정 후 기존 동작이 깨지지 않았는지 확인하는 테스트. 레거시 리팩토링의 핵심 안전망.

+ Recent posts