> ## Content Index
> Fetch the complete content index at: https://www.popit.kr/llms.txt
> Use this file to discover other available public pages before exploring further.

# (소프트웨어) 모델링은 왜 하는가?
- URL: https://www.popit.kr/why-do-software-modeling/
- Published: 2019-01-10T21:16:57.000Z
- Updated: 2019-08-26T15:31:37.000Z
- Author: 안영회
- Tags: #소프트웨어, 모델링, 협업시스템

얼마 전에 [객체 모델링 공부하게 책 하나 추천해주세요](https://www.popit.kr/book-recommendation-object-modeling/)를 쓴 탓인지 동료의 작업에 댓글\[1\]을 달다가 문득 모델링이란 개념에 대한 생각에 빠졌다.

![동료의 작업 초점을 분명하게 하는 노력](https://www.popit.kr/content/images/wp/2019/01/Screen-Shot-2019-01-09-at-9.24.35-AM-600x175.png)

동료의 작업 초점을 분명하게 하는 노력

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

동료에게 왜 저런 제안을 했을까? 목적은 두 가지다. 하나는 작업 내역을 읽다 보니 아직 하려는 일의 초점이 불분명한데, 성급하게 코딩부터 하려는 동료 개발자를 돌려 세우기 위함이다. 먼저 표기법을 떠나 무언가 그리는 행위가 **조급함을 극복**하게 도와줄 수 있다고 믿어서\[2\]다. 두 번째는 영역 구분이 불명해보여서 눈에 보이게 드러내면 **생각의 빈 틈을 찾기** 좋다고 생각했다. 그때, 떠오른 도구가 왜 [벤 다이어그램Venn diagram](https://en.wikipedia.org/wiki/Venn%5Fdiagram?ref=popit.kr)인지는 무의식의 작동이라고 할 수밖에 이유는 알 수 없다.

![위키피디아의 벤(Venn) 다이어그램 이미지](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Venn_diagram_gr_la_ru.svg/440px-Venn_diagram_gr_la_ru.svg.png)

위키피디아의 벤(Venn) 다이어그램 이미지

하지만, 막연히 상상한 벤 다이어그램의 효용성이 동료에게 효과가 있을지는 다른 문제다. 한편, 그와 별개로 필자가 수학과 친하게 지내지 않아\[3\]왔기에 벤 다이어그램의 실제 의미와 용법이 필자가 상상하던 것인지는 확인이 필요했다.

[위키피디아의 장문의 영어](https://en.wikipedia.org/wiki/Venn%5Fdiagram?ref=popit.kr)를 다 읽을 수는 없어 그림과 굵은 글씨 위주로 쓱 훑어본다. 진리표as a truth table, finite 등의 표현을 보면서 필자가 **빠짐없이 누락없이(**[**MECE**](https://en.wikipedia.org/wiki/MECE?ref=popit.kr)**) 집합을 시각화(표현)하는 수단**으로 떠올린 벤 다이어그램이 짐작과 같다는 사실을 확인한다.

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

그러다가 [모델링에 대해 위키피디아](https://en.wikipedia.org/wiki/Model?ref=popit.kr)를 찾아봤다. 헉... 대충 봐도 표제어만 서른 개가 넘었다. 길을 잃은 느낌이다. 여기서 필자가 가려던 지점을 먼저 짚어봤다. 그저 손이 가는대로 했던 행동을 명시적으로 표현해보면 다음과 같다.

> 벤 다이어그램을 이용하여 생각을 시각화 하는 일에 대해 보편적인 해석을 원했다

아닌가? 써놓고 보니 다시 개선할 부분이 보인다. 여기서 한 가지 사실을 다시 확인한다. **시각화의 효과는 피드백을 촉발한다**는 점이다. 다시 고쳐보면,

> 벤 다이어그램을 이용하여 생각을 시각화 해서 얻는 이점을 [객체 모델링](https://www.popit.kr/book-recommendation-object-modeling/)에도 응용할 수 있을까?

지금 답을 낼 리가 만무하지만, 질문은 마음에 든다. 또, 한가지를 재확인할 수 있다. [UML 모델 그릴 필요가 있을까?](https://www.popit.kr/do-we-need-to-draw-uml-models/)에 쓴 바 있지만, 모델링은 **스스로 질문을 하고, 피드백을 해나가는 과정을 만드는데 훌륭한 도구**다. 여기서 모델은 필연적으로 여러 번 쓰고 고쳐진다는 점에서 **모델링modeling**이라는 표현이 어울린다는 생각도 든다.

## 결론

얼마전 [북경잠자리](https://www.popit.kr/author/jwsheen@gmail.com)님이 [탐색적 데이터 분석](https://en.wikipedia.org/wiki/Exploratory%5Fdata%5Fanalysis?ref=popit.kr) 공부를 하시면서 '**모델**'이란 표현을 자주 썼다. 그 모델과 객체 모델링에서 다루는 모델은 어떤 관계인가? 만일 여러분이 모델링을 고민한다면, 불편한 질문 하나와 직면할 필요가 있다.

> 당신의 모델링은 [무엇을 위한 작업인가?](https://www.popit.kr/i-was-asked-about-agile/)

글을 쓰면서 필자가 얻은 소득은 현재 스스로 생각하는 모델링 필요성을 간단히 정의할 수 있었다. 위키피디아에서 찾은 고전적인 그림을 보다가 발견했다. 아래 그림에서 점선으로 표현한 내용들이 Verification, Validaion 등의 표현이 있는 것이 바로 힌트다. 결국 모델링을 하는 이유는 생각을 검증하기 위한 의도다.

**생각을 눈에 보이게 해야** 빈틈이 드러난다. 그리고, 다른 사람과 **소통**할 수 있다. 현재시점에서 모델러를 기준으로 하면, 과거의 나와도 미래의 나와도 소통할 수 있는 도구이기도 하다. **구현 결과와 비교**하며 개념에 내재한 오류를 확인할 수도 있다. 사실 요즘은 개방형 API와 마이크로 서비스 등으로 인해 조직 협업으로도 소통 맥락이 확장하고 있다.

![출처: https://en.wikipedia.org/wiki/Conceptual_model](https://upload.wikimedia.org/wikipedia/commons/4/40/VV%26A_Comparisons.jpg)

출처: https://en.wikipedia.org/wiki/Conceptual\_model

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

### 주석

\[1\] 필자는 [두레이(dooray)](https://www.popit.kr/building-software-dev-organizational-culture/)라는 협업도구를 일상 업무에 사용한다.

\[2\] 글을 쓰는 지금 필자의 동료가 어떤 생각과 행동을 하고 있는지는 모른다.

\[3\] 최근 뒤늦게 친해지려고 노력중이다. 그래서, 무의식이 벤 다이어그램을 튀어나오게 했는지도 모르고

\[4\] 최근에 올린 글 '[가격 할인 기능을 서비스로 바꿔보기](https://www.popit.kr/turning-price-discount-into-a-service/)'은 출시 필요성을 이야기로 푼 글이기도 하다.