[소프트웨어 공학] 6강. 소프트웨어 설계

소프트웨어 설계


아키텍쳐 설계

소프트웨어 아키텍처 설계 개념


아키텍처 설계 (Architectural Design)


아키텍처를 명세화(설계)해야 하는 이유


아키텍처 설계 시 고려하여야 할 사항 - 성능

  1. 성능(Performance)

    • 중요한 오퍼레이션은 내부에서 처리하고, 통신은 최소화함.
    • 잘게 쪼개진 컴포넌트보다는 보다 큰 구성요소로 성능을 높임.
  2. 보안성(Security)

    • 내부 계층 안에 주요자산들을 위치시키는 계층적 아키텍처를 사용함.
  3. 안전성(Safety)

    • 안전이 필요한 중요기능은 내부에 위치시키며, 서브시스템은 작게 유지함.
  4. 가용성(Availiability)

    • 장애 등에 대비하기 위하여 컴포넌트나 메커니즘의 중복적 구현이 되어 있어야 함
  5. 유지보수성(Maintainability)

    • 세분화 되어 교체 가능한 컴포넌트를 사용하여야 함


아키텍처 설계 시 고려하여야 할 사항 - 사고

  1. 참고 아키텍처

    • 설계중인 시스템을 위한 템플렛으로서 작동할 수 있는 일반 응용 시스템의 아키텍처가 존재하는가?
  2. 분산 프로세스

    • 시스템이 다수의 프로세서로 어떻게 분산될 것인가?
  3. 아키텍처 스타일

    • 시스템에 적절한 아키텍처 스타일은 무엇인가?
  4. 시스템구성 접근법

    • 시스템을 구성하는데 이용되는 기본적인 접근법은 무엇이 될 것인가?
  5. 모듈분해

    • 시스템에서 구성 단위가 모듈들로 어떻게 분해될 것인가?
  6. 제어

    • 시스템에서 구성 단위들의 오퍼레이션을 제어하기 위해 어떤 전략이 사용될 것인가?
  7. 설계평가

    • 아키텍처의 설계를 어떻게 평가할 것인가?
  8. 문서화

    • 시스템의 아키텍처를 어떻게 문서화 할 것인가?


아키텍처 설계 시 고려하여야 할 사항을 참고하여 아키텍처를 설계하고
설계물을 결정 후 구현에 나서게 됨.

가장 중요한 일은 참고할 만한 아키텍처 모델을 조사한 후 전부 또는
일부분을 템플릿으로 활용하고 본인에 맞게 변형하여 아키텍처를 설계해야 함.


시스템 구성방법에 따른 아키텍처 모델

저장소 모델 (Repository Model)


Client / Server 모델


계층적 모델 (Layered Model)


객체지향 분해 (Object-Oriented Decomposition)


기능지향 파이프라이닝 (Function-Oriented Pipelining)


중앙집중제어 (Centralized Control)


이벤트기반 제어 (Event-Based Control)


응용 시스템 아키텍처

데이터 처리 시스템


트렌젝션 처리 시스템


이벤트 처리 시스템


언어 처리 시스템


사용자 인터페이스 설계


사용자 인터페이스 설계 시 고려사항


사용자 인터페이스 설계 원칙

구분 내용
사용자 친밀성 (User Familiarity) 인터페이스는 해당시스템을 가장 많이 사용하는 사람이 익숙하도록 그려져야 함.
일관성 (Consistency) 인터페이스는 어디서나 가능하고, 비슷한 기능은 같은 방법으로 사용될 수 있는 일관성을 유지해야 함.
최소의 당황 (Minimal Surprise) 시스템의 행동이 사용자를 놀라게 해서는 안 됨.
복구가능성 (Recoverability) 인터페이스는 에러(실수)로 인한 사용이 허용된 사용자의 복구기능이 포함되어야 함.
사용자 안내 (User Guidance) 인터페이스는 에러발생시 에러 의미에 대한 전달과 사용자 도움말 기능을 제공하여야 함.
사용자 다양성 (User Diversity) 인터페이스는 다양한 시스템 사용자의 타입에 따는 접근 기능을 제공하여야 함.


사용자 인터페이스(UI: User Interface) 설계 프로세스

UI설계 프로세스의 주요 활동 구성


정보구조 (Information Architecture)