Modular Open System??
시스템을 구분하는 기준 중에서 공개성 (Openess)이 있습니다.
시스템 구성요소 간의 인터페이스, 연결 규칙이 공개되어 있어서 정해진 자격을 갖출 경우
해당 시스템의 구성요소로 참여할 수 있는 정도를 공개성 (Openess)으로 표현합니다.
공개성 (Openess)에 따라서 오픈 시스템 (Open System), 클로즈드 시스템 (Closed System)으로
시스템을 구분합니다.
컴퓨터 초창기에는 하드웨어에 탑재되는 소프트웨어를 하드웨어에서 업체에서 직접 개발하거나
소싱하여 탑재를 했습니다. 해당 하드웨어에 소프트웨어를 탑재할 권한은 하드웨어 제작 업체 밖에 없었죠.
그러다가 하드웨어 업체와 운영체제 업체가 분화되고, 운영체제 업체와 소프트웨어 업체가 분화되면서,
애플리케이션 프로그래밍 인터페이스 (API)만 알면 누구나 소프트웨어를 만들고 해당 운영체제에
탑재할 수 있게 되었죠. 과거보다 공개성 (Openess)이 증가한 겁니다.
리눅스 같은 운영체제는 소스가 공개되어 있어서, API와 같은 한정된 창구로 운영체제에 접근하던 것이
운영체제 자체도 수정이 가능하죠. 공개성 (Openess)이 좀 더 높다고 볼 수 있습니다.
조금 이해를 돕기 위해서 간단한 예시를 들었는데, 핵심은 공개성 (Openess)은 절대 값이 아니라
상대값이란 겁니다. 비교 대상, 비교 시점에 따라서 공개성 (Openess)은 달라질 수 있습니다.
과거 대비 공개성 (Openess)이 높았는데,
다른 시스템 대비해서는 공개성 (Openess)이 낮을 수 있는 것이죠.
그런데, 일반적으로 오픈 시스템 (Open System)이라고 함은
특정 벤더, 특정 업체에 시스템 아키텍처가 귀속되지 않고,
구성요소 간의 인터페이스가 표준 또는 사실상 표준으로 공개되어서 특정한 자격을 갖춘 경우 참여가
자유로운 시스템을 말합니다.
또 하나의 시스템 분류 방식은 모듈성 (Modularity)입니다.
시스템을 구성하는 구성요소 간의 연결 강도에 따라서
모듈러 시스템 (Modular System), 인테그럴 시스템 (Integral System)으로 구분합니다.
공개성 (Openess)과 마찬가지로 상대적인 값입니다.
해당 시스템은 모듈성 (Modularity)이 몇이다라고 표현은 못하지만,
타 시스템 대비, 과거 대비 모듈성 (Modularity)이 높다, 낮다는 판단할 수 있습니다.
그렇다면, 공개성 (Openess)과 모듈성 (Modularity)은 무슨 관계가 있을까요?
공개성 (Openess)은 시스템 외부와의 관계, 모듈성 (Modularity)은
시스템 내부 구성요소 간의 관계의 문제로 볼 수 있어서 독립적인 분류라고 볼 수 있습니다.
그렇지만, 다음과 같은 관계는 성립한다고 볼 수 있습니다.
"모듈러 시스템 (Modular System)은 오픈 시스템 (Open System),
클로즈드 시스템 (Closed System)이 될 수 있으나,
오픈 시스템 (Open System)은 모듈러 시스템 (Modular System)인 편이 절대적으로 유리하다."
상식적으로 생각하면 쉽게 이해할 수 있는데요.
시스템의 모듈화는 특정 기업에 종속된 제품이나, 다수의 기업이 연합하여 만들어가는 시스템에 모두 적용이 가능합니다. 즉, 공개성 (Openess)과 관계가 없습니다.
그런데, 오픈 시스템 (Open System)인 경우는 다수의 플레이어를 참여시켜야 하므로,
각각 다른 라이프사이클 (Lifecycle)을 갖는 구성요소들을 효과적으로 관리하기 위해서는
어느 정도의 모듈성을 확보한 모듈러 시스템 (Modular System)인 편이 훨씬 유리합니다.
만약에 앱을 만들 때마다 안드로이드나 iOS의 내부 상황을 모두 이해해야 하고,
심한 경우 운영체제를 고쳐야 하는 상황이 발생한다면 어떻게 될까요?
특정 앱을 만들고 설치하는 데 다른 앱에 영향을 미친다면 어떻게 될까요?
즉, 여러 플레이어가 참여하는 시스템일수록 각각이 독립적으로 활동할 수 있도록
구성요소 간의 독립성을 최대한 보장해줘야 합니다.
앞선 예시 때문에 이런 질문이 나올 수도 있겠네요.
"그렇다면, 안드로이드나 iOS는 모듈러 디자인을 적용한 건가요?"
그렇게 볼 순 없고, 안드로이드와 iOS와 같은 운영체제가 표준화된 인터페이스를 통해서 앱과 연결관계를
맺고 있기 때문에 둘 간의 의존 관계가 낮다고 볼 수 있으며, 앱 간의 의존관계도 낮다고 볼 수 있습니다.
공개성 입장에서는 "운영체제 내부의 공개성은 낮으나, 운영체제와 앱 간 연결관계는 공개성이 높다."
모듈성 입장에서는 "운영체제와 앱, 앱 간의 모듈성이 높다."
"그렇다면, 안드로이드나 iOS는 오픈 시스템인가요?"
이것을 다루려면, 거버넌스 (Governance) 문제를 다뤄야 합니다.
공개성 (Openess)은 시스템의 특성 중 하나인 반면에, 해당 시스템의 거버넌스를 누가 쥐고 있느냐는
시스템의 특성이라고 볼 수 없습니다. 시스템의 특성에 영향을 미치는 요인 중 하나죠.
예를 들어서, 안드로이드는 자신의 생태계에 입성할 키를 개발 API와 마켓플레이스를 통해서 제공합니다.
여기까진 오픈이 되어 있는 겁니다. 하지만, 안드로이드 자체, 안드로이드 생태계는 구글이
거버넌스를 쥐고 있죠. 여기까지 바라보면 폐쇄된 겁니다.
앞서 이야기한 것 같이 공개성 (Openess) 또한 상대적인 값입니다.
여기까지는 오픈 시스템입니다. 여기부터는 클로즈드 시스템입니다라고 말하긴 어렵습니다.
이 문제는 나중에 따로 다루겠습니다.