메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

켄트 벡이 말하는 “코드 정리가 필요한 이유”

한빛미디어

|

2024-04-19

|

by 켄트 벡

10,557

소프트웨어 설계는 날카로운 도구입니다. 하지만 어떤 사람들은 자신이 칼을 휘두르고 있다는 걸 모릅니다. 심지어 손잡이가 아닌 칼날을 잡고 휘두르기도 합니다. 이런 모습들은 제가 소프트웨어 설계에 대한 글을 쓰는 하나의 큰 이유로 작용합니다. “Helping geeks feel safe in the world (괴짜들이 세상에서 안전하다고 느끼도록 돕는다)” 라는 제 개인적인 사명 선언문에 속하기 때문이죠. 

 

저를 사명으로 이끄는 길을 두 가지입니다. 괴짜들이 안전하지 않은 방식으로 소프트웨어를 설계해 실수로 시스템의 동작을 망가뜨리거나, 소프트웨어를 지원하는 인간 관계에 부담이 되는  방식으로 소프트웨어를 설계하는 경우입니다. 안전하지 않은 행동을 할 때, 불안을 느끼는 것은 당연한 일입니다. 안전하지 않은 행동을 하면서 불안해 하는 것은 경솔하게 안전을 확신하며 우둔하게 있는 것보다 훨씬 낫습니다.

 

사람들이 안전하게 설계하는 법을 배우도록 하는 것은 제 사명이고, 저는 단기적으로 급히 해결하는 일에는 관심이 없습니다. 소프트웨어 설계는 가치를 만들고, 그렇게 만들어진 가치는 시간이 흐른 뒤에야 현실에 나타납니다.

 

그러나 <켄트 벡의 Tidy First?>에서 다루는 방법은 조금 예외적입니다. 코드 정리를 실천하면 가치를 바로 깨닫게 됩니다. 여러분이 동작을 조작하는 코드를 작성하는 수준만큼, 코드의 구조를 조작하는 데 익숙해지기를 바라는 마음에 기획한 책입니다. 설계에 대해 더 깊이 알게 되면 더 장기적으로 영향을 끼치고 장기적인 보상이 있는 동작, 더 많은 사람에게 영향을 미치는 동작에 대해 이야기할 것입니다.

 

그동안 소프트웨어 설계에 대한 여타 설명을 읽다 보면 ‘얼마나?’와 ‘언제?’라는 필수 요소가 빠져 있다는 것을 알 수 있었습니다. 다른 소프트웨어 설계자들은 설계 자체가 시간을 초월해서 이뤄지는 것처럼 행동했습니다. 그래서, 속도를 늦추는 성가신 코드가 생기기도 전에 설계를 하거나 코드의 동작을 변경해야 한다는 계속되는 압박에 시달리다가 결국 무기한 타임아웃 상태에 진입해서 설계를 하는 듯했죠. 저는 이러한 의문을 탐구하고 이에 답하는 데 유용한 원칙을 제공할 수 있는지 알아보고 싶었죠.

 

저에게 소프트웨어 설계는 지적인 퍼즐 같습니다. 저는 ‘이 큰 변화를 한입에 쏙 들어가는 크기로 축소할 수 있는 설계는 무엇일까?’라고 궁금해하는 순간을 즐깁니다. 프로그래밍을 하다 보면 자기 학대적인 느낌이 들기도 합니다. 복잡도를 잔뜩 쌓고 멋지게 풀어내려는 영웅적인 심리가 무의식에 자리하는 듯합니다. 하지만, 이미 세상은 충분히 도전적인데 우리 자신과 다른 사람들이 일을 더 쉽게 할 수 있음에도, 이를 회피할 이유가 있을까요?

 

소프트웨어 설계 퍼즐의 또 다른 측면은 소프트웨어 설계를 이끄는 힘이 무엇인지, 또 그 힘에 맞서려면 어떤 원칙을 사용해야 하는지를 파악하는 것입니다. 설계 조언들은 많지만 실제 증거와 만나면 모순만을 드러내죠. 숙련된 설계자가 만들어 낸 결과물인데도, 그들이 신봉하는 원칙으로 계속해서 진행하기 어려운 이유는 무엇일까요? 정말 무슨 일이 벌어지고 있는 걸까요?

책에서는 숨길 수 없이 모두 드러나고 맙니다. 제가 어떤 주제를 완전히 이해하지 못하면 여러분도 그 사실을 알아차릴 것이고, 결국 제가 할 수 있는 일은 아무것도 없습니다. 응집도 개념을 예로 들어 보겠습니다. 15년 전에는 응집도를 딱 부러지게 정의할 수 있었지만, 책을 쓰기 시작하면서 작년까지도 응집도를 만족스럽게 설명할 수 없었습니다. 저는 지금도 스스로를 이해시키기 위해 노력하고 있습니다.

 

여러분도 코드 정리를 먼저했을 때 도달하게 될 특별한 순간을 맛보시기를 바랍니다. 특정 코드를 정리하면 관련 기능을 더 쉽게 만들 수 있습니다. 다른 기능도 더 쉽게 만들 수 있게 됩니다. 그렇게 정리는 복합적이 되기 시작합니다. 이 기능을 더 쉽게 만들었더니, 저 기능도 더 쉬워지는 거죠. 

 

힘들이지 않고도 펜을 한두 번만 휘두르는 것으로 거대한 단순화가 이뤄지는 현상은 마치 눈사태를 보는 듯합니다. 그리고 모든 단계에 동료를 참여시켰기 때문에 여러분의 천재성에 대해 충분한 정보를 가진 관객들을 확보하게 되고, 그 관객들 역시 ‘조금씩 조금씩 만들어 낸 커다란’ 구조 변화의 혜택을 누리기 시작하면서 여러분에게 더욱 고마워하게 될 것입니다.

 

켄트 벡

 


 

위 글은 켄트 벡의 Tidy First?』 내용을 발췌하여 정리한 내용입니다.

 

10년만에 돌아온 익스트림 프로그래밍의 창시자이자 소프트웨어 패턴의 선구자, 켄트 벡의 경험적 소프트웨어 설계 노하우가 궁금하신 분들은 켄트 벡의 Tidy First?를 확인해 보세요.

 

댓글 입력
자료실

최근 본 책0