감히 시도하는 설계의 정석
'언어가 생각을 지배한다'[1]는 말을 실감하며 쓰는 글입니다. 앞서 <하나의 시스템을 보는 다양한 생각을 담는 조감도鳥瞰圖>를 쓰면서 '조감도(鳥瞰圖)'[2]라는 규정이 마음에 들었습니다. 그리고 이를 마음에 두니 평소라면 그냥 지나쳤을 그림을 보며 '이것도 조감도 아니야?' 하는 생각이 든 것이죠. 어제오늘 당장 두 개의 사례가 있었는데, 그중 하나를 다루는 글입니다.
다음은 페벗 님을 통해 알게 된 논문 <RPG: A Repository Planning Graph for Unified and Scalable Codebase Generation>에 나오는 그림인데요. 이 그림이 조감도 형태로 보인 것이죠.
여기서는 논문의 내용이나 인공지능 관련 이야기는 하지 않습니다. 조감도 같은 기능을 하는 그림을 소프트웨어를 대상으로 어떻게 그리냐는 문제에 도움을 주고 싶은 마음에서 시도하는 글입니다. 지난 글에서 언급한 '비즈니스 모델 캔버스'는 아예 시각화와 배치를 위한 구획을 명확하게 한 양식Template을 제공하고 있습니다.
당장 양식까지는 아니라도 간단명료한 지침이라도 추출할 수 있을까요? 긴 말 대신에 시도를 해 보기로 하죠.
먼저 논문의 그림을 깊이 분석하는 대신에 <인공지능을 공동지능으로 길들이는 네 가지 원칙>에서 배운 첫 번째 원칙을 실천합니다. 작업할 때 항상 AI를 초대하는 것이죠. 특히 창의력이 필요한 작업 초기에 인공지능과 함께 시작하는 일은 시간과 에너지를 아껴줍니다.
그림에서 드러난 항목을 하나씩 꼽아 본 후에 퍼플렉시티에게 다음과 같이 프롬프트를 제시합니다. 그러고 나서 논문의 그림을 캡처 하여 첨부하고 답을 묻습니다.
첨부한 이미지를 모델링 방법 관점에서 분석하고 있는데, 구성 요소, 관계, 인접성, 층위, 범위, 경계, 유형 따위가 보이는데, 그 외에 다른 항목을 더 뽑을 수 있을까요? 먼저, 모델링 방법 관점에서 드러난 표현 혹은 개념들을 나열한 후에 이들 사이의 관계를 추가로 설명해 주세요.
어슷하게 겹쳐지는 관점도 있고 살짝 다른 느낌을 주는 내용도 있습니다. 인공지능은 세 개의 단락으로 결과를 주는데요. 마치 인간에게도 문체나 말투가 있는 것처럼 비슷한 무언가라고 느껴집니다. 그래서 종종 마지막 요약부터 읽는 것이 도움이 될 때가 있습니다.
다양한 모델링 요소들이 단계와 흐름, 주체와 산출물, 구조와 확장성 측면에서 유기적으로 연결되어 전체적인 메타 모델을 이루고 있습니다
내용을 보면 대체로 납득이 되지만 직관적으로 '단계'는 와닿지 않습니다. 단계(段階)의 낱말 뜻을 살펴보면 흐름을 순서대로 나눈다고 가정하면 단계가 되니 틀린 것은 아닌데, 굳이 단계를 넣지 않아도 흐름으로 뜻이 포용될 듯합니다.
주체와 산출물은 논문의 사례 즉, 내용을 떠나 소프트웨어 대상 조감도라는 형식만 놓고 보면 '관계의 유형을 규정하는 것'으로 보였습니다. 일종의 범례(凡例)라고 볼 수 있는데, 그림에 실제로 Figure Legend라는 항목으로 범례가 있어서 찾아보았습니다.
얼핏 주체나 산출물 중 하나로 분류할 수 있는 요소들이 눈에 띄었지만 정작 시발점이 될 수 있는 주체인 개발자(혹은 엔지니어)나 LLM은 범례에 없었습니다. 논문의 주제에 깔려 있어 직관적으로 혹은 암묵적으로 알 수 있기 때문이겠죠.
마침 여기서 주말에 읽은 <수학의 숲을 걷다> 내용이 영향을 끼칩니다. 수학이 하나의 언어라는 규정과 더불어 '수학에서 발명은 기호, 개념화, 구조화, 작명'이라는 저자의 통찰이 제 기억 속에 자리하고 있다가 갑자기 작동하는 것이죠. 이렇게 쓰고 나니 엉뚱한 데서 답을 찾은 느낌입니다. 제가 인공지능에게 확인 받고 싶었던 추출 결과가 어쩌면 '기호, 개념화, 구조화, 작명'일 수도 있다는 생각이 들었습니다.
다시 주의를 환기하여 퍼플렉시티의 답변 중에서 나머지 두 단락을 봅니다. 첫 단락은 제 의도와 다르게 상세하게 항목을 꼽았는데, 해당 항목에 대한 관계와 상호작용을 설명한 두 번째 단락은 살펴볼 가치가 있어 보였습니다. 그래서, 해당 내용 중에 의미 있어 보이는 문구를 먼저 추려봅니다.
노드/그래프/플로우는 추상적 모델의 기본 단위로, 서로 연결되어 전체적인 ...
계층 및 역할별 구분은 모델의 복잡도를 효과적으로 제어
매핑, 변환, 상태 변화는 각 구조/노드/계층 간 연결고리로 작동
이제는 하나씩 따져 보겠습니다. 노드, 그래프, 플로우에서 노드와 그래프는 범례에 나온 다수 항목을 지칭합니다. 하지만, 여기 해당하지 않는 항목이 있는데, 퍼플렉시티는 이를 '주체'로 보는 듯합니다. 이를 별도로 구분하는 이유는 추정해 보면 주체는 모델의 바깥에서 상호작용하는 요소로 보는 것이 아닌가 싶습니다. 마치 UML의 액터(Actor)처럼 말이죠.
그리고 계층 및 역할별 구분은 구획화 내용을 뜻하는 듯합니다. 다음으로 매핑, 변환, 상태 변화는 물리적으로 보이는 선의 모습과 그대로 일치하지는 않아 해석이 필요한 다소 모호한 말로 느껴졌습니다. 물리적으로는 실선과 점선이 주로 나타나고, 특별하게 굵은 선 하나가 더 있는데, 각 선의 범례 표기를 보면 매핑이나 변환이라고 볼 수는 없기 때문입니다.
아이러니하게도 그림 자체보다는 그림이 떠오르게 한 '수학에서 발명은 기호, 개념화, 구조화, 작명'이라는 <수학의 숲을 걷다> 내용이 가장 먼저 꼽을 수 있습니다. 이들이 언어에서 낱말이나 문법에 해당하는 역할을 지니는 기초적 요소란 생각이 들었습니다.
다음으로 그림과 인공지능의 해석을 보면서 추상화에 따른 선택 결과를 드러내는 관계의 표현과 (계층적) 유형화와 (층위 따위를 포함하는) 구획화가 구조화의 보편적 행위란 생각이 들었습니다. 더불어 그림의 독자들이 당연하게 알 수 있는 요소 혹은 어휘들은 굳이 범례가 필요하지 않으나 범례나 아이콘 표기를 통해 글자를 더 읽어도 되도록 표현하는 부분이 가독성을 높인다는 생각이 들었습니다. 가독성(可讀性)이라는 말에 '읽을 독(讀)'자가 있긴 하지만, 사실 '다 읽지 않아도 직관적으로 식별할 수 있으면' 더 좋은 조감도 표현이란 생각이 재미있었습니다.
[1] 구글링 해 보니 이는 사피어-워프 가설을 상징하는 말이었습니다.
[2] <낱말의 뜻을 깊고 넓게 묻고 따지는 일의 소중함> 실천으로 한자사전을 찾습니다.
1. 옵션: 공동의 가치에 대한 믿음에 기초한 안내와 제안
2. 바보야 문제는 콘텐츠야