한국의 켄트 벡이 되기
지난 글에 이어 계속해서 번역 막바지 작업 중에서 설계에 관한 주옥같은 다발말[1]과 포기말[2]을 다루며 묻고 따지고 푸는 형식으로 글을 씁니다.
'심 봤다'라고 외치고 싶은 다발말입니다.
소프트웨어는 두 가지 방식으로 가치를 만듭니다.
- 현재 소프트웨어가 하는 일
- 미래에 새로운 일을 시킬 수 있는 가능성
지금 와서 보면 <흥미로운 Tidy First 고찰> 때는 다음 그림을 보며, 흥미롭다는 느낌만 받을 뿐 전혀 눈치를 채지 못한 사실입니다.
그리고, 번역을 하면서 중요한 개념인 코드 정리(Tydings)와 구조 변경 그리고 동작 변경과의 관계를 묻고 따져 풀다가 손때[3]를 묻혀 그린 그림이 있습니다.
어쩌면 이 걸 그린 후라서 앞선 다발말이 더 와닿는 것인지도 모릅니다. 그래서 감명을 준 다발말에 다시 손때를 묻혀 안영회표 그림을 생산합니다.
컨트 벡이 쓴 다음 다발말은 그만의 설명 방식이 드러나는 매력적인 내용입니다.
시스템의 구조는 동작에 영향을 미치지 않습니다. 예를 들면, 하나의 큰 기능으로 구성 하나, 수많은 작은 기능으로 구성 하나와 같은 월급이 나옵니다. 구조는 미래의 기회를 만듭니다. 구조에 따라 급여 계산에 새로운 국가를 추가하는 것이 쉬워질 수도 있고, 어려워질 수도 있습니다.
여기까지 받은 영감을 또다시 그림으로 손때를 묻혀 봅니다.
동작은 빙산의 일각처럼 밖으로 드러난 일부구나 생각을 했더니, 글을 쓰며 자주 인용하는 탓에 '빙산' 이미지가 떠올랐습니다. 여기에 더하여 최근 모니터링 솔루션 광고에서 빙산을 인용해서 공교롭다 여겼던 순간도 떠오릅니다.
그랬더니 연쇄적으로 생각이 꼬리에 꼬리를 물었습니다. 기술 부채 문제가 왜 설명하기 어려웠던가 다시 깨닫습니다. 언젠가는 설명할 수 있겠죠.[4] 그리고 뒤이어 설계와 관련하여 얽혀 있던 과거의 개념들이 순식간에 찾아와 말을 겁니다. 하나씩 살펴볼까요?
먼저, 켄트 벡이 밖에서 결과를 기다리는 사람에게 설계는 안 보인다고 했는데, 그러면 '건축 설계도 그러하냐?'라고 스스로 물었습니다.
2017년 "이제 아키텍트는 필요 없다, 아키텍처를 이해하는 전문가가 필요할 뿐"이라고 주장하는 글을 썼죠. 그랬다가 번복하듯이, 몇 달 후에 <모던 아키텍트에 대해 개념 잡아보기>란 글도 썼습니다. 둘 다 제가 쓴 글이지만, 이제 와서 다른 관점으로 보니 새롭게 읽히는 부분이 있습니다.
효용성을 부정한 글은 건축 설계사의 설계도처럼 협업을 돕는 결과물을 드러내지 못한다는 점에 근거했습니다. 그리고 켄트 벡의 표현을 빌면 확장 기회(미래에 새로운 일을 시킬 수 있는 가능성)를 분명하게 드러내지 못하는 문제를 강조한 것이라고 할 수 있겠네요.
반면에 다시 <모던 아키텍트에 대해 개념 잡아보기>를 쓴 이유도 확장 기회(미래에 새로운 일을 시킬 수 있는 가능성)에서 찾을 수 있습니다. 당시 <축적의 시간>을 읽은 영향으로 다음 다발말에 드러나는 확장 기회를 찾는 사람이라면 효용성이 있겠다고 생각한 것이죠.
산업 분야와 상관없이 우리 산업이 처한 공통적인 문제를 가려 뽑고자 할 때 가장 많이 제기된 키워드는 '개념설계conceptual design' 역량의 부재였다. 개념설계 역량은 제품개발이 되었건, 비즈니스 모델이 되었건 산업계가 풀어야 할 과제가 있을 때, 이 문제의 속성 자체를 새롭게 정의하고, 창의적으로 해법의 방향을 제시하는 역량으로서 ... - 이정동 교수(서울공대 산업공학과/기술경영,정책)
다만, 과거에 OOAD란 표현을 쓸 때, 분석과 설계를 모호하게 따로 또 같이 썼던 때의 혼선이 저에게도 그대로 남은 듯합니다. 켄트 벡은 둘을 전혀 섞지 않으니까요. 켄트 벡에 따르면 분석설계(AD)가 쌍이 아니라 계획(Planning)과 설계(Design)가 짝일 수는 있을 듯합니다. 분석설계를 짝으로 보려면 얽힘 풀기와 관계 맺기의 대비로 봐야 하겠네요.[5] 이에 대해서는 나중에 더 깊이 따져 보기로 하겠습니다.
마지막 지적 자극으로 소프트웨어 (구조) 설계는 일종의 연구개발 활동이란 생각을 만들어 준 다발말이 있습니다.
그 방법을 한마디로 말하면, 미래의 선택 기회입니다. 특정 방식으로 동작하는 시스템이 있다는 것만으로도, 시스템이 어떻게 동작해야 하는지에 대한 욕구가 달라집니다(하이젠베르크의 불확실성 원리). 즉 현재 1달러-당-10달러 기계에 얼마를 지불하고 있더라도 10달러-당-100달러 기계 또는 1달러-당-20달러 기계가 될 수 있는 기계에 더 많은 돈을 지불할 것입니다. 실제 결과가 어떤 기계가 될지 모른다고 해도 마찬가지입니다.
가능성만으로 뭐가 될지 모른다고 해도, 가치를 기대하고 투자를 해야 하는 활동이니까요. 2021년 그리고 2022년 MVP를 만들고 사업이 성장하다가 자금이 부족하거나 더 이상 새로운 비즈니스 대응을 못해서 도움을 요청했던 두 분의 창업자의 사례가 떠오릅니다.
그들의 공통점은 구조 설계에 대한 필요성도 모르고, 중요성도 몰랐습니다. 제 말에 둘 다 공감했지만, 그들은 실수를 만회하는 정도의 금액만 투자할 수 있다고 여기는 듯했습니다. 안타까웠습니다. 당시는 이런 표현을 할 수 없었는데, 늦었지만 지금은 안타까웠던 이유를 이렇게 말할 수 있습니다. 연구 개발 활동을 안 한 것이 쉽게 만회할 수 있는 의사 결정 실수는 아니라고 말이죠.
연구개발은 이익을 내는 활동과 균형을 맞춰야 합니다. 이에 대한 힌트를 주는 포기말이 한국어판 <Tidy First> 24장에 나옵니다.
소프트웨어 설계는 ‘빨리 벌고 나중에 써야 한다’와 ‘물건이 아닌 선택권을 만들어야 한다’는 두 가지 속성을 조화시켜야 합니다.
다시 손때를 묻혀 흥미도 돋우고, 기억 형성을 강화합니다.
[1] 왜 다발말인지는 <언어에 대한 일반이론>에서 일부 답을 얻을 수 있습니다.
[2] 왜 포기말인지는 <언어에 대한 일반이론>에서 일부 답을 얻을 수 있습니다.
[3] <학습법과 창의성 모두 기억이 핵심이다>에서 인용한 박문호 박사님의 말, '내 감정의 손때를 묻히라는 겁니다'에서 유래합니다.
[4] 오랫동안 숨겨져 있던 다윗 충동이 또 일어납니다. 기록을 보니 무려 2017년에 만들어진 충동이네요.
다윗은 자기 안의 거인을 만나기 위해 골리앗을 만났다. 각각의 우리 안에는 다윗과 골리앗이 있다. 많은 사람들이 삶에서 성공하지 못하는 것은 골리앗을 만날 때 달아나기 때문이다. 골리앗이 없었다면 다윗은 절대로 거인이 될 수 없었다.
[5] 그게 아니라면 낡은 소프트웨어 공학 이론을 들이대는 시도일 가능성이 높겠죠.
1. 소프트웨어 설계는 길닦기와 유사하고 유익한 관계 맺기다