본문 바로가기

Book

[책] 레거시 코드 활용 전략 - 마이클 페더스

SOLID로 유명한 로버트 밥 마틴과 같은 회사에 다니는 마이클 페더스의 유명한 책 'working effectively with legacy code'의 번역본을 읽었다. 단위테스트 책에서 어김없이 이 책은 한 번이상 언급이 될 정도로 많은 레퍼런스를 가지고 있다.


레거시 코드라는 신조어는 개발자라면 구지 이름을 떠나 느낌을 많이 받아 왔을 것이다.


C언어로 개발 할 때 main함수를 만들어서 깨끗한 상태가 시간이 지나면 점점 꼬여가고 복잡해지는 코드의 느낌으로 말할 수 있다. 또한 전임자가 만들어놓은 코드를 인계 받았을 때, "이게 뭐야!"라고 느꼈다면 레거시 코드를 만나 본 적이 있는 것이다. 남이 만든 코드야 그렇다고 쳐도 나는 가끔 내가 과거에 짠 코드를 보고 한심하다고 느낄 경우가 있다. 개발 경력이 늘어나면서 코드가 진보를 하지만 과거의 코드는 화석처럼 그냥 묻힌 채 그대로 있기 때문이다.


이런 레거시 코드 들을 어떻게 다루면 좋을지에 대해 처음부터 끝까지 다루고 있는 책이다.

테스트에 대한 책은 아니지만 단위 테스트에 관심이 있는 사람이라면 이 책이 무척 유용하리라 생각한다.

왜냐하면 마이클 페더스가 레거시 코드를 아래와 같이 정의 했기 때문이다. (p.10)

업계에서 레거시 코드는 이해할 수 없고 변경시키기 힘든 코드를 지칭하는 용어로 종종 사용된다.

(중략)

내게 있어서 레거시 코드는 테스트 루틴이 없는 단순한 코드일 뿐으로, 난 그 정의에 대해 유감을 가져왔다.


그 이유를 다음 회색 박스에서 아래와 같이 말한다.

코드가 얼마나 훌륭하게 작성되어 있는지 여부와는 상관없이 테스트 루틴이 없는 코드는 불량 코드다. 얼마나 멋지게 작성되어 있는가와 객체지향의 사용 여부, 그리고 캡슐화의 정도도 참작 요소가 전혀 되지 못한다. 테스트 루틴이 있으면 코드의 동작을 빠르고 검증 가능하게 변경시킬 수 있다. 하지만 테스트 루틴이 없으면 실제로 우리 코드가 더 나아지는지 더 나빠지는지를 알 수 없게 된다.



책을 읽으면서 많은 오타와 아쉬운 점은 용어 선택이다. 용어 선택의 경우 기존 익숙한 것과 많이 다르게 번역을 했다.

이 책을 사실 두 번 완독을 했는데, '서명'이 뭔지 처음에는 고민하다가 후반부에 가서 signature라는 영어를 보고 함수의 형(예. 파라메터 형태 등)을 의미한다는 것을 알았다. '서명 보전'이라는 말을 볼 때마다('서명 보존'이 맞는 것 같지만..) 눈에 거슬렸다.


[정오표]

p.7 제 삼촌 마틴에게도 -> 나의 엉클 마틴에게도

10년 전, 삼촌은 가혹한 -> 10년 전, 마틴은 가혹한
(로버트 밥 마틴을 보통 '엉클 밥'이라 부르는데 uncle을 삼촌으로 번역을 해버려 친족 같이 느껴진다.)


p.46 InvoieUpdateServlet -> InvoiceUpdateServlet


p.100 코드 사용을 테스트 하지 않는 셈이 되어 버린다. 때문에 주의가 필요하다. -> 따라서 or 그렇기 때문에


p.102 테스트 주도 개발 방법 -> 테스트 주도 개발 방법(132)


p.117 e -> employee (p.115)


p.166 테스 -> 테스트


p.332, pp.147~138

 Ç -> «

 È -> »

 É -> …


[어휘 선택]

반영(reflection) -> 리플렉션 ; p.90, 282

서명(signature) -> 시그너쳐 ; p.88, 177

스테이트먼트들에서 -> 문장들에서 ; p.108, 113, 133

하위 단계(low level) -> 하위 단계 ; p.271

정면용(façade) 클래스 -> 퍼샤드 클래스 ; p.330

출시 사이클(release cycle) -> 릴리즈 사이클 or 릴리즈 주기 ; p.335

서명 보전 -> 시그너쳐 유지 ; p.389 / 보전 -> 보존

모조객체(mock) -> 목 ; p.405

굼뜬 게터(lazy getter) -> 지연된 획득자(게터) ; p.437


[코드 들여쓰기]

<- ; p.226, 298

-> ; p.225, 221, 252



[읽기 기록]

1차 - 도서관 빌림

2012.02.18 ~ 03.10


2차 - 구입

2014.04.24 ~ 04.14


1. 4/24 ~p.62

2. 4/25 ~p.84

3. 4/26 ~p.92

4. 4/27 ~p.100

5. 4/28 ~p.130

6. 4/29 ~p.182

7. 4.30 ~p.208

8. 4/31 ~p.222

9. 5/1,2 ~p.233

11 5/5 ~p.272

12. 5/6 ~p.294

13. 5/8 ~p.330

14. 5/9 ~p.368

15. 5/10,11 ~p.380

17. 5/12 ~p.434

18. 5/13 ~p.456

19. 5/14 ~p.515(完)


2017.3.15에 시그러처를 서명으로 번역한 책을 찾아보니 이 책이었다.

번역이 엉망인 책으로 유명하다고 한다.


새 번역

2019-03-12에 "이정문,심윤보 역"을 보니 "이우영,고재한 역"에서 보였던 이상한 어휘 선택이 심각하게 보이지 않았음을 알 수 있었다.