본문 바로가기

Dev.../소프트웨어 아키텍처

[SA강좌] Part 1-5 소프트웨어 아키텍처의 정의

소프트웨어 아키텍처의 정의

가장 먼저 다른 사람들의 소프트웨어 아키텍쳐에 대한 정의에 대해서 알아보고 이 곳에서 사용할 소프트웨어 아키텍쳐의 정의에 대해서 알아보도록 한다.

아직도 소프트웨어 아키텍쳐에 대한 '정의'는 무수히 많은 곳에서 정의되고 정답자체가 아직은 모호한 분야라고 할 수 있으므로, 각자 머릿속에 그 '정의'를 선택하거나 정의할 수 있고, 그 부분들에 대해서 생각해 봐야 한다.

소프트웨어 아키텍처의 정의들

  • 고전적인 정의

 

  • ANSI/IEEE Std 1471-2000정의

 

  • Bass, Clements, Kazman 정의

소프트웨어 아키텍처는 시스템의 구조, 시스템의 구조들에 대한 구조이다.

 

  • Dewayne E. Perry, Alexander L. Wolf 정의

소프트웨어 아키텍처는 특별한 형태를 가진 아키텍처 구성 요소들의 집합이다. 아키텍처 구성 요소는 세가지로 구분된다. 프로세스 구성 요소, 데이터 구성 요소, 연결 구성 요소로 구분된다.

  • Galarn and Perry 정의

소프트웨어 아키텍처는 프로그램이나 시스템의 구성 요소들 사이의 구조, 관계, 설계와 시스템 업그레이드를 통제하는 지침과 원칙이다.

  • Booch 정의

소프트웨어 아키텍처는 소프트웨어의 구조에 대한 중요한 의사 결정의 집합이다. 의사 결정에는 소프트웨어 구성 요소에 대한 선택, 인터페이스에 대한 선택, 구성 요소들 사이의 상호작용, 서브시스템을 구성하기 위한 구성 요소와 상호작용의 결합으로 이루어진다.

  • Myron Ahn 정의

소프트웨어 아키텍처는 모듈, 프로세스, 데이터, 이들의 구조, 구성 요소들 사이의 관계, 구성 요소와 관계들이 어떻게 확장되고 수정될 있는지, 사용하는 기술은 무엇 인지로 이루어져 있으며 소프트웨어 아키텍처를 통해 시스템의 유연성과 성능을 판단 있고 시스템을 어떻게 구현하고 수정할 있는지를 판단할 있다.

위의 같은 다양한 정의가 존재하므로 자신만의 정의를 만들거나 선택해보라, 실제적으로 이 개념들은 하고자하는 프로젝트에 따라 다르게 존재할 수 있다.

소프트웨어 아키텍처에 대한 정의

위의 정의들을 요약하여 소프트웨어 아키텍처를 다음과 같이 정의하여 보자..

소프트웨어 아키텍처는 시스템의 핵심 구성 요소와 구성 요소들 사이의 연결 관계로 이루지므로. 핵심 구성 요소는 시스템이 가지고 있는 모듈, 모듈 사이의 연결, 시스템의 변경, 진화하기 위한 기술적인 원칙, 모듈들 사이의 상호작용, 시스템이 동작하기 위한 기술을 모두 포함하는 것으로 정의한다.

소프트웨어 아키텍처는 구현할 시스템에 대한 top-down view이며 시스템에 대한 기술적인 명세서이며 공학적인 청사진이다.

기본적인 개념은 MDA에서 취하고 있는 방향과 유사하다.