금번 92회 정보관리기술사 문제 중 아키텍처 스타일에 관련한 문제가 나왔는데, 본 문제가 상당히 의미있어 여기에 남겨본다. 단순 키워드 설명이 아니라 실전에 어떻게 응용해야 하는지, 그리고 4+1 View를 언급하며 해당 아키텍처의 UML 다이어그램까지 그려야 하는 복합적 사고를 요하는 문제였다. 단순 암기로는 풀 수 없는 전형적인 문제로서 기술사 문제가 지향해야 할 대표적 사례가 아닌가 생각해본다.

아래는 내가 속한 90회 정보처리기술사회에 제출한 해당 문제의 풀이이다.

문제) 아래와 같은 간단한 응용에 대한 소프트웨어아키텍처를 작성하고자 한다. 다음 질문에 답하시오.
---------------------------------------------------------------------------------------------- 
 영문 문자열을 입력하여 각 문자별 대소문자를 체크하여 대소문자를 바꾸어 출력하는 
 프로그램이다.
 
 입력 :  ToDayIsHoliDay           출력 : tOdAYiShOLIdAY 
----------------------------------------------------------------------------------------------
  (1) C&C 뷰(Component & Connector, 프로세스 뷰)를 작성할 때 가장 적당한 아키텍처 스타일을 제시하고 필요한 컴포넌트와 커넥터를 제시하시오.
  (2) 위에서 제시한 아키텍처 스타일에 따라 아키텍처를 작성하시오.
  (3) 위 응용에 대한 모듈 뷰(논리 뷰) 작성을 위한 컴포넌트를 제시하고 아키텍처를 작성하시오.


1. 주어진 문제의 분석
  가. 문제 해결의 key factor
      - 데이터 변형 임무 : 데이터 처리 모듈과 이를 둘러싼 환경의 overview 제시
      - 프로세스 뷰와 모듈 뷰 모두를 요구함으로 runtime 및 code 구조 설계 필요
      - Data Flow Model : 데이터 프로세싱에 대한 전형적 데이터 흐름 모델
  나. 아키텍처 스타일 적용 필요성
      - 기 검증된 패턴을 통한 최적의 아키텍처 제시
      - 아키텍처 스타일이 제공하는 주요 제한조건을 통해 현 문제의 이슈사항 사전 인지
      - Best Practice의 사용을 통해 아키텍처의 대외적 신뢰성 및 권위 획득


2. 주어진 문제에서의 C&C 뷰 기반 아키텍처 스타일, 컴포넌트/커넥터 식별
  가. 선정 아키텍처 스타일 : Pipe & Filter
      - 연속적인 input data에 대한 일련의 변형 동작으로 구성
      - 데이터 변형을 담당하는 filter(component)와 다른 처리를 담당하는 filter간 데이터 채널을 담당하는
         pipe(connector)로 구성
  나. Pipe & Filter 스타일 선정 근거
      - Data flow Model에 적용 용이
      - 다양한 C&C 뷰 기반 아키텍처 스타일 중 단순화된 데이터 프로세싱 스타일로 본 문제 성격에 부합
  다. Component와 Connector의 식별
      - Pipe & Filter 스타일에서는 Component에 Filter가, Connector에는 Pipe가 직접적으로 매핑
      - Component : Pump(Input), 문자 추출 Filter, 문자 변환 Filter, 문자조합 Filter, Sink(Output)
      - Connector : 특별한 logic 없음 - Component 간 연결선으로 표시


3. Pipe & Filter 아키텍처 스타일에 따른 아키텍처
  가. 프로세스 뷰 기반 아키텍처 다이어그램
      - Activity 기반으로 Component(Filter)와 Filter간 데이터 흐름 및 방향을 Connector(pipe)로 나타냄
  나. 아키텍처 설명
      - Activity Diagram : Runtime(데이터 프로세스)의 주요 동작과 데이터 흐름을 나타내기에 적합한 UML 사용
      - 3개의 주요 Activity : 주요 변환 프로세스를 3개의 filter로 식별 및 연계


4. 모듈 뷰(논리 뷰) 기반 컴포넌트 식별 및 아키텍처
  가. 컴포넌트 식별
      -
 
컴포넌트 식별 전략 : 위 5개 Activity에 대해 각각의 컴포넌트로 직접적 매핑
      - 컴포넌트 #1. Pump : 문자열의 입력, 생성 담당. Data Source
      - 컴포넌트 #2. Characterizer : 
문자열(string)을 문자 배열(char[])로 분리/변환
      - 컴포넌트 #3. InverterInterval : 
주어진 문자에 대한 ASCII 코드 변환을 통해 case의 변경
      - 컴포넌트 #4. Stringizer : 
문자 배열을 문자열로 통합
      - 컴포넌트 #5. Sink : 
변환된 문자열의 출력
      - * 
Inverter (Package) : 주요 변환 Component의 모음 / 본 임무의 경계 명시
  나. 모듈 뷰 기반 아키텍처 : Class Diagram
      - 
논리 뷰의 대표적 UML Diagram인 Class Diagram 기반 아키텍처 다이어그램
      - 
Inverter 패키지를 통해 문자 변환을 위한 operation class의 경계를 명시
      - 
각 클래스 내 operation의 Parameter로 타 클래스를 명시적으로 의존함으로, 클래스 용법의 명확화 고려

Reference
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
Posted by 어쨌건간에