brunch

You can make anything
by writing

C.S.Lewis

by 안영회 습작 Nov 09. 2023

소프트웨어는 현상을 물리적 세계에 대응시키는 기술

박문호 박사님에게 배우기

이전 글에서도 BoundedContext나 프로그래밍에서 작명 경험, Multi-Layered 개념, Table 개념 등의 다양한 소프트웨어 개발 경험에서 배운 지식들을 연상시킨 바 있습니다. 하지만, 열 편의 연재 중에 어떤 글에 담기에도 너무나도 동떨어진 내용이 있어서 별도 글로 씁니다.[1]


연쇄적 리엑션이 만드는 메커니즘

바로 다음 장면에서 만난 영감이 주인공입니다. 일단, 리액션(Reaction)이라는 단어부터 살펴보죠. 인과관계의 사슬을 이용할 수 있다는 생각이 바로 스칩니다.

이는 물론 지난 시간에 배운 수학 삼각형이 배경 지식으로 작용한 덕분입니다.[2]

뒤이어 위키피디아에서 Reactive programming 페이지를 찾아보았습니다.

In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change.

오호... 예상한 바는 없지만, 마치 예상한 설명이 등장한 듯한 기분입니다. 페이지를 쭉 내려보면 도전과제들이 있긴 하지만, <이벤트는 변경을 알리는 표준 프로그래밍 단위>란 글을 쓸 때 제가 떠올린 대강의 이미지와 굉장히 유사한 탓입니다.


혼자 즐기는 글이 되지 않기 위해 조금 더 설명을 시도해 봅니다. 다시 Reactive programming 정의를 보죠. 프로그래밍 배경 지식이 없는 분들께는 DeepL 결과만 공유해도 별 도움이 되지 않을 듯합니다. 일단, 여기서는 <이벤트는 변경을 알리는 표준 프로그래밍 단위>를 이해하실 수 있으면 Reactive programming 정의를 이해한 것과 별반 다르지 않다고만 하겠습니다.


대신에 왜 박문호 박사님 영상을 보다가 관련이 없는 프로그래밍 분야로 점프하며 영감을 얻었다고 주장하는지 설명하겠습니다. 인용한 장면 직전에 박문호 박사님은 <현상적 세계와 물리적 세계를 구분하기>를 강조합니다. 마음의 세상이나 언어가 만드는 허구의 세계와 달리 물리적 세계는 법칙이 적용됩니다.


소프트웨어는 현상을 물리적 세계에 대응시키는 기술

소프트웨어는 현상적 세계를 물리적 세계에 대응시키는 기술입니다. 언젠가 Kent Beck의 글에서도 이런 영감을 느끼게 해 준 그림이 한 장 있었는데 바로 찾지는 못하겠네요. 제가 한때 UML에 열광한 것도 메커니즘으로 소프트웨어 작동을 모두 묘사할 수 있을 것 같다는 기대 때문이었습니다. 하지만, UML 진영의 도전은 실패로 돌아갔습니다.[3]


그 메커니즘을 활용하려면 박문호 박사님이 말하는 현상적 세계를 벗어나서 수학 삼각형으로 표현할 수 있는 정의 혹은 선언적 방식(declarative programming paradigm)이 필요합니다. 선언적 방식을 뜻하는 영문을 굵게 표시한 이유는 앞선 Reactive programming 정의에 등장하기 때문입니다. 그래서, 20년 동안 포기했던 기대감을 다시 갖게 되었습니다. 이 정도로 미약한 설명을 마치고 위키피디아에서 찾은 몇 가지 힌트에 대해 미래의 저를 위한 기록을 조금 더 남겨 봅니다.


리액티브 프로그래밍 접근법과 구현체

위키피디아에 접근법에 대해서도 기록이 있습니다. 시행착오를 줄이고 다른 사람들의 지혜를 재활용하기 위해 살펴볼 필요가 있습니다. Imperative, Object-oriented reactive programming, Functional reactive programming (FRP), Actor based와 Rule based가 있네요.


운이 좋으면 개발할 코드량을 줄여줄 구현체도 있습니다. ReactiveX는 까맣게 잊고 있었는데 알고 보니 RxJs, RxJava 등을 통칭하는 이름이네요. Elm (programming language)는 생소하지만, Svelte는 어디선가 들어본 듯합니다. 그리고 닷넷 기반인 ObservableComputations보다는 JVM 기반인 Reactive Streams와 자바 스크립트 라이브러리인 Solid.js가 조금 더 끌립니다.


주석

[1] 이 글은 동시에 <한국의 마틴 파울러가 되기> 연재의 일부로 삼으려고 합니다.

[2] 여러분도 과거의 저처럼 프로그래머라면 수학 삼각형을 보며 Call Tree 나 Call-back 같은 개념이 떠오를 수도 있을 것입니다.

[3] <소프트웨어를 모르는 대한민국 기업의 위기> 그리고 요즘IT에 썼던 글에서 인용한 바 있는데 한때 MDA를 만드는 진영(UML을 계속 발전시키던 집단)은 완전한 코드 자동 생성이 가능하다고 믿었습니다.


지난 박문호 박사님에게 배우기 연재

1. 우연하게 만난 수학의 필연성과 논리적 추론

2. 집합적 사고의 필요성으로 나아가는 길

3. 집합론적 사고는 여러 가지를 동시에 해결하는 것이다

4. 지식을 배타적 공간에 보관하게 돕는 집합적 사고

5. 박문호 박사님의 집합론적 사고 설명이 주는 영감

6. 맞고 틀림을 명확하게 해 주는 것이 집합론적 사고

7. 조건이 만들어 가는 지식의 경계

8. 관계라는 가장 중요한 우주적 현상

9. 관계와 수학의 연산 그리고 연기

10. 현상적 세계와 물리적 세계를 구분하기

11. 집합론적 사고로 도출한 대화의 중요성

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari