brunch

밀가루 반죽과도 같은 소프트웨어 모델

인공지능 시대의 소프트웨어 공학

by 안영회 습작

<목적에 따라 소프트웨어 설계 활동의 양상이 달라진다>를 쓰면서 위키피디아 내용을 바탕으로 소프트웨어 설계에 대한 객관적 정의를 살펴봤습니다. 다시 돌아가서 이제 본격적으로 소프트웨어의 특징을 강조한 말을 떠올려 봅니다.

소프트웨어는 생각을 원재료로 한다


영어 단어'Software'는 셀 수 없는 명사다

공교롭게도 제가 강의했던 시기와 비슷한 시점에 Vaughn Vernon이 링크드인에 소프트웨어에 대한 의미심장한 발언을 했습니다.

문법적인 이야기라 네이티브가 아닌 입장에서는 명확하게 느껴지지 않을 수 있습니다. 그래서 콜린스 사전을 찾아보면, uncountable noun임을 분명히 확인할 수 있습니다.

다음은 퍼플렉시티에게 소프트웨어가 셀 수 없는 명사인지 묻고 얻은 답변입니다.

네, 'software'는 영어에서 명확한 셀 수 없는 명사(불가산 명사/Mass noun)에 속합니다.
예를 들어 'a software', 'softwares'처럼 표현하지 않으며, 여러 개의 소프트웨어를 표현할 때도 그냥 'software' 또는 'pieces of software', 'software programs'와 같은 방식으로 말합니다.
즉, 'software'는 'water', 'furniture'와 같은 범주의 명사로, 개별적으로 하나, 둘, 셋처럼 셀 수 없고, 항상 단수형으로만 씁니다. 그래서 “나는 새로운 소프트웨어가 필요하다”라고 할 때도 software라는 단어 그대로 사용합니다.


추상적 개념일 때는 아직 셀 수 없다

셀 수 없는 명사에 대해 퍼플렉시티에게 더 묻다 보니 추상적 개념의 범주에 들어가는 쓰임새라는 점을 알 수 있습니다.

독자님들 중에서 제가 Vaughn Vernon의 글을 인용한 이유를 눈치챈 분들이 있을까요? 제가 비슷한 시점에 강의에서 했던 발언과 묘한 교집합이 있기 때문입니다.

소프트웨어는 생각을 원재료로 한다


밀가루 반죽과도 같은 소프트웨어 모델

해당 발언을 할 때 제 머릿속에는 모델링의 형상이 밀가루 반죽에 가깝다는 생각이 있었습니다. 지식의 저장소 역할을 하는 모델은 그림이나 문서로 일부 드러나긴 하지만 모든 생각을 명시적으로 만들어 내지는 않습니다. 그래서 '밀가루 반죽' 비유를 떠올린 것이죠.

형상은 그러하지만 그 내용은 소프트웨어 대한 다양한 지식이 담겨 있습니다. 모델링을 설계와 같은 말이라고 하면 <목적에 따라 소프트웨어 설계 활동의 양상이 달라진다>에서 다룬 개념들의 관계를 다시 활용할 수 있습니다.


소프트웨어는 프로그램으로 나눌 수 있다

밀가루 반죽 속에 들어 있는 내용물에 해당하는 것은 바로 '문제 해결과 계획' 내용입니다.

다시 소프트웨어가 덩어리로 된 명사(mass noun) 다른 말로, 셀 수 없는 명사란 점을 떠올려 봅니다. 소프트웨어를 다룰 때 항상 전체를 덩어리로 다룰 수는 없겠죠. 이를 나눠서 볼 방법이 필요합니다. 여러분이 (저와 같이) 소프트웨어 관련 종사자라면 일터에서 나도 모르게 배운 방법들이 분명히 있을 텐데요. 그게 뭘까요? 몇 가지 후보를 추려 보겠습니다.


첫 번째 후보는 영어 단어를 중심으로 풀어봅니다. Component로 나눠서 지칭하는 방법이 있을 수 있습니다. 무언가(something)의 구성 요소를 지칭할 때 쓰는 말이죠.[1]

두 번째 후보는 산업계 지식이 잘 정리된 위키피디아 정의에서 찾을 수 있습니다. 바로 다음 정의를 두고 퍼플렉시티에게 UML을 그려 달라고 했습니다.

Software consists of computer programs that instruct the execution of a computer. Software also includes design documents and specifications.

그렇게 얻은 내용을 보면 소프트웨어는 두 가지 종류의 구성요소로 나눌 수가 있습니다. 하나는 (셀 수 있는) 문서고요. 다른 하나는 컴퓨터 프로그램입니다.


글을 마치며....

소프트웨어 모델링을 설명할 때 나도 모르게 밀가루 반죽에 비유한 일이 있습니다. 끊임없이 변하는 양상과 명백한 경계가 없는 생각의 산물을 다루기 때문이죠. 그 생각 때문에 영어 단어 Software가 셀 수 없는 명사란 점이 새삼 흥미롭게 느껴졌습니다.


소프트웨어에 대한 생각을 조직화하기 위해서는 밀가루 반죽을 구성하는 일부를 떼 내어야 한다는 점이 떠올랐습니다. 아직 생각이나 계획 단계에 머물 때면 이들을 컴포넌트라고 부를 수도 있습니다. 생각 차원을 떠나 결과물의 형상으로 나타날 때는 프로그램이 됩니다. 프로그램도 컴포넌트로 나눠서 볼 수 있기도 하지만요.


이 글은 소프트웨어 모델링에 대한 명백한 설명에 도달하기 위한 시도로 한 발 나아가는 글입니다.


주석

[1] 주의할 점은 분산 프로그래밍에서 쓰이는 컴포넌트와 20년 전쯤에 광풍이 불었던 CBD의 컴포넌트는 조금 더 구체적인 의미를 더해야 합니다.


인공지능 시대의 소프트웨어 공학 연재

1. 2025년에 읽는 소프트웨어 엔지니어링 책

2. 점진주의: 애자일보다 마음에 드는 표현

3. 모듈성은 소프트웨어 개발의 진정한 기술이다

4. 반복은 모든 탐구의 핵심이자 실제 지식 습득의 기본

5. 추측보다는 실험: 현실에 입각한 경험주의

6. 바이브 코딩과 증강 코딩은 다르다

7. 소프트웨어 설계는 어떻게 새롭게 정의할 수 있나?

8. 컨텍스트 엔지니어링 프레임워크

9. 컨텍스트 엔지니어링 분류 체계와 구현 기술의 진화 양상

10. 목적에 따라 소프트웨어 설계 활동의 양상이 달라진다

keyword
작가의 이전글AI 환각과 확률론적 모델링의 근본적인 한계