개념 모델 만들기: 화장실
요즘에는 개념 모델, 혹은 경량 온톨로지를 구축하는 프로젝트를 구현하며 이런저런 테스트를 해보고 있는데, 드디어 최소한의 작동을 하는 수준까지 올라와서 한 번 화장실의 개념 모델을 만들어보고 있다!
본격적인 화장실 만들기 작업에 들어가기 전에 '망상'에 대해 간단하게 설명하도록 하겠다. 이 프로젝트는 기획이나 개발을 할 때 자꾸 기존에 그려놓은 큰 그림을 보지 못하고 국소적인 문제만 해결하려고 하다가 점차 만들던 것이 어긋나고 더러워지는 것을 참지 못하게 된 나머지 "아니 그럼 그냥 모든 기획이나 코드마다 큰 그림의 어디에 연결되어 있는지 기록해두고, 뭐라도 하나 수정하려고 하면 큰 그림의 어디를 건드리는 건지 강제로 확인하게 하면 되는 거 아닌가?" 하는 생각에 만들기 시작했다.
예를 들어, 초기에 기획자가 "상품 페이지에서는 스크롤 없이 한 눈에 모든 상품들이 보여야 한다"는 기획을 해두었고, 그래서 개발자랑 같이 "상품의 썸네일 크기는 a x b로 하고 모바일 환경에서 한 페이지에 6개의 상품이 보이도록 한다"고 정했다고 하자. 그런데 얼마 뒤에 이 맥락을 모르는 뉴비 기획자가 와서 "상품이 강조되도록 aaaa x bbbb 크기로 썸네일을 키웁시다!!!"라고 하고, 이걸 본 뉴비 개발자가 "한 페이지에 6개니까 썸네일 키우고 나서 스크롤 내릴 수 있게 하고... 그러고 보니 top으로 올라가는 버튼이 없네? 이것도 구현해야지~~" 하면서 점점 서비스 페이지가 처음의 의도를 잃어가는 일을, 다들 어디선가 비슷하게 경험해보지 않았는가? 망상을 만든다는 것은 이런 상황이 브레이크 없이 진행되는 것을 막기 위한 문서 및 코드 관리법을 만들어 보겠다는 말을 하는 것이라고 보면 된다.
그리고 이러한 관리법이 제대로 작동하기 위해서는 관리할 대상의 개념들을 잘 추출하고 연결짓는 것이 선행되어야 한다. 그래서 망상의 도입부에는 코드와 기획 문서를 읽고 개념 모델을 뚝딱뚝딱 만들거나, 개념 모델에 미흡한 점이 있어서 지적을 하면 이를 보수하는 워크플로우가 들어있다. 화장실의 개념 모델을 구축하겠다고 하는 것은 쉽게 말해서 "내가 화장실에 대해서 설명할테니 너(코덱스든, 클로드든, 혹은 뒤에 있는 사람이든)는 이걸 듣고 '망상'에 정해놓은 포맷대로 개념을 정리하고 연결하는 문서를 만들어. 개념을 추출하고 관계짓는 과정은 '망상'의 문서에 글로 설명되어 있어." 라고 하는 것이라고 보면 된다.
프롤로그가 길었다. 그렇다면 왜 하필 화장실을 가지고 망상을 테스트 하려고 하는가? 이를 설명하기 위해서는 지금 내가 살고 있는 자취방의 화장실에 대해 먼저 이야기할 필요가 있다.
얼핏 보면 흔히 볼 수 있는 좁은 화장실이라고 생각할 수 있겠다. 실제로 나도 처음 보고서는 별 문제가 없다고 생각했다. 샤워를 하기 전까지는 말이다. 화장실에는 일반적으로 수건 걸이가 있고, 거기에 수건을 걸어놓는다. 그런데 샤워기를 거치해두는 곳이 수건 걸이 정 반대편에 있으면, 샤워기를 트는 순간 수건이 젖지 않을까? (나도 알고싶지 않았다...)
이걸 보면서 도대체 어떻게 하다가 이런 설계가 나온 것일까, 이를 설계한 건축가에게 무슨 문제가 있었길래 샤워를 하고 나서 물을 뚝뚝 흘리며 화장실 밖에 있는 수건을 찾아 나서게 한 것일까 하는 고민을 하다가, 이 사람에게는 화장실에 대한 개념 모델이 제대로 서있지 않은 것이 분명하다는 결론을 내렸다.
그러고 나서 조금 더 고민해보니, 화장실의 개념 모델을 만드는 것이 생각보다 쉽지 않을 수도 있겠다는 생각이 들었다. 다들 화장실 사진을 보지 않고 화장실에 대해서 글로 묘사하는 시간을 가져보자. 예를 들어, 나는 이번 테스트를 진행하면서 이러한 초안을 작성했다.
화장실 설명을 시작할게.
- 화장실에는 세면대가 있어. 여기서 손을 씻거나 세수를 하고, 양치를 할 수 있어.
- 세수를 하기 위해서는 세면용 비누가 있어야 하므로 비누를 놓을수 있는 곳이 있어야해. 액체형일 수도 있고 고체형일 수도 있어. 손 씻을 때도 마찬가지. 씻고 나면 물을 말려야 하므로 수건이 있어야 하고, 수건을 걸어둘 수 있는 수건 걸이가 필요해.
- 양치를 하기 위해서는 치약과 칫솔이 필요하고, 물컵이 있어야 할 수도 있어. 각각 둘 곳이 필요해.
- 세면대에는 물이 나와야 하므로 수도꼭지가 있어야해. 물 온도를 조절할 수 있어야 하고. 물이 흘러가야 하므로 수도관이 세면대 바닥에 연결되어 있어야 하고, 물을 받아놓고 싶을 수 있으니 물을 막을 방법도 있어야해.
- 화장실에서는 대변과 소변을 봐야해. 변기가 있어야 하고, 휴지가 있어야해. 휴지를 걸어두기 위해 휴지걸이도 있어야해. 변기가 막혔을 때 뚫기 위한 도구도 있어야해.
- 화장실에서 샤워를 하는 것도 가능해야해. 샤워기와 연결된 수도관이 있어야 하고, 세면대의 수도와 마찬가지로 온도 조절이 가능해야해.
- 샤워기가 설치된 곳에는 물이 내려가야하므로 바닥에 하수관과 연결된 영역이 있어야해.
- 샤워를 하고 나면 공간에 습기가 차기 때문에 외기와 면하는 창문이 있거나, 환풍구가 있어야해.
- 빛이 있어야 하므로 전등이 있어야해.
- 공간에 들어가고 나갈 수 있어야 하므로 문이 있어야해.
그리고 이를 통해 다음과 같은 개념 모델을 얻었다.
개념 모델만 있으면 이게 제대로 된 화장실인지 알 수 없으니, 이 개념 모델을 읽고 gpt로 이미지를 뽑아달라고 했다.
이미지만 보면 꽤 그럴듯해 보인다! 아쉬운 점을 몇 가지만 뽑자면,
- 거울이 없다. 적어도 세면대 앞에는 거울을 두었어야 했다. 이건 내가 거울이라는 개념을 이야기하지 않은 탓에 생긴 일이다.
- 휴지와 수건을 넣어둘 장도 없다. 이것도 내가 이야기하지 않아서 생긴 일이다.
- 콘센트도 없다. 없어도 상관 없는 경우도 있기야 하겠지만, 안전하게 두 구 정도는 커버 씌운 채로 변기 주변에 두는 것이 좋아보인다.
- 문이 바로 바닥에 붙어있다. 물이 조금이라도 넘치는 일이 생기면 물이 화장실 밖으로 흘러나갈 것이다.
실제 망상을 활용할 때는 위의 내용을 보강해달라고 하면 될 것이다.
그런데... 이게 정말 끝일까? 위의 이미지가 너무 깔끔하게 나온 것 같아서, 새로운 세션을 열어서 '조건은 모두 만족하지만 최대한 이상한 화장실을 만들어서 3D 이미지를 뽑아줘'라고 했더니 다음과 같은 결과가 나왔다.
정말 걸작이다.
- 화장실이 아주 광활하다.
- 화장실이지만 문과 벽을 투명한 유리로 만들었다. 문을 잠글 방법도 없다.
- 세면대는 반대 방향을 보고 있다.
- 샤워기의 물 온도 조절하는 것이 바닥에 붙어있다.
- 샤워기에서 물이 나오는 곳 바로 아래에 수건걸이가 있다.
- 세면대와 변기에서 써야 할 각종 용품들이 손에 닿기 가장 힘든 곳에 있다.
- 조명을 천장에 달아놓은 것이 아니라 변기 옆에 세워두었다.
저 조건들을 다 찾아서 이미지로 그려낸 것도 용하다. 그리고 이를 통해서 상당히 값진 교훈을 얻을 수 있는데,
- 화장실은 단순 요소들의 나열로만 이루어져서는 안된다. 어떤 요소들이 어떤 거리에 있어야 하는지, 어느 높이에 어느 방향을 향하고 있어야 하는지도 설명이 되어야 한다. 위 이미지에서 세면대가 바닥에 수직하게 박혀있지 않은 것만으로도 감사해야 한다.
- 바닥과 천장, 벽에 대한 이야기도 당연히 해야 한다. 그리고 이들의 재료에 대한 이야기도 해야 한다.
- 어떤 일이 일어나서는 안되는지에 대해서도 설명해야 한다. 예를 들어, 물이 나오는 곳에 수건이나 휴지가 있으면 안된다! 그 외의 용품들도 굳이 물의 범위 안에 둘 이유가 있는 것이 아니라면 피하는 것이 좋을 수도 있다.
우리 주변을 이루는 것들은 우리가 인지하는 것보다 더 많은 개념들과 관계로 이루어진 것일지도 모르겠다.





