RailsConf2007 둘째날: “Clean Code” by Robert Martin
May 22nd, 2007 by dante
Chad Fowler의 오프닝과 DHH의 키노트로 시작된 하루였습니다. 키노트 발표가 끝나고 쉬는 시간에는 많은 사람들이 넓은 홀에 군데군데 옹기종기 몇몇씩 모여서 이런 저런 얘기를 나누는데, 그 분위기가 무슨 축제장에 와 있는 것처럼 활기찹니다.
“Clean Code” by Robert C. Martin

밥아저씨(UncleBob)로 불리우는 오브젝트멘터(ObjectMentor)사의 Robert C. Martin이 코드를 깨끗히 하라는 주제로 발표했습니다. 이제까지 읽어 본 밥아저씨 문서(article)의 이미지로는 상당히 점잖고 권위적인 느낌일 것이라고 생각했는데, 의외의 이미지로 무대(!)에 나섰습니다. 재밌지만 사뭇 “딱딱한” 문서와는 아주 다른 분위기였습니다.
시작하자마자, 압도적으로 전체 관중을 휘어잡는 강렬한 기운을 마구 뿜어내면서 열정으로 발표하더군요. 특이한 유머로 분위기를 띄우고 청중의 집중도를 높인 다음 던진 질문이 이번 세션의 시작이었습니다.
How many of you ever been significantly impeded by bad code?
“지저분한 코드에 심각하게 고생해본적 있는 사람?”쯤의 의역이 괜찮을 지 모르겠습니다. impeded라는 단어에 강렬한 액센트를 넣으며 표정을 찡그리자, 사람들 마구 웃으며, 대부분의 사람들이 손을 번쩍 듭니다. 개발자라면 누구나 손을 드는게 정상이겠지요.
이어서 거침 없이 날아오는 하이킥에 청중들 쓰러집니다.
Why did you write that?
그러게요, 왜들 그런 코드를 작성하셨습니까? (저는 안그런척
)
이미 지저분해진 코드에 대해서 유일한 해결책은 조금씩 개선하는 방법이라고 합니다. 기존 시스템을 놔두고 별도로 새롭게 재구성하는 팀을 만들어 접근하는 전략은 절대 성공할 수 없다고 말합니다. 오로지 조금씩 꾸준히 기존시스템을 개선해 나가는 것만이 유일한 해결책이랍니다.
Args 파서(Parser)
어떻게 깨끗히 코드를 관리하는지, 커맨드라인 파서를 루비코드로 만든 슬라이드 한장의 코드를 보여주며 시작했습니다. 원래는 자바코드로 설명한 Clean Code: Args의 루비 버전입니다. 루비의 경우 메타프로그래밍 코드가 조금 들어갔다는 점을 제외하고는 거의 같습니다.
자라나는 코드
작성한 코드는 그렇게 심각히 나빠보이지 않습니다. 나름대로 괜찮은 코드에 테스트도 문제 없이 통과했습니다. 그러나 문제는, 중복된 코드가 많고, 새로운 기능 확장에 대해 닫혀있다는 점에서 아쉽습니다. 즉, 프로그램은 확장에 열려있고, 변경에 닫혀있어야한다는 The Open Closed Principle에 어긋나는게 가장 큰 문제입니다.
이런 안좋은 냄새(bad smells)가 날 때, 가능한한 빨리 리팩토링(refactoring)을 해야합니다.
조금씩 개선하기
프로그램을 가장 빨리 망가뜨리는 방법은, 한번에 많은 기능을 추가하는 것입니다. 한번에 아주 작은 기능을 조금만 추가해 작업해야하며, 당연히 그 순서는 테스트 먼저 작성하는 것이라고 강조합니다. 테스트 프레임워크로는 구문이 더 깔끔하다는 이유로 RSpec을 추천했습니다. (최근에는 spec문 대신에 it으로 바뀌어서 우리말로 쓰기에는 그다지 깔끔하지 않습니다만… ) 기존의 코드는 간단히 테스트코드가 모두 통과합니다.
추가할 기능에 대한 테스트 코드를 먼저 작성하고, 통과시키기 위해 조금씩 코드를 작성해 나갑니다.
프로페셔널의 자세
짤막하고 흥미로운 코드를 개선해나가는 데모를 보여주고, 결론적으로 다음의 사항을 권장합니다. 눈빛은 그렇게 하지 않으면 꽤나 혼낼 태세입니다.
- 프로는 테스트를 (먼저!) 작성한다.
- 프로는 자신의 코드를 깔끔히 정리한다.
- 프로는 빨리 할 수 있는 유일한 방법이 정석대로 하는 것임을 잊지 않는다.
코드를 정리하며 제대로(!) 작성하는 것을 저녁 식사에 비유했습니다. 밥만먹고 설거지나 뒷정리를 하지 않고 그냥 일어나는 것은 당장은 빨리 쉴 수 있겠지만, 그 다음 번 식사를 위해서는 전혀 좋을 것이 없음은 물론이요, 전체적으로 더 많은 시간과 노력이 필요하다고 말입니다.
마무리
마지막으로, DHH가 얘기하는, “소스코드 저장소에 체크인할 때마다 그전의 소스보다 조금씩 나은 코드를 커밋하자(little better check-in)”를 언급하고 마무리했습니다.
아주 열정적인 모습과 압도적인 분위기가 인상적인 발표였습니다.