brunch

표준 아키텍처, 오픈 아키텍처의 의미

어려운 용어 쉽게 풀어보기

by 심야서점



명확한 정의가 있는 용어라면 사람마다 각기 다르게 쓸 상황이 발생하진 않을 겁니다. 예전에 미국 협회에서 만든 자격증을 공부할 때, 시험 후기로 적은 말이 있습니다.


“이 자격증을 공부하기 위해서는 용어와 영어에 익숙해야 합니다.”


새로운 영역에 대한 공부를 할 땐 해당 영역에서 통용하는 용어를 정확하게 이해하고, 다른 사람들에게 설명할 수도 있어야 합니다. 다른 사람에게 설명할 수 없는 용어는 모르는 것과 다르지 않습니다.


서론이 길었지만, 검색하면 해당 용어의 정의만 수십 개를 찾을 수 있고, 설명을 할 때 듣는 사람이 정확하지 이해 못 할 가능성이 높은 용어가 바로 “아키텍처”입니다.


제 책에서는 아키텍처란 용어 앞에 무엇이 붙느냐에 따라서, 그것의 의미가 달라진다고 적어두었지만 누구나 단순하고, 명확한 답을 원하기 마련입니다.


최근 세미나, 자문에서 아키텍처에 대한 정의를 묻는 질문이 많았습니다. 단순히 아키텍처의 정의만 묻는 질문을 넘어서 플랫폼, 프레임워크, 모듈과의 차이는 무엇인가까지 발전한 질문이었죠.


처음 질문을 받았을 때는 나름 문헌 상에 가장 적합하다고 생각하는 정의를 설명했었는데, 질문자도 답변자도 뭔가 깔끔하지 않은 상황이 이어지더군요. 그래서, 백 점짜리 답은 아니더라도 듣는 사람이 다음과 같이 이해하기 쉬운 답변을 합니다.



“아키텍처는 만들고자 하는, 또는 존재하는 시스템의 뼈대이다.”


뼈대이기 때문에 아키텍처는 대상 시스템의 가장 큰 특성을 부여하고, 영향을 미칩니다.

뼈대이기 때문에 시스템의 일부만 표시가 되거나, 중복해서 포함하면 안 됩니다.

어떤 시스템이든 뼈대부터 만듭니다. 그리고, 뼈대를 만들기 위해서 시스템이 갖는 콘셉트를 정해야 합니다.

뼈대를 잘못 만들면 시스템을 고치기 어렵거나 불가능할 수도 있습니다.


아키텍처는 시스템의 뼈대이기 때문에 아키텍처를 표현할 때는 시스템의 콘셉트, 콘셉트를 실현하기 해서 반영된 아키텍처의 특징이 먼저 표현되어 있어야 합니다. 그다음에는 시스템을 구성하는 구성요소와 구성요소 간의 연결 관계, 상호작용은 표시되어야만 합니다. 모듈러 아키텍처에서는 모듈과 인터페이스가 되겠죠. 또한 모듈러 아키텍처와 같은 제품군 아키텍처에서는 다양성 메커니즘 (Variety Mechanism)이 표현되어야만 합니다.


정리하면, 아키텍처를 표현할 때는 대상 시스템의 콘셉트, 콘셉트를 위한 아키텍처의 특징, 구성요소, 구성요소 간의 인터페이스가 기본적으로 표시해야만 합니다. 나머지 표현 수준, 활용 목적 등에 따라서 기입된 항목의 상세 수준 외에 추가 항목이 표현돼야만 할 겁니다.


“자, 여기서 아키텍처를 표준화한다는 말은 무슨 의미일까요? 또는 표준 아키텍처를 만든다는 의미는 무슨 뜻일까요?”


첫 번째, 아키텍처의 표현 항목 중에서 대상 시스템의 콘셉트, 콘셉트를 위한 아키텍처의 특징이 변치 않는다는 것을 의미합니다. 아키텍처는 결국 시스템의 콘셉트를 달성하기 위한 수단인데, 아키텍처를 표준화한다는 것은 시스템이 갖는 콘셉트를 최대한 변화시키지 않겠다는 의미가 됩니다.


예를 들어서, 특정 제품을 개발할 때 업그레이드 용이성, 가용성을 높이는 콘셉트를 도입하길 원해서 제품 아키텍처에 콘셉트를 반영했습니다. 그러고 나서 해당 제품 아키텍처를 표준 아키텍처로 정했습니다. 당연하게도 초기에 설정한 제품 콘셉트를 유지가 되겠죠.


두 번째, 아키텍처의 구성요소와 구성요소 간의 인터페이스 (구성요소와 전역 시스템 간의 인터페이스 포함)가 표준화됨을 의미합니다. 구성요소는 구현된 결과물이 표준화된다는 것이 아니라, 구성요소가 담당하는 시스템 내 역할이 바뀌지 않음을 의미합니다. 그리고, 바뀌지 않고 표준화되는 것은 구성요소 간의 관계, 인터페이스가 됩니다. 연결 관계, 인터페이스가 바뀌지 않은 상태에서 구성요소만 바꿈으로써 신규 시스템을 만드는 것이죠.


그래서, 표준 아키텍처를 만든다고 하면, 시스템의 구성요소 종류와 역할을 표준화하고, 구성요소 간의 표준화하는 것이 핵심이라고 생각하면 됩니다.


“오픈 아키텍처, 개방형 아키텍처를 만든다는 것은 무슨 의미일까요?”


오픈 아키텍처, 개방형 아키텍처를 만든다는 건, 대상 시스템을 구현하는 주체를 특정 개인, 회사, 단체가 독점하지 않겠다는 것을 의미합니다. 시스템을 구성하는 구성요소를 기획, 구현, 운영하는 주체는 열어두겠다는 것을 의미하죠. 이런 의미에서 안드로이드는 오픈 아키텍처일까요? 안드로이드 생태계에서 앱의 기획, 개발, 운영을 다수의 개인, 회사에 열어두었습니다. 물론, 거버넌스는 구글이 맡고 있으나, 이런 면에서 안드로이드 앱 생태계는 오픈 아키텍처에 가깝다고 이야기할 수도 있겠죠. 그런데, 안드로이드 운영체제 자체는 폐쇄형에 가깝다고 볼 수 있겠죠.


여기서 자유롭게 앱을 만들 수 있는 건 안드로이드와 통신할 수 있는 연결 관계, 인터페이스, 개발 API를 열어두었기 때문이죠. 덕분에 앱 개발자는 안드로이드 소스 코드를 굳이 분석하지 않더라도 자신이 원하는 앱을 만들어서 배포할 수 있는 것입니다.


이처럼 오픈 아키텍처는 시스템의 특정 구성요소의 기획, 개발, 운영을 열어두었다는 것을 의미하므로, 타 구성요소 또는 시스템 전체와의 상관관계, 상호작용의 통로인 인터페이스가 오픈됨을 의미합니다.


정리하겠습니다.


아키텍처는 시스템의 뼈대로 시스템의 콘셉트를 실현하기 위한 시스템의 특성을 결정한다.

표준 아키텍처는 시스템의 특성을 유지하기 위해서 시스템의 구성요소의 역할과 종류, 시스템 간 연결 관계 즉, 인터페이스를 표준화한 것을 의미한다.

오픈 아키텍처는 시스템의 개별 구성요소 또는 전체를 구현하는 주체를 제한하지 않기 위해서 인터페이스를 공개한 것을 의미한다.


노파심에서 다시 말씀드리자면, 해당 정의는 학술적으로 합의된 정의가 아닙니다. 이해도가 낮은 분들이 좀 더 쉽게 이해하기 위한 정의입니다. 여기서 조금 감을 잡고, 학술적인 정의를 다시 찾아보시길 권장합니다.






keyword
매거진의 이전글따라 하기 어려운 기업 경쟁력, 다양성 메커니즘