[정보처리기사][서버 프로그램 구현] 소프트웨어 아키텍처

컴퓨터/정보처리기사

728x90
반응형

소프트웨어 아키텍처

소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체

소프트웨어 아키텍처를 설계한다는 것은 소프트웨어 개발의 상위 설계의 개념입니다.

 

  • 소프트웨어 아키텍처 설계의 기본 원리
    • 모듈화
    • 추상화
    • 단계적 분해
    • 정보은닉

1. 소프트웨어 아키텍처 설계의 기본 원리

1.1 모듈화 - Modularity

시스템의 기능들을 모듈 단위로 나누는 것

  • 장점
    • 소프트웨어의 성능 향상
    • 시스템의 수정 및 재사용 용이
    • 유지관리 용이
  • 단점
    • 모듈의 크기를 너무 작게 나누면 모듈 간의 통합 비용이 많이 든다.
    • 모듈의 크기를 너무 크게 나누면 모듈 하나의 개발 비용이 많이 든다.

1.2 추상화 - Abstraction

문제를 전체적이고 포괄적인 개념을 설계 → 세분화하여 구체화시켜나가는 것

  • 유형
    • 과정 추상화 - 전반적인 흐름만을 파악할 수 있게 설계하는 유형
    • 데이터 추상화 - 데이터의 구조를 표현하여 설계하는 유형
    • 제어 추상화 - 이벤트등에 대한 흐름을 표현하여 설계하는 유형

1.3단 계적 분해 - Stepwise Refinement

문제를 상위의 중요 개념부터 → 하위 개념으로 분할시켜 구체화하는 기법

  • 특징
    • Niklaus Wirth에 의해 제안된 하향식 설계 전략
    • 포괄적인 기능부터 시작해 점자적으로 구체화 한다.
    • 알고리즘, 자료구조등 구체적인 내용은 가능한 뒤로 미루어 진행

1.4 정보 은닉 - Information Hiding

모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근 또는 변경하지 못하도록 하는 기법

  • 특징
    • 정보은닉을 통해 모듈을 독립적으로 수행할 수 있다.
    • 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않는다.
    • 즉 수정, 시험, 유지보수가 용이하다.

2. 소프트웨어 아키텍처의 품질 속성

소프트웨어 아키텍처가 좋은 품질로 설계되었는지 확인하기 위해 평가 요소를 구체화한 것

  • 종류
    • 시스템 측면 - 성능, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
    • 비즈니스 측면 - 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등
    • 아키텍처 측면 - 개념적 무결설, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등

3. 소프트웨어 아키텍처의 설계 과정

  1. 설계 목표 설정
  2. 시스템 타입 결정
  3. 아키텍처 패턴 적용
  4. 서브시스템 구체화
  5. 검토

4. 협약에 의한 설계

컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것

  • 명세에 포함될 조건
    • 선행 조건 - 오퍼레이션 호출 전 참이 되어야 할 조건
    • 결과 조건 - 오퍼레이션 호출 후 만족되어야 할 조건
    • 불변 조건 - 오퍼레이션 실행 중 항상 만족되어야 할 조건

아키텍처 패턴

아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제

  • 주요 아키텍처 패턴
    • 레이어 패턴 (Layers Pattern)
    • 클라이언트 - 서버 패턴 (Client - Server Pattern)
    • 파이프 - 필터 패턴 (Pipe - Filter Pattern)
    • 모델 - 뷰 - 컨트롤러 패턴 ( MVC:Model - View - Controller Pattern)
    • 마스터 - 슬레이브 패턴 (Master - Slave Pattern)
    • 중개인 패턴 (Broker Pattern)
    • 피어 - 투 - 피어 패턴 (Peer - To - Peer Pattern)
    • 이벤트 - 버스 패턴 (Event - Bus Pattern)
    • 블랙보드 패턴 (Blackboard Pattern)
    • 인터프리터 패턴 (Interpreter Pattern)

1. 레이어 패턴 - Layers Pattern

시스템을 계층으로 구분하여 구성하는 고전적인 방법의 패턴

  • 하위 계층은 바로 위 계층의 서비스 제공자가 된다
  • 상위 계층은 바로 아래 계층의 클라이언트가 된다.
  • 대표적으로 OSI참조 모델이 있다.

2. 클라이언트-서버 패턴 - Client - Servier Pattern

하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴

  • 사용자가 클라이언트를 통해 서버에 요청
  • 요청받은 서버는 클라이언트에 응답
  • 클라이언트는 응답받은 데이터를 사용자에게 전달

3. 파이프 - 필터 패턴 - Pipe - Filter Pattern

데이터 스트림 절차의 각 단계를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴

  • 앞 시스템의 결과물을 파이프를 통해 전달받고 처리한 후 다시 파이프를 통해 뒤 시스템으로 넘겨주는 방식
  • 데이터 변환, 버퍼링, 동기화등에 주로 사용된다.
  • 대표적으로 UNIX의 Shell이 있다.

4. 모델 - 뷰 - 컨트롤러 패턴 - Model - View - Controller Pattern

MVC이라 불리며, 모델, 뷰, 컨트롤러로 구조화하는 패턴

  • 모델은 정보들을 보관하고 요청에 따라 정보를 제공해 주는 역할을 한다.
  • 뷰는 사용자에게 필요한 정보를 모델로부터 받아 보여주는 역할을 한다.
  • 컨트롤러는 사용자의 요청을 받아 뷰를 제어하고 모델에 데이터를 갱신하는 역할을 한다.

5. 마스터 - 슬레이브 패턴 - Master - Slave Pattern

슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업을 수행하는 패턴

  • 장애 허용 시스템, 병렬 컴퓨팅 시스템에 주로 사용

6. 중개인 패턴 - Broker Pattern

사용자가 원하는 서비스를 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해 주는 패턴

즉, 중계 역할을 하는 구조가 있는 패턴

  • 분산환경 시스템에 주로 사용

7. 피어 - 투 - 피어 패턴 - Peer - To - Peer - Pattern

피어라 불리는 하나의 컴포넌트가 클라이언트 또는 서버가 될 수도 있는 패턴

즉, 요청과 응답을 둘 다 할 수도 있는 구조

  • 파일 공유 네트워크 시스템에 주로 사용

8. 이벤트 - 버스 패턴 - Event - Bus Pattern

특정 채널에 이벤트 메시지를 발행하면, 해당 채널을 구독한 리스너들이 메세지를 받아 처리하는 패턴

  • 알림 서비스 시스템에 주로 사용

9. 블랙보드 패턴 - Blackboard Pattern

모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴

  • 음성인식, 차량 식별, 신호 해석 시스템에 주로 사용

10. 인터프리터 패턴 - Interpreter Pattern

프로그램 코드의 각 라인을 수행하는 방법을 지정하고 기호마다 클래스를 갖도록 구성된 패턴

  • 번역기, 컴파일러, 인터프리터 시스템에 주로 사용
728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :