금번 92회 정보관리기술사 문제 중 아키텍처 스타일에 관련한 문제가 나왔는데, 본 문제가 상당히 의미있어 여기에 남겨본다. 단순 키워드 설명이 아니라 실전에 어떻게 응용해야 하는지, 그리고 4+1 View를 언급하며 해당 아키텍처의 UML 다이어그램까지 그려야 하는 복합적 사고를 요하는 문제였다. 단순 암기로는 풀 수 없는 전형적인 문제로서 기술사 문제가 지향해야 할 대표적 사례가 아닌가 생각해본다.
문제) 아래와 같은 간단한 응용에 대한 소프트웨어아키텍처를 작성하고자 한다. 다음 질문에 답하시오.
•
---------------------------------------------------------------------------------------------
영문 문자열을 입력하여 각 문자별 대소문자를 체크하여 대소문자를 바꾸어 출력하는
프로그램이다.
입력 : ToDayIsHoliDay 출력 : tOdAYiShOLIdAY
•
---------------------------------------------------------------------------------------------
(1) C&C 뷰(Component & Connector, 프로세스 뷰)를 작성할 때 가장 적당한 아키텍처 스타일을 제시하고 필요한 컴포넌트와 커넥터를 제시하시오.
(2) 위에서 제시한 아키텍처 스타일에 따라 아키텍처를 작성하시오.
(3) 위 응용에 대한 모듈 뷰(논리 뷰) 작성을 위한 컴포넌트를 제시하고 아키텍처를 작성하시오.
아래는 내가 속한 90회 정보처리기술사회에 제출한 해당 문제의 풀이이다.
문제 분석
1.
문제 해결의 key factor
a.
데이터 변형 임무 : 데이터 처리 모듈과 이를 둘러싼 환경의 overview 제시
b.
프로세스 뷰와 모듈 뷰 모두를 요구함으로 runtime 및 code 구조 설계 필요
c.
Data Flow Model : 데이터 프로세싱에 대한 전형적 데이터 흐름 모델
2.
아키텍처 스타일 적용 필요성
a.
기 검증된 패턴을 통한 최적의 아키텍처 제시
b.
아키텍처 스타일이 제공하는 주요 제한조건을 통해 현 문제의 이슈사항 사전 인지
c.
Best Practice의 사용을 통해 아키텍처의 대외적 신뢰성 및 권위 획득
C&C 뷰 기반 아키텍처 스타일, 컴포넌트/커넥터 식별
1.
선정 아키텍처 스타일 : Pipe & Filter
a.
연속적인 input data에 대한 일련의 변형 동작으로 구성
b.
데이터 변형을 담당하는 filter(component)와 다른 처리를 담당하는 filter간 데이터 채널을 담당하는 pipe(connector)로 구성
2.
Pipe & Filter 스타일 선정 근거
a.
Data flow Model에 적용 용이
b.
다양한 C&C 뷰 기반 아키텍처 스타일 중 단순화된 데이터 프로세싱 스타일로 본 문제 성격에 부합
3.
Component와 Connector의 식별
a.
Pipe & Filter 스타일에서는 Component에 Filter가, Connector에는 Pipe가 직접적으로 매핑
b.
Component : Pump(Input), 문자 추출 Filter, 문자 변환 Filter, 문자조합 Filter, Sink(Output)
c.
Connector : 특별한 logic 없음 - Component 간 연결선으로 표시
Pipe & Filter 아키텍처 스타일에 따른 아키텍처
1.
프로세스 뷰 기반 아키텍처 다이어그램
a.
Activity 기반으로 Component(Filter)와 Filter간 데이터 흐름 및 방향을 Connector(pipe)로 나타냄
b.
아키텍처 설명
i.
Activity Diagram : Runtime(데이터 프로세스)의 주요 동작과 데이터 흐름을 나타내기에 적합한 UML 사용
ii.
3개의 주요 Activity : 주요 변환 프로세스를 3개의 filter로 식별 및 연계
모듈 뷰(논리 뷰) 기반 컴포넌트 식별 및 아키텍처
1.
컴포넌트 식별
•
컴포넌트 식별 전략 : 위 5개 Activity에 대해 각각의 컴포넌트로 직접적 매핑
•
컴포넌트 #1. Pump : 문자열의 입력, 생성 담당. Data Source
•
컴포넌트 #2. Characterizer : 문자열(string)을 문자 배열(char[])로 분리/변환
•
컴포넌트 #3. InverterInterval : 주어진 문자에 대한 ASCII 코드 변환을 통해 case의 변경
•
컴포넌트 #4. Stringizer : 문자 배열을 문자열로 통합\
•
컴포넌트 #5. Sink : 변환된 문자열의 출력
•
* Inverter (Package) : 주요 변환 Component의 모음 / 본 임무의 경계 명시
2.
모듈 뷰 기반 아키텍처 : Class Diagram
•
논리 뷰의 대표적 UML Diagram인 Class Diagram 기반 아키텍처 다이어그램
•
Inverter 패키지를 통해 문자 변환을 위한 operation class의 경계를 명시\
•
각 클래스 내 operation의 Parameter로 타 클래스를 명시적으로 의존함으로, 클래스 용법의 명확화 고려
References
2.
Documenting Component and Connector Views with UML 2.0 : Technical Report CMU/SEI-2004-TR-008
4.
Software Architecture in Practice 2ed. by Len Bass, Paul Clements, Rick Kazman
5.
A UML Profile for Documenting the Component-and-Connector Views of Software Architectures by Lic. Valerio Adrián Anacleto, Epidata Consulting