출처 : http://www.swarchitect.org/

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

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

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

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

소프트웨어 아키텍처의 구성 요소

소프트웨어 아키텍처는 다음과 같은 구성 요소로 이루어져 있다.

  • 시스템의 구성요소와 구성 요소 들 사이의 연결 관계
  • 시스템의 설계와 진화를 통제하는 원리와 가이드라인
  • 시스템 구성 요소들의 collaboration
  • 시스템이 어떻게 확장되고 수정될 것인가에 대한 결정
  • 시스템의 구성 요소들이 가지고 있는 기술

 

아키텍트의 역할

개발 프로젝트에서 초기에 기술적인 부분에 대하여 의사결정을 진행한다. 또한 프로젝트가 진행될 수 있도록 기술적인 이슈들을 해결한다. 아키텍트가 프로젝트의 각 단계마다 해결하는 문제는 다음과 같다.

표 Ⅱ-1. 프로젝트의 각 단계마다 아키텍트가 수행하는 역할

단계

아키텍트가 수행하는 역할

  • Inception 
  • Architecture prototyping
  • Make/buy trade-offs
  • Primary scenario definition
  • Archtecture evaluation
  • CASE tool, 개발 툴 등 각종 툴 사용 방안
  • 설계 문서 템플릿 결정
  • 설계자와 개발자의 작업 규칙 결정
  • Elaboration 
  • Architecture baselining
  • Primary scenario demonstration
  • Make/buy trade-off baselining  
  • Construction 
  • Architecture maintenance
  • Multiple-component issue resolution
  • Performance tuning
  • Quality improvements 
  • Transition 
  • Architecture maintenance
  • Multiple-component issue resolution
  • Performance tuning
  • Quality improvements 

개발 프로젝트에서 아키텍트가 하는 역할은 다음과 같다.

아키텍트는 아키텍처를 만들고 컴포넌트와 컴포넌트 사이의 관계를 파악하고 인터페이스를 설계해야 한다. 프로젝트 관리자는 아키텍트가 아키텍처 문서를 생산하도록 관리해야 한다.

프로젝트에서는 아키텍처에 대한 일차 문서가 만들어지면 아키텍처 팀이 해체되고 각 subsystem에 대한 개발 리더로서 역할을 할 경우가 많다. 이 경우 시스템 전체를 보고 아키텍처를 upgrade하는 역할이 없어진다. 아키텍처가 일차 완성된 후에도 아키텍처는 자주 수정된다. 개발자들은 아키텍처 팀이 만든 문서를 받아들이지 않고 새로운 요구사항이 들어오면 아키텍처의 본래 목적에서 벗어난 방식으로 나름대로 개발하려 한다. 따라서 아키텍처 팀은 프로젝트 끝까지 해체되지 않고 아키텍처에 대한 수정 및 업그레이드에 대한 책임을 져야 한다.

또한 아키텍트는 개발자들이 아키텍처를 이해하도록 도와야 하고 아키텍처 밑에 숨은 결정 사항을 설명해야 한다. 즉 아키텍트는 개발자들에게는 컨설턴트로서 리더로서의 역할을 해야 한다.

 

아키텍트의 역량

아키텍트가 가져야 역량

  • 기술 관점
 아키텍트가 알아야 할 것  아키텍트는 무엇을 해야 하는가?  갖춰야 할 자질
 
  • 도메인과 관련 기술에 대한 이해
  • 어떤 기술적인 이슈가 프로젝트 성공의 핵심인지
  • 개발 기술과 설계 기술
 
  • 모델링
  • Tradeoff analysis
  • Prototype/experiment/simulation
  • 아키텍처 문서, 교육 자료, 프레젠테이션 준비
  • 기술적인 트렌드와 roadmap 분석
 
  • 창조적
  • 실용적
  • 탐구적/분석적
  • 추상적인 단계에서 작업하는 것을 즐겨야 함
  • 모호함이 발견되었을 때 새로운 솔루션을 구하는 자세


 

  • 컨설팅 관점

아키텍트가 알아야 할 것

아키텍트는 무엇을 해야 하는가?

갖춰야 할 자질

  • 압축하여 전달하는 기술
  • 컨설팅 프레임워크
  • 신뢰할 수 있는 어드바이져로서 관계 형성
  • 개발자들이 아키텍처를 통해 무엇을 원하는지 파악해야 함
  • 개발자들이 아키텍처의 가치를 이해하고 아키텍처를 어떻게 사용할 지를 알도록 도와야 함.
  • 주니어 아키텍트에 대한 멘터링
  • 다른 사람의 성공을 돕는 능력
  • 호소력이 있어야 함
  • 작업 방식을 변경하도록 돕고 작업 절차에 정통해야 함
  • 좋은 멘터, 교사로서의 능력

+ Recent posts