출처 : http://www.swarchitect.org/
소프트웨어 아키텍처에 대한 정의
위의 정의들을 요약하여 소프트웨어 아키텍처를 다음과 같이 정의한다.
소프트웨어 아키텍처는 시스템의 핵심 구성 요소와 구성 요소들 사이의 연결 관계로 이루어진다. 핵심 구성 요소는 시스템이 가지고 있는 모듈, 모듈 사이의 연결, 시스템의 변경, 진화하기 위한 기술적인 원칙, 모듈들 사이의 상호작용, 시스템이 동작하기 위한 기술을 포함한다.
즉 소프트웨어 아키텍처는 구현할 시스템에 대한 top-down view이며 시스템에 대한 기술적인 명세서이며 공학적인 청사진이다.
소프트웨어 아키텍처의 구성 요소
소프트웨어 아키텍처는 다음과 같은 구성 요소로 이루어져 있다.
- 시스템의 구성요소와 구성 요소 들 사이의 연결 관계
- 시스템의 설계와 진화를 통제하는 원리와 가이드라인
- 시스템 구성 요소들의 collaboration
- 시스템이 어떻게 확장되고 수정될 것인가에 대한 결정
- 시스템의 구성 요소들이 가지고 있는 기술
아키텍트의 역할
개발 프로젝트에서 초기에 기술적인 부분에 대하여 의사결정을 진행한다. 또한 프로젝트가 진행될 수 있도록 기술적인 이슈들을 해결한다. 아키텍트가 프로젝트의 각 단계마다 해결하는 문제는 다음과 같다.
표 Ⅱ-1. 프로젝트의 각 단계마다 아키텍트가 수행하는 역할
단계 |
아키텍트가 수행하는 역할 |
|
|
|
|
|
|
|
|
개발 프로젝트에서 아키텍트가 하는 역할은 다음과 같다.
아키텍트는 아키텍처를 만들고 컴포넌트와 컴포넌트 사이의 관계를 파악하고 인터페이스를 설계해야 한다. 프로젝트 관리자는 아키텍트가 아키텍처 문서를 생산하도록 관리해야 한다.
프로젝트에서는 아키텍처에 대한 일차 문서가 만들어지면 아키텍처 팀이 해체되고 각 subsystem에 대한 개발 리더로서 역할을 할 경우가 많다. 이 경우 시스템 전체를 보고 아키텍처를 upgrade하는 역할이 없어진다. 아키텍처가 일차 완성된 후에도 아키텍처는 자주 수정된다. 개발자들은 아키텍처 팀이 만든 문서를 받아들이지 않고 새로운 요구사항이 들어오면 아키텍처의 본래 목적에서 벗어난 방식으로 나름대로 개발하려 한다. 따라서 아키텍처 팀은 프로젝트 끝까지 해체되지 않고 아키텍처에 대한 수정 및 업그레이드에 대한 책임을 져야 한다.
또한 아키텍트는 개발자들이 아키텍처를 이해하도록 도와야 하고 아키텍처 밑에 숨은 결정 사항을 설명해야 한다. 즉 아키텍트는 개발자들에게는 컨설턴트로서 리더로서의 역할을 해야 한다.
아키텍트의 역량
아키텍트가 가져야 할 역량
- 기술 관점
아키텍트가 알아야 할 것 | 아키텍트는 무엇을 해야 하는가? | 갖춰야 할 자질 |
|
|
|
- 컨설팅 관점
아키텍트가 알아야 할 것 |
아키텍트는 무엇을 해야 하는가? |
갖춰야 할 자질 |
|
|
|
'개발도 하냐?' 카테고리의 다른 글
Eclipse + JEUS (0) | 2009.08.19 |
---|---|
약도 만들기 (0) | 2009.08.14 |
허드슨(Hudson)을 이용한 지속적인 통합(Continuous integration with Hudson) (0) | 2009.07.31 |
[펌]트위터의 마케팅 활용 (0) | 2009.07.29 |
Trac, Ticket system과 workflow의 이해 (0) | 2009.07.27 |