brunch

You can make anything
by writing

C.S.Lewis

by 안영회 습작 Aug 23. 2023

설계란 무엇인가 IV Part.2

한국의 마틴 파울러가 되기

지난 글에서 받은 영감을 짜내서 '설계란 무엇인가?'에 대한 2023년의 제 나름을 답을 만들어 봅니다. 새롭게 추가된 생각을 정리하기 전에 이전에 했던 생각을 반추할 의향으로 과거 기록을 찾아 옮겨봅니다.


설계에 대한 지난 기록 살펴보기

먼저 지난 2월에 외부 기고 글로 쓴 <소프트웨어 설계 20년 해보고 깨달은 '좋은 설계'의 조건>이 있습니다. 제가 쓴 글이지만 한 발 떨어져 읽는 기분으로 빠르게 훑어보니 하드스킬로 설계를 생각했던 시간들을 돌아보는 글의 성격도 보입니다. 설득을 포함한 의사소통을 강조한 글이고, 그럼에도 불구하고 코딩이 만들어내지 못하는 어떤 형태의 결과물을 낸다는 주장이 담겨 있습니다.


2017년에는 '설계란 무엇인가?'라는 제목의 글을 무려 세 편이나 썼습니다.

설계란 무엇인가?

설계란 무엇인가 II

설계란 무엇인가 III


설계는 기능에 적합한 모양을 정하는 일

첫 번째 글에는 대화 속에서 그린 설계Design에 대한 제 생각이 담긴 그림이 있습니다. 굉장히 포괄적인 정의라 윤여경 님께서 다루는 디자인과도 원리나 원칙에 있어서는 겹치는 부분이 상당할 듯합니다.

다시 읽어 보니 다음 문장이 당시 느낌을 기억하게 돕습니다.

마이크로 서비스(Micro Services)를 구현할 때는 막연히 작게 잘라야 한다고 생각해서, 스스로  shipping-demo를 나누면서도 왜 이렇게 해야 하는지 의문이 들었다.

마이크로 서비스라는 개념 혹은 솔루션을 지칭하는 단어에 갇혀서 모양을 오해하거나 혹은 감을 잡지 못하다가 실제 프로그램이 쓰이는 방식과 프로그램이 흐르는 구체적인 흐름 혹은 알고리즘을 이해하면서 '아~ 그렇구나!' 하는 동료들의 모습을 보면서 그 순간을 포착하기 위해 쓴 글이었습니다.


결국, 설계는 '아~ 그렇구나!' 한 내용을 포착하거나 함께 일할 동료들의 '아~ 그렇구나!'를 앞당기기 위한 작업이란 생각에 '설계란 무엇인가'라는 거창한 제목을 붙인 듯합니다.


사회적 의사결정 형태로 이뤄지는 설계

한 달쯤 후에 쓰인 두 번째 설계 글은 마틴 파울러의 언급이 자극을 주었습니다. 인상적인 아이디어는 다음 문장에 담긴 내용이었습니다.

engineering decision-making is a socially constructed activity


첫 번째 글에서 담지 못했던 영감의 본질은 어쩌면 협업과정에서 벌어진 현상이었는지도 모릅니다. 이때의 영감이 제 글에도 '민주적 소통'이란 표현이 들어가게 한 계기였는지도 모르겠습니다. 다음의 그림은 저에게 설계를 정적인 관점이 아닌 동적 측면에서 정의할 수 있게 영감을 주었습니다.

ART를 실천하고 출시를 통한 발견을 당연하게 생각하는 직업 일상은 설계를 실행하는 현대적인 모습이라고 생각합니다.

책에서 다뤄질 정도니까 이는 당연하게 저만의 생각은 아닙니다. <프로덕트 리더십>에서 말하는 프로덕트 매니징 자체가 이러한 협업 중심의 설계를 조율하는 업무를 지칭한다고 할 수 있습니다.


불확실에 대응하는 전략으로 변모하는 설계의 양상

한 달 뒤에 쓴 세 번째 설계 글은 마틴 파울러의 글 <Is Design Dead?>를 쓰고 생각을 정리한 내용입니다. 앞서 언급한 점진적으로 처리하는 설계의 과정에 대해 썼습니다. 명시적인 설계 업무가 사라졌다고 해서 본질적으로 설계의 역할이 사라질 수는 없다는 생각을 표현한 듯합니다.


말미에 다음 두 가지 행동 지침으로 요약을 했습니다.

설계는 코딩하기 직전에 무엇을 어떻게 짜야할지 떠오르지 않을 때, 어떻게 해야 할지 떠오를 정도까지만 하시라.

리팩토링을 통해 지속 설계Continuous Design를 하시라.

 

이런 접근에 대한 근거는 두 번째 글에 쓴 표현 '불확실에 대응하는 전략'에 담겨 있습니다.

“the strategy for causing the best change in a poorly understood or uncertain situation within the available resources”


설계란 무엇인가?

이전까지 쓴 네 편의 글을 보면 설계의 본질이자 그 기능은 '필요한 기능에 적합한 소프트웨어의 모양을 정하는 일'입니다. 그런데, 컴퓨팅 산업의 빠른 발전 그리고 디지털 경제라는 현상에 따라 사회적 협업 형태로 서례를 진행하는 일이 사실상 표준이 된 듯합니다.


페벗님의 글에서 얻은 영감으로 즉흥적으로 시작한 글이 '설계란 무엇인가?'라는 질문을 부르고, 과거의 기록을 소환하여 다시 곱씹어 보았습니다. 벌써 두 편인데, 마지막으로 최근의 나에게 다시 '설계란 무엇인가?'를 질문하여 최근의 생각을 조금 더 짜내는 것으로 마무리해 볼까 합니다. 결국 다음 편도 써야겠네요.


지난 한국의 마틴 파울러가 되기 연재

1. 현실과 시스템의 불일치, 그리고 UX의 역할

2. 대상과 조건 그리고 자기 속도에 부합하는 조건 만들기

3. Code Smells 비유와 기술 부채

4. 기술 부채를 Code Smell로 관리할 수 있는가?

5. 형상 구성단위로 TestCase 유용할까?

6. 설계 요소의 사분면

7. 입자와 파동의 이중성을 소프트웨어 설계에 응용하기

8. 즉흥적으로 그린 그림에 입자와 파동 이중성 적용하기

9. 소프트웨어 설계에서 입자의 응용

10. 소프트웨어 설계에서 파동의 응용

11. 설계란 무엇인가 IV Part.1

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari