[소프트웨어 공학] 소프트웨어 아키텍처 개념 및 구조

소프트웨어 아키텍처 개념

 

복잡한 시스템을 설계하는 경우 이를 적당히 쪼개어 모듈화하고 각 모듈들이 특정한 역할을 담당하도록 구성하는 것이 좋다. 적정 규모로 쪼개면 설계하고, 개발하고, 테스팅 하고 전반적인 과정에 걸쳐 효율성이 높아지기 때문이다. 따라서 시스템 설계 작업은 각 시스템을 구성한느 서브 시스템을 파악하고 각 서브시스템들의 인터페이스를 정의하고 규칙을 찾아내야한다. 바로 이것이 소프트웨어 아키텍처가 의도하는 것이다.

 

소프트웨어 아키텍처
건축 설계와 소프트웨어 아키텍처 설계는 유사한 점이 많다.

소프트웨어 아키텍처란 외부에서 인식할 수 잇는 특성을 가진 소프트웨어 구성요소들의 구조라고 할 수 있다(Bass, 2003). 아키텍처에 존재하는 요소들은 그 특성을 나타내는 추상 개념과 관계가 잘 드러나야 한다. 특성이라 함은 컴포넌트가 제공하는 기능이나 서비스, 성능 등을 의미한다.

 

최근에는 시스템이 분산화되고 복잡해지면서 소프트웨어 아키텍처의 역할이 상승하엿다. 또한 시스템을 구성하고 연결하기 위한 방법이 더욱 다양해지면서 아키텍처 설계가 매우 중요해졋다. 아키텍처를 설계하는 과정에 미들웨어 데이터베이스, 서버, 보안 컴포넌트의 형태를 결정하기 때문이다.

 

상세 설계까지 진행하고 이러한 사항을 조정하는 것은 불가능에 가깝다. 시스템의 성능과 신뢰성 등의 품질 목표를 세우고 이를 평가할 수 있는 단계가 소프트웨어 아키텍처 설계단게이다.

 

아키텍처의 뷰(view) 관점

 

 소프트웨어 아키텍처의 설계와 표현에서 뷰(View) 관점은 대단히 중요하다. 뷰는 시스템을 특정한 구성요소와 그들 사이의 관계로 표현한다. 뷰가 사용하는 구성 요소는 뷰가 무엇을 강조하기를 원하느냐에 따라 다르다.

 

 

아키텍처 관점은 크게 3가지로 나눌 수 있다.

 

  • 모듈 : 시스템을 단위 코드 집합으로 본다. 단위 코드는 시스템의 기능 중 일부를 구현한 것이다.

  • 컴포넌트와 커넥션 : 시스템을 컴포넌트라 부르는 런타임 개체의 집합으로 본다. 고유 식별 가능한 단위이다.

  • 배치 : 단위 소프트웨어가 어떤 하드웨어 노드에 배치되는가에 관점을 둔다.

서로 다른 관점이라고 하여 연관이 없는 것은 아니다. 모두 같은 시스템을 표현하는 것이며 이에 따라 어떤 뷰에 있는 구성요소와 다른 뷰의 요소사이에 관련이 있다. 단 여러 다른 관점의 아키텍처를 설계할 경우 각 관계를 잘 파악하여야 한다.

 

아키텍처 스타일

 

소프트웨어 시스템이 복잡해지면서 시스템의 구조에 관련한 문제는 더욱 중요해졌다. 일단 시스템이 개발 착수된 그 이후에는 잘못된 구조를 바로잡기가 쉽지 않다. 대부분의 서비시스템에 대한 인터페이스를 변경해야하기 때문이다. 이런 문제의 중요성을 인식하여 소프트웨어 아키텍처라는 개념이 출현하였다.

 

 

이에 소프트웨어 구조는 시스템 분할, 전체 제어 흐름, 오류 처리 방침, 서브시스템 간의 통신 프로토콜을 포함한다(Shaw, 1996).

 

  • 저장소 구조 : 서브시스템들이 단일 중앙 저장소의 자료를 접근하고 변경한다. 이는 급여 시스템이나 은행시스템과 같은 데이터베이스 관리 시스템에서 대표적으로 볼 수 있다. 데이터가 중앙에 위치하여 서브시스템 사이의 병렬처리와 통합 문제를 잘 다룰수있기 때문이다.

 

  • MVS 구조 : Model, Voew Controller 구조인 MVC 구조는 모델, 뷰, 제어구조라는 세가지 다른 서브시스템으루 구성되어 있다. 모델 서브시스템은 도메인 지식을 저장하고 있으며 뷰 서브시스템은 사용자에게 보여지는 영역을 담당한다. 제어 서브시스템은 사용자 간 상호작용을 관리한다.

 

  • 클라이언트 서버 구조 : 서버는 클라이언트라 불리는 서브시스템에게 서비스를 제공한다. 클라이언트는 사용자로부터 입력을 받아 범위를 체크하고 데이터베이스 트랜잭션을 구동하여 필요한 데이터를 수집한다. 서버는 트랜잭션을 수행하고 데이터의 일관성을 보장한다.

 

  • 계층 구조 : 시스템이 계층적으로 분할되어있는 구조를 의미한다. 서브시스템이 하나의 계층이 되어 하위 층이 제공하는 서비스를 상위 층의 서브시스템이 사용하도록 구성된다. OSI 구조와 같은 경우를 예로 들 수 있다.

 

  • 파이프 필터 구조 : 서브시스템이 입력 데이터를 받아 처리하고 결과를 다른 시스템에 보내는 작업이 반복되는 구조이다. 서브시스템을 필터라 칭하고 서브시스템 사이의 관계를 파이프라고 한다. 대표적으로 Unix 쉘을 예로 들 수 있다.

 

 

+ Recent posts