반응형
소프트웨어 아키텍처

시스템 아키텍처

1) 시스템 아키텍처의 개념

  • 하드웨어와 소프트웨어를 아우르는 시스템 전체에 대한 논리적인 기능 체계
  • 시스템의 컴포넌트가 무엇이고,어떻게 상호작용하며 정보를교환하는지설명
  • 시스템의 구성 및 작동 원리를 설명하는 프레임워크

2) 시스템 아키텍처의 특징

  • 시스템 구성 요소에 대한 설계 및 구현이 자세히 기술
  • 구성 요소 간의 관계 및 시스템 외부 환경과의 관계를 표현
  • 요구 사항 및 시스템의 전체 생명주기를 고려하여 시스템의 최적화를 목표

3) 시스템 아키텍처의 설계

  • 시스템 아키텍처 설계는 소프트웨어 아키텍처 설계에 제약을 하는상위 설계
  • 소프트웨어 아키텍처의 설계는 소프트웨어 상세 설계를 제약
  • 전체적인 아키텍처 설계,인터페이스 정의,사용자 인터페이스 설계등을 수행
  • 시스템 아키텍처 설계,소프트웨어 아키텍처 설계,소프트웨어 상세 설계는 일반적인 공통특성을가짐

소프트웨어 아키텍처

1)소프트웨어 아키텍처의 개념

  • 소프트웨어의 골격이 되는 기본 구조이며 소프트웨어 전체에 대한 큰 밑그림
  • 소프트웨어 구성 요소의 유기적인 결합 형태와 전체구조
  • 설계 및 구현을 위한 구조적, 비구조적인 틀을 제공
  • 소프트웨어를 이루고 있는 구성 요소인 모듈이나 컴포넌트들과의 관계를 정의
  • 모듈, 컴포넌트 간의 상호관계를 설계하고 전개하기 위한 지침
  • 소프트웨어 구조를 비롯한 개발에서 요구되는 기능과 품질을 확보하고, 소프트웨어 구축 및 지속적인 개선이 용이하도록 하는 역할

2) 소프트웨어 아키텍처 설계

① 아키텍처 드라이버
  • 아키텍처에 영향을 주는 요구사항
  • 효과적인 아키텍처 설계를 위해 아키텍처 드라이버를 정확히 식별
② 아키텍처 설계의 입력물과 출력물
  • 입력물: 시스템 요구사항, 아키텍처 드라이버
  • 태스크(Task)
- (더 이상 분해되지 않는) 작업의 단위
- 병행되지 않는 하나의 프로세스
 
  • 출력물
- 아키텍처를 문서화
- 아키텍처의 추가적인 관련 사항(가이드 라인) 

3) 소프트웨어 아키텍처 설계 시 고려사항

  • 개발자와 사용자 간의 의사소통 도구로 활용할 수 있어야 한다.
  • 구현(코딩) 시 제약 사항을 파악해야 한다.
  • 재사용할 수 있도록 설계해야 한다.
  • 품질 요구사항을 반영하여 품질의 정도를 측정해야 한다.
  • 이해하기 쉽고, 명확하게 작성해야 한다.
  • 표준화된 형식으로 작성하며, 버전 관리를 해야 한다.

4) 소프트웨어 아키텍처의 비즈니스 품질

시장 적시성(Time to Market) : 지정한 시간에 소프트웨어를 출시
비용과 이익(Cost and Benefit) : 비용의 절감이나 유연성, 어느 부분에 초점을 맞출 것인지 판단
예상 시스템 수명(Predicted Lifetime of the System) : 소프트웨어 유통 및 폐기 시점을 고려해 확장성이나 이식성을 고려
목표 시장(Targeted Market) : 사용 고객층을 정확히 파악하여 시장성을 파악하여 시장성을 파악
신규 발매 일정 또는 공개 일정(Rollout Schedule) : 소프트웨어의 신규 발매 유통, 관리 일정을 공개하여 관리
기존 시스템과의 통합(Integration with Legacy System) : 기존 시스템 또는 타 시스템과의 통합 방법을 고려

소프트웨어 아키텍처 패턴

1) 계층화 패턴(Layered Pattern)

① 기능을 분리한 계층

  • 시스템을 논리적인 계층 구조로 쌓아두고 각각의 인접 레이어끼리만 상호작용을 하는 패턴
  • 특정 레이어의 유지보수를 통해 시스템을 개선할 수 있다.
  • SOA(Service Oriented Architecture) 기반 애플리케이션 계층
- 표현 계층(Presentation Layer: UI 계층) 
- 프로세스 계층(Process Layer: Service 계층)
- 비즈니스 계층(Business Layer: Domain 계층)
- 데이터 접근 계층(Data Access Layer: Persistence 계층)

② n-Tier 패턴: 시스템을 물리적으로 분리한다.

  • 1-Tier: 클라이언트, 애플리케이션, 데이터 계층을 하나의 서버 또는 클라이언트에 함께 구현
  • 2-Tier: 클라이언트와 애플리케이션 계층, 데이터 계층을 각각 구분하여 구현
  • 3-Tier: 각각의 계층을 모두 물리적으로 분리하여 구현

2) 클라이언트 / 서버 패턴(Client / Server Pattern)

  • 서비스를 제공하는 서버와, 서비스를 요청하는 클라이언트로 구성
  • 분산 네트워크 방식으로 병목 현상을 줄일 수 있음
    보안에 취약하고 응용 프로그램이 복잡해질 수 있음

3) 마스터 / 슬레이브 패턴(Master / Slave Pattern)

  • 작업을 분리하고 배포하는 주인(Master)과 요청 작업을 처리하는 하인 (Slave)으로 구성
  • 슬레이브는 마스터의 작업 요청을 처리하고, 처리된 결과를 되돌려준다.
  • 마스터 데이터베이스는 원본 데이터를 가지고, 슬레이브는 복제본을 동기화하는 형태로 활용

4) 파이프 - 필터 패턴(Pipe - filter Pattern)

  • 데이터 스트림을 생성하고 처리하는 시스템에서 사용
  • 서브 시스템(Filter)이 입력 데이터를 받아 처리한 결과를 파이프를 통해 다음 서브 시스템으로 넘겨주는 과정을 반복
  • 버퍼링 또는 동기화 목적으로 사용

5) 브로커 패턴(Broker Pattern)

  • 브로커는 컴포넌트 간의 통신을 조정하는 역할
  • 분산 시스템에서 원격 서비스 실행을 통해 상호작용
  • 서버와 클라이언트 사이에 위치하여 클라이언트가 요청한 기능을 서버 대신 클라이언트에게 서비스
  • 웹 서버, 메시지 브로커 모듈 등에 활용

6) 피어 투 피어 패턴(Peer-to-peer Pattern)

  • 서버와 클라이언트의 역할이 유동적으로 바뀔 수 있다. 
  • 서로에게 서비스를 요청하고 서비스 하는 파일 공유 네트워크 등에 활용될 수 있다.

7) 이벤트-버스 패턴(Event-bus Pattern)

  • 알림 서비스 등에 활용된다.
  • 이벤트를 처리하는 주요 컴포넌트
- 이벤트 소스(Event Source) : 데이터와 처리 결과
- 이벤트 리스너 (Event Listener) : 특정 채널의 메시지를 구독
- 채널(Channel) : 서버, 클라이언트, 컴포넌트
- 이벤트 버스(Event Bus): 메시지 경로

8) MVC 패턴(Model-View-Controller Pattern)

① 개념

 

  • 사용자 인터페이스로부터 비즈니스 로직을 분리하여 응용 프로그램의 시각적 요소를 쉽게 수정할 수 있도록 지원
  • 사용자 인터페이스 변경에 로직이 영향을 덜 받도록 만든 모델
  • 여러 개의 서브 시스템을 사용하는 경우에 적합한 환경
  • 웹 애플리케이션 등에 활용되며 View, Controller, Model로 구성

② Model

  • 응용 프로그램의 데이터에 해당하며 요청한 데이터 처리를 담당
  • 인터페이스의 변형에 영향을 받지 않음
  • 모델 상태의 변화가 있을 경우에 컨트롤러와 뷰에 통보

③ View

  • 모델로부터 가져온 데이터의 시각화를 담당
  • 버튼, 텍스트 상자, 체크 박스 등의 사용자 인터페이스 요소

④ Controller

  • 데이터와 비즈니스 로직 사이의 상호작용을 관리
  • 모델의 변화에 영향을 주는 명령을 추가, 삭제, 수정 가능
  • 뷰를 통해 사용자 요청을 해당 모델에 전달하고, 모델의 응답을 다시 사용자에게 돌려줌

9) 블랙보드 패턴(Blackboard Pattern)

① 개념

  • 음성 인식, 차량 식별 및 추적 등에 활용
  • 블랙보드에 접근하여 기존 지식 소스와의 패턴 매칭을 통해 데이터를 검색
  • 제어 컴포넌트는 패턴 매칭과 데이터 생성을 담당

② 주요 컴포넌트

  • 블랙보드(Blackboard) : 소스 저장 메모리
  • 지식 소스(Knowledge Source): 특정 데이터, 블랙보드에 저장된 데이터
  • 제어 컴포넌트(Control Component): 모듈 선택, 설정 및 실행 담당

10) 인터프리터 패턴(Interpreter Pattern)

  • 특정 언어나 명령어를 해석하는 컴포넌트를 설계할 때 사용
  • 특정 언어로 작성된 표현식(문장, 라인)을 수행하는 방법을 지정
  • SQL의 Query 등에 활용

코드 설계

1) 코드의 개념

  • 정보 처리 효율을 극대화하기 위해 일정한 규칙을 통하여 부여한 숫자, 문자 등의 기호체계
  • 코드는 컴퓨터 처리에 융통성과 일관성을 부여할 수 있어야 하며 업무 처리에 있어 효율성과 용이성이 부여
  • 사용하는 데이터를 사용 목적에 따라 그룹으로 분류 및 나열하거나 선별 및 추출
반응형

+ Recent posts