한국의 마틴 파울러가 되기
<입자와 파동의 이중성을 소프트웨어 설계에 응용하기>를 쓴 직후에 링크드인에서 다음과 같은 지인의 글을 보았습니다. 제가 좋아하는 Domain Driven Design 책의 일부를 다루고 있었습니다.
그런데 이번에는 '격리'라는 단어에 꽂혔습니다. 원문을 보면 격리에 해당하는 표현으로 'isolating'을 쓰고 있습니다.
If you isolate something such as an idea or a problem, you separate it from others that it is connected with, so that you can concentrate on it or consider it on its own.
앞선 글에서 배운 물리학 지식 즉, '입자'에 대한 이해를 격리에도 적용할 수 있다는 생각이 들었습니다. Eric Evans의 책 14장을 보면 만리장성 이미지가 등장합니다.
격리의 상징으로 만리장성을 차용한 것이죠. 디즈니 애니메이션 뮬란을 보면 중원을 차지한 한족 국가들이 얼마나 북방 민족을 두려워했는지 잘 나타납니다. 이를 막기 위해 만든 대표적인 구조물이 만리장성이죠.
그런데 격리와 입자가 무슨 관련일까요? 소프트웨어는 물질을 다루는 일이 아니란 점에 힌트가 있습니다. 생각으로 물질과 같은 어떤 것(바로 소프트웨어)을 고안하는 일을 소프트웨어 설계라고 합니다. 물질은 단위나 경계가 있습니다. 경계를 짓는다는 말은 입자를 정의한다는 말로 바꿀 수 있습니다.
다만, '입자'하면 낱알을 뜻하고 더 이상 쪼갤 수 없을 듯한 뉘앙스가 느껴집니다. 하지만, 인류의 역사 혹은 과학의 역사는 원소도 구조를 갖고 있다는 사실을 밝혀냈습니다. 하물며 인간의 생각을 쪼갤 수 없는 단위까지 엄밀하게 따질 필요는 없을 듯합니다.
그저 구조를 고려할 필요가 있냐 없냐에 대한 복잡도 정도는 인식해야 합니다. 구조가 있다는 말은 나뉠 수 있다는 뜻입니다.
우리가 뭔가를 규정할 때 더 이상 나눌 수 없다면 그 자체로 경계(바운더리)가 생깁니다. 반면 구조를 이루고 있다면 다른 개체(물질)와의 관계를 드러내야 내부 구성요소의 경계가 명확해집니다. 소프트웨어는 주로 기능을 담기 때문에 과학과 달리 구성요소를 나눌 때 R&R(기능과 책임) 위주로 경계를 만듭니다.
소프트웨어 개발로 돌아오자. 모델링은 왜 필요한가? 나는 2000년대 초중반에 '방법론자'라는 타이틀로 차세대 프로젝트를 수행한 경험이 있다. 프로젝트에서 구성원들이 어떤 역할과 책임(R&R)을 수행해야 하는지, 그리고 서로 소통은 어떻게 해야 하는지, 무엇을 만들어야 하는지 등에 대한 가이드를 내려주고 모범을 보여주던 일이었다.
맥락이 조금 다르지만 전에 썼던 <도메인 모델링 절차에 대하여>에서도 소환할 가치가 있는 내용이 있습니다. '꼭 필요한 일을 어떻게 찾을까'란 소제목 아래에 인용한 그림입니다. 발견(discover)과 연결 짓기(align)는 R&R을 찾는 방법과 정확하게 일치합니다.[1]
놀랍게도 <사람들이 한국말로써 세상을 담아내는 방식>에서 다룬 '일됨'이 떠오릅니다. 물론, 최봉영 선생님 시각으로 보면 당연한 일입니다. 애초에 세상을 담아내는 방식을 표현하셨으니까요. 다만, 선생님을 따라 이제 막 공부한 입장에서는 바로 이렇게 연결 지을 수 있다는 점이 놀라웠습니다.
아래 '일됨'을 보면 이쪽과 저쪽 그리고 힘이 작용하는 방향성 등이 드러납니다.
그리고 '있음'은 존재에 대한 규정인데 바로 앞서 설명한 입장을 정의하는 일과 같다고 할 수 있습니다. 결국 우리 생각을 두고 경계를 짓는 행위라는 점에서는 한국말 차림이나 소프트웨어 설계나 아주 다른 것은 아닙니다.
[1] 놀랍게도 이는 OKR의 정렬과도 거의 같은 패턴이네요.
2. 대상과 조건 그리고 자기 속도에 부합하는 조건 만들기
4. 기술 부채를 Code Smell로 관리할 수 있는가?
6. 설계 요소의 사분면