시스템 아키텍처 정의서 - siseutem akitegcheo jeong-uiseo

Sketch IT with Mookie

아키텍쳐 정의서 본문

아키텍트는 아키텍처 정의단계에서 "아키텍처 정의서" 형태로 해당 프로젝트의 아키텍처와 관련된 사항을 설계하여 문서화 할 수 있다. 하지만 앞에서도 설명했듯이 아키텍처 정의서는 하나의 문서 또는 다이어그램으로 표현될 수 있는 것이 아니다. 이 문서에 포함되는 내용은 앞에서 설명한 각 관점 별 산출물을 만들고 필요에 따라 디스크립션을 추가하여 정의서를 만들 수 있다.

프로젝트에서의 아키텍처 정의는 프로젝트마다 조금씩 다를 수 있겠지만 소프트웨어 아키텍처와 기술 아키텍처로 구분하여 설계를 진행하며 각각은 다음과 같은 내용을 포함한다.

  기술 아키텍처: 시스템을 구성하고 있는 네트워크, 하드웨어, 시스템 소프트웨어의 각 요소들을 표현하고 이들의 연결 관계를 표현.

소프트웨어 아키텍처: 시스템의 주요 기능과 기능들 사이의 관계 및 아키텍처 스타일에 대한 정의.

기술 아키텍처

기술 아키텍처는 다음과 같은 그림이나 UML Deployment Diagram 등으로 표현할 수 있다.

시스템 아키텍처 정의서 - siseutem akitegcheo jeong-uiseo

[그림] 기술 아키텍처

기술 아키텍처는 주로 테크니컬 아키텍트에 의해 작성된다. 기술 아키텍처의 경우 이미 많은 프로젝트에서 수행되고 있으며 별도의 교육과정으로 다루고 있기 때문에 여기서는 상세하게 설명하지 않는다. 하지만 다음 장에서 설명할 웹 애플리케이션에서 웹 애플리케이션 구축과 관련된 기술 아키텍처 패턴들을 설명하고 있으니 참고하기 바란다.

소프트웨어 아키텍처

소프트웨어 아키텍처는 시스템의 기능적, 비기능적 요구사항에 맞추어 컴포넌트를 도출하고, 컴포넌트들 간의 관계 및 컴포넌트의 내부 구조에 대한 정의를 한다. 소프트웨어 아키텍처를 정의하기 위해서는 다시 여러 개의 관점으로 정의할 수 있는데 기능적인 관점에서 애플리케이션 아키텍처를 정의할 수 있으며, 구조적인 관점에서 아키텍처 스타일을 정의할 수 있다.

애플리케이션 아키텍처

애플리케이션 아키텍처는 시스템의 기능 구조적인 관점에서 바라보는 아키텍처다. 애플리케이션 아키텍처는 각각의 기능 단위를 컴포넌트로 식별하고 이들 컴포넌트간의 관계를 표현하는 컴포넌트 다이어그램의 형태로 나타낼 수 있다.

따라서 CBD(Component Based Development)에서는 아키텍처 정의 단계에서 시스템을 구성하는 컴포넌트를 식별하고 이들 컴포넌트 사이의 관계에 대해 정의를 한다. CBD 방법론이 아닌 경우라도 모듈 단위로 분리하여 이들 모듈을 패키지로 표현하여 패키지들 간의 관계를 표현 함으로서 애플리케이션 아키텍처를 정의할 수 있다.

● 소프트웨어 아키텍처 스타일

소프트웨어의 작동 원리를 중심으로 레이어로 아키텍처 스타일을 정의하고, 소프트웨어를 구성하는 클래스 요소와 이들간의 관계도 규정한다. 일반적으로 CBD 프로젝트의 경우 컴포넌트의 분류 및 정의를 제시하고 컴포넌트의 내부 구조를 정의한다.

- 컴포넌트 아키텍처 스타일

[그림] 컴포넌트 아키텍처

그림과 같이 컴포넌트 아키텍처의 스타일을 정의하는 경우 시스템은 레이어 구조를 가지고 있으며 컴포넌트는 4종류의 컴포넌트로 구성되며 각각의 컴포넌트 계층에 대한 의존관계를 설명하고 있는 것이다.

위의 그림 대로라면 표기된 컴포넌트의 의존 관계에서 알 수 있듯 어플리케이션 컴포넌트는 비즈니스 컴포넌트를 호출할 수 있고, 비즈니스 컴포넌트는 인프라스트럭쳐 컴포넌트를 호출할 수 있다. 그러나 그 역 방향의 호출은 허용하지 않는다. 그리고 어플리케이션 컴포넌트에서 직접 Database로의 접근도 허용하고 있다.

위의 아키텍처 스타일 정의에서 어플리케이션 컴포넌트에서 Database로의 관계가 설정되지 않았다면 Database로의 접근은 반드시 비즈니스 컴포넌트를 이용해야만 가능하다는 제약 조건이 전체 시스템에 추가되는 것과 같은 효과를 가진다 할 수 있다.

구분

설명

UI 컴포넌트

사용자와직접인터페이스있는 User Interface 컴포넌트로 JSP, Servlet, JavaScript, JavaBeans등으로구성되며배포단위는 .war 형태이다. (유지보수나 WAS지원여부에 따라 WAR형태로아카이브하지않고배포할수도 있다.)

어플리케이션컴포넌트

특정프로젝트에서의미가있는비즈니스기능을제공한다. 따라서상대적으로범용성과사용성이떨어지게되는데, 예를들면 DBMS의존적이고보고서기능을위해 여러테이블을조인하여데이터를가공해야하는경우이거나 외부시스템과연계하는경우혹은복잡한비즈니스 프로세스를반영하게되는컴포넌트이다.

비즈니스컴포넌트

여러프로젝트간에일반적이고특정비즈니스도메인에서범용적인 비즈니스기능을제공한다. 따라서상대적으로사용성이 높다. 컴포넌트설계공용성/가변성등을 고려한다. 예를들면동일도메인에서엔티티(entity) 속성을 반영하는컴포넌트이거나범용적으로사용될있는 컴포넌트이다.

기반컴포넌트

특정비즈니스도메인이아닌전체도메인에서사용 가능한시스템기반기능을제공한다. 일반적으로어플리케이션 서버벤더가제공하는보안, 트렌젝션, 권한, naming 서비스 등이나, 프레임워크에서지원하는공통서비스를의미한다.

업무 기능을 구현하기 위해서는 하나 이상의 컴포넌트가 활용되는데, 이때 각 컴포넌트들 사이의 호출 구조를 일관된 기준으로 잡아 불필요한 복잡성을 사전에 제거할 수 있다.

- 계층적 아키텍처 스타일

계층적 아키텍처 (Layered Architecture)는 소프트웨어의 구성 요소를 각 역할별로 Layer로 구분하여 각 Layer는 인접한 다른 Layer와 서비스를 주고받는 관계로 정의한다. 이렇게 Layer로 나누어진 구조에서는 한 Layer에 변경이 가해지더라도 다른 Layer에 파급효과가 최소화되도록 설계하여 변경이나 유지보수에 잘 대응할 수 있고, 만들어진 프로그램 자원을 재사용하기 용이하다는 등의 장점이 있다.

계층적 아키텍처 구조의 경우도 프로젝트마다 조금씩 다르게 구성할 수 있지만 여기서는 네 개의 계층으로 구분한다.

계층

책임

Presentation

사용자의 액션에 반응하여 Business계층으로 request를 전송하고 처리결과 response를 받아 사용자에게 표시한다.

Business

애플리케이션 비즈니스 로직 처리

비즈니스 레벨에 있는 객체들간의 관계를 관리

Integration

Resource 레이어에 대한 접근 및 Resource 관리

Resource

시스템에서 관리하는 주요 자원계층

주로 데이터베이스가 되지만 기존 Legacy 시스템인 경우 있음