(소프트웨어) 모델링은 왜 하는가?

얼마 전에 객체 모델링 공부하게 책 하나 추천해주세요를 쓴 탓인지 동료의 작업에 댓글[1]을 달다가 문득 모델링이란 개념에 대한 생각에 빠졌다.
presentation
동료의 작업 초점을 분명하게 하는 노력

벤 다이어그램을 왜 그리는가?

동료에게 왜 저런 제안을 했을까? 목적은 두 가지다. 하나는 작업 내역을 읽다 보니 아직 하려는 일의 초점이 불분명한데, 성급하게 코딩부터 하려는 동료 개발자를 돌려 세우기 위함이다. 먼저 표기법을 떠나 무언가 그리는 행위가 조급함을 극복하게 도와줄 수 있다고 믿어서[2]다. 두 번째는 영역 구분이 불명해보여서 눈에 보이게 드러내면 생각의 빈 틈을 찾기 좋다고 생각했다. 그때, 떠오른 도구가 왜 벤 다이어그램Venn diagram인지는 무의식의 작동이라고 할 수밖에 이유는 알 수 없다.
presentation
위키피디아의 벤(Venn) 다이어그램 이미지
하지만, 막연히 상상한 벤 다이어그램의 효용성이 동료에게 효과가 있을지는 다른 문제다. 한편, 그와 별개로 필자가 수학과 친하게 지내지 않아[3]왔기에 벤 다이어그램의 실제 의미와 용법이 필자가 상상하던 것인지는 확인이 필요했다.
위키피디아의 장문의 영어를 다 읽을 수는 없어 그림과 굵은 글씨 위주로 쓱 훑어본다. 진리표as a truth table, finite 등의 표현을 보면서 필자가 빠짐없이 누락없이(MECE) 집합을 시각화(표현)하는 수단으로 떠올린 벤 다이어그램이 짐작과 같다는 사실을 확인한다.

그러다가 모델링이 무엇인지 찾아보다

그러다가 모델링에 대해 위키피디아를 찾아봤다. 헉... 대충 봐도 표제어만 서른 개가 넘었다. 길을 잃은 느낌이다. 여기서 필자가 가려던 지점을 먼저 짚어봤다. 그저 손이 가는대로 했던 행동을 명시적으로 표현해보면 다음과 같다.
벤 다이어그램을 이용하여 생각을 시각화 하는 일에 대해 보편적인 해석을 원했다
아닌가? 써놓고 보니 다시 개선할 부분이 보인다. 여기서 한 가지 사실을 다시 확인한다. 시각화의 효과는 피드백을 촉발한다는 점이다. 다시 고쳐보면,
벤 다이어그램을 이용하여 생각을 시각화 해서 얻는 이점을 객체 모델링에도 응용할 수 있을까?
지금 답을 낼 리가 만무하지만, 질문은 마음에 든다. 또, 한가지를 재확인할 수 있다. UML 모델 그릴 필요가 있을까?에 쓴 바 있지만, 모델링은 스스로 질문을 하고, 피드백을 해나가는 과정을 만드는데 훌륭한 도구다. 여기서 모델은 필연적으로 여러 번 쓰고 고쳐진다는 점에서 모델링modeling이라는 표현이 어울린다는 생각도 든다.

결론

얼마전 북경잠자리님이 탐색적 데이터 분석 공부를 하시면서 '모델'이란 표현을 자주 썼다. 만일 여러분이 모델링을 고민한다면, 불편한 질문 하나와 직면할 필요가 있다.
당신의 모델링은 무엇을 위한 작업인가?
글을 쓰면서 필자가 얻은 소득은 현재 스스로 생각하는 모델링 필요성을 간단히 정의할 수 있었다. 위키피디아에서 찾은 고전적인 그림을 보다가 발견했다. 아래 그림에서 점선으로 표현한 내용들이 Verification, Validaion 등의 표현이 있는 것이 바로 힌트다. 결국 모델링을 하는 이유는 생각을 검증하기 위한 의도다.
생각을 눈에 보이게 해야 빈틈이 드러난다. 그리고, 다른 사람과 소통할 수 있다. 현재시점에서 모델러를 기준으로 하면, 과거의 나와도 미래의 나와도 소통할 수 있는 도구이기도 하다. 구현 결과와 비교하며 개념에 내재한 오류를 확인할 수도 있다. 사실 요즘은 개방형 API와 마이크로 서비스 등으로 인해 조직 협업으로도 소통 맥락이 확장하고 있다.

presentation
출처: https://en.wikipedia.org/wiki/Conceptual_model
마지막으로 하나의 팁을 드리면서 글을 마친다. 모델링을 할 때에는 반드시가급적 모델 정의 내용을 확인할 방법을 만들어둬야 한다. 구현해서 확인해보거나 경험이 많은 사람에게 물을 수 있는 환경이면 좋다. 검증하려는 내용에 따라서는 실제로 출시해서 확인[4]을 해봐야 하는 경우도 있다. 필자 입장에서는 그래야 '왜 모델링을 하는지'에 대한 답을 행동으로 내놓을 수 있다.

주석

[1] 필자는 두레이(dooray)라는 협업도구를 일상 업무에 사용한다.
[2] 글을 쓰는 지금 필자의 동료가 어떤 생각과 행동을 하고 있는지는 모른다.
[3] 최근 뒤늦게 친해지려고 노력중이다. 그래서, 무의식이 벤 다이어그램을 튀어나오게 했는지도 모르고
[4] 최근에 올린 글 '가격 할인 기능을 서비스로 바꿔보기'은 출시 필요성을 이야기로 푼 글이기도 하다.