소프트웨어 아키텍처 지식 체계

소프트웨어 아키텍처의 주목적은 시스템의 구조를 개발하고, 시스템과 서브 시스템의 컴포넌트간의 관계를 표현하는데 있다. 소프트웨어 아키텍처은 데이터가 시스템 전체에 통할 수 있게 인터페이스를 정의하고 것으로 시스템 구조와 데이터를 합병시켜 준다.

소프트웨어 아키텍처의 중요성을 이해하기 위해서, 일상 생활의 간단한 이야기를 제시한다.

당신은 돈을 저축해서 경치 좋은 땅을 구입해 희망하던 집을 짓기로 결정했습니다. 당신이 집을 지었던 경험이 없다면 건축업자를 방문해서 당신이 바라고 있는 사항(방의 개수와 크기, 유행하는 스타일, 사우나(스파), 대성당같은 천정, 많은 창문 등)을 설명해야합니다. 건축업자는 설명을 들은 후, 몇 가지 질문을 한 다음 몇 주 안에 설계를 하겠다고 당신에게 말한다.
당신은 건축업자의 전화를 애타게 기다리면서 새 집에 관하여 많은 상상을 해본다. 그가 무엇을 생각해 낼까? 마침내 전화가 왔고, 당신은 건축업자의 사무실로 달려간다. 건축업자는 큰 서류철을 가져와서 당신 앞에 2층 욕실의 배관 도표를 펼처놓고, 그것을 자세하게 설명한다.

“그런데 전체 설계는 어떻게 되었죠?”라는 당신의 질문에 건축업자는 “걱정하지 마세요. 그건 나중에 할거니까요?”하고 한다.

건축업자의 접근법이 약간 이상해보지이지 않는가? 우리는 건축업자의 마지막 말에 안심할 수 있을까? 물론 그렇지 않다. 누구나 먼저 집의 윤관과 평명 계획, 구조도면(architecture view)을 제공해 주기 원한다. 아직도 많은 소프트웨어 엔지니어들은 이 이야기 속의 건축업 자처럼 행동한다. 소프트웨어 엔지니어들은 소프트웨어 아키텍처를 배재하고 “배관”에만 초점을 맞추고 있다.

소프트웨어 아키텍처(Software Architecture)은 소프트웨어 시스템의 컴포넌트와 서브시스템 사이의 관계를 설명한다. 또한, 소프트웨어 아키텍처은 시스템의 소프트웨어 아키텍처 문서를 나타낸다. 소프트웨어 아키텍처는 프로젝트의 이해당사자들 사이의 의사소통에 활용된다. 소프트웨어 아키텍처은 초기 상위 수준 설계의 의사결정과 과거 프로젝트의 설계 패턴, 설계 컴포넌트의 재사용을 보여준다.

소프트웨어 아키텍처의 기원은 Edsger Dijkstra(1968)와 David Parnas(1970초)의 연구에 시작되었다. 이들은 소프트웨어 시스템의 구조과 올바른 구조를 만드는 것이 중용함을 강조하였다. 이분야의 연구는 1990년 초에 아키텍처 스타일(architectural styles (patterns)), 아키텍처 기술 언어(architecture description languages), 아키텍처 문서화(architecture documentation)와 정식 기법(formal methods)에 집중되면서 증가되었다. 다양한 소프트웨어 공한 연구소은 선진 소프트웨어 아키텍처의 원리에서 주요한 역할을 하였다.

카네기멜론 연구소의 Mary Shaw과 David Garlan은 1996년에 Software Architecture: Perspectives on an Emerging Discipline을 출간하였다. 이 도서는 컴포넌트, 커넥션, 스타일 등의 소프트웨어 아키텍처의 앞선 개념을 선도하였다. Irvine의 소프트웨어 연구소(university of California)의 소프트웨어 아키텍처 연구은 아키텍처 스타일, 아키텍처 설명 언어, 동적 아키텍처 분야에서 주요한 공헌을 하였다. ANSI/IEEE 1471-2000: Recommended Practice for Architecture Description of Software-Intensive Systems은 소프트웨어 아키텍처 영역에서 공식적인 표준이며, 최근 ISO에서 ISO/IEC DIS 25961으로 채택되었다.

소프트웨어 아키텍처는 소프트웨어 컴포넌트 및 외부로 나타나는 컴포넌트의 특성, 관계들로 구성되는 시스템의 구조(Bass, Clements, and Kazman.1998)
소프트웨어 아키텍처는 프로그램 및 시스템의 컴포넌트, 컴포넌트들 사이의 상호관계의 구조이며 이들을 설계하고 전걔하기 위한 지침과 원리(Garlan and Perry,1995)
아키텍처는 조직적인 시스템의 구조이다. 아키텍처는 반복적으로 작은 부분들로 분할될 수도 있고 이들은 인터페이스와 관계를 통해 서로 상호작용하며, 분할된 부분들을 조립하기 위한 제약사항들도 아키텍처에서 정의(OMG)

<저작권자 ⓒ잠자리(jamjalee.com) 무단 전재-재배포 금지>