(소프트웨어 설계) 3. 애플리케이션 설계


아직 안 끝났어…



021. 소프트웨어 아키텍처 (★★★)

  • SW 구조설계)를 SW골격의 기본구조로/사용자의 비기능적 요구사항 제약을 반영하여 좋은 품질을 유지하면서 기능적 요구사항을 달성/기본원리-모듈화, 추상화, 단계별 분해, 정보은닉
    • 상위 설계/하위 설계
탑 디자인 하위 디자인
닉네임 건축설계, 예비설계 모듈 설계, 상세 설계
디자인 목표 전체 시스템 구조 시스템의 내부 구조 및 동작
상세 목록 구조, 데이터베이스, 인터페이스 구성 요소, 데이터 구조 및 알고리즘
  • 모듈식 : SW 성능향상이나 시스템 수정, 재사용, 유지관리 등이 용이하도록 시스템 기능을 모듈화 / 자주 사용하는 모듈을 공통 모듈로 정리 → 재사용성 ↑ / 작은 모듈 사이즈 ~ > 대량… 통합 비용 ↑ / 기능 분리 가능 ~> 인터페이스 단순화 / 효율적인 프로그램 관리가 가능하며 오류의 연쇄반응을 최소화
  • 추상적인 : 문제의 포괄적인 개념을 설계하고 구체적으로 세분화 / 복잡한 문제에 대해 … 완전한 시스템을 구축하기 전에 유사한 모델을 생성하고 테스트 / 가능한 최소한의 비용으로 실제 상황을 처리하고 대략적인 이해 시스템 구조 및 구성
    • 유형 (페이스트리)
      • 제어 추상화: 이벤트가 발생하는 정확한 프로세스 및 방법 정의 X ~> 대표 표현으로 대체
      • 프로세스 추상화: 자세한 프로세스 정의 X, 전체 프로세스만 이해하는 것을 목표로 함
      • 데이터(Data) 추상화: 데이터의 세부 속성 및 용도 정의 X ~> 데이터 구조를 나타내는 표현으로 대체
  • 단계별 개선: 하향식 설계 전략…상위 중요 개념에서 하위 개념의 개선/예시-전체 건물의 내부 구성 설계
  • 정보 숨기기 : 다른 모듈이 접근하거나 변경되지 않도록 정보를 숨기는 기술 / 필요한 정보만 인터페이스를 통해 교환 / 모듈은 독립적으로 실행 가능, 하나의 모듈이 변경되더라도 다른 모듈은 영향을 받지 않음 X ~> 수정, 테스트, 그리고 유지/예시 -감기약(성분은 모르지만 약인건 안다)
  • 소프트웨어 아키텍처 품질 속성 : 잘 설계된 것을 평가하기 위한 요인/체계적, 사업적, 건축적 측면
    • 시스템 측면) 성능/보안/사용성/기능성/사용성/변경 용이성/확장성/기타 속성(테스트 용이성, 배포 용이성, 안정성 등)
    • 비즈니스 측면) 시장 적시성/비용 및 이점/예상 시스템 수명 주기/기타 속성(목표 시장, 릴리스 일정, 시스템 통합 등)
    • 아키텍처 측면) 개념적 무결성(일관성 유지) / 정확성, 완전성 / 구성 가능성 / 기타 속성(가변성, 테스트 가능성, 적응성, 일관성, 대체 가능성 등)
  • SW 아키텍처 설계 프로세스) 설계 목표 설정→시스템 유형 결정→아키텍처 패턴 적용→서브시스템 사양→검토
  • 시스템 유형/프로토콜별 설계
    • 시스템 유형) Interactive 시스템(요청 발생 시 응답 및 처리) / Event-Driven 시스템(외부 상태 변화에 따라 동작) / Transformation 시스템(입력 데이터에 따라 예약된 작업 실행) / Object Persistence 시스템(DB를 활용하여 파일을 효율적으로 저장, 검색 및 업데이트 시스템)
    • 프로토콜에 의한 설계) 구성 요소를 설계할 때 클래스에 대한 여러 가정을 공유하는 사양
      • Precondition) 연산을 호출하기 전에 참이어야 하는 조건(Precondition)
      • Result Condition) 연산 수행 후 만족해야 할 조건(Postcondition)
      • Invariant) 연산을 수행하는 동안 항상 충족되어야 하는 조건(Invariant)

022. 아키텍처 모드 (★★★)

  • 개요) 아키텍처 설계 시 참고할 수 있는 대표적인 솔루션이나 예제 / 개발 시간 단축 & 고품질 SW 제작 가능 / 간단한 통신 / 손쉬운 유지 보수 / 개발 전 예측 가능한 시스템 특성 / Layer mode, client-server mode, pipeline – Filter 패턴, 모델-뷰-컨트롤러 패턴
  • 계층적 패턴: 계층적 분류, 고전적 접근 / 각 서브시스템은 계층을 형성함 / 시스템은 특정 계층만 대체하여 개선 가능 / OSI 참조 모델
  • 클라이언트-서버 모델: 서버 구성 요소와 여러 클라이언트 구성 요소로 구성 / 사용자: 클라이언트와만 통신 / 서버: 항상 클라이언트 요청 대기 / 클라이언트와 서버는 요청과 응답이 동기적으로 수신되지 않는 한 독립적입니다.

  • 파이프 필터 패턴 : 데이터 흐름 프로세스의 각 단계를 필터 컴포넌트로 캡슐화, 파이프라인을 통해 데이터 전송 / 재사용성 우수, 확장 용이 / 파이프라인 구축을 위한 재배치 / 주로 데이터 변환, 버퍼링, 동기화에 사용 / 필터 간 데이터 이동 시 오버헤드 발생 데이터 변환 / Unix-shell
  • 모델-뷰-컨트롤러 패턴 : Subsystem을 3개로 구성하는 패턴 / 분리 ~> 독립적인 개발 작업 / Model : Subsystem의 핵심 기능, 데이터 저장 / View : 사용자에게 정보 표시 / Controller : 사용자로부터 입력된 변경 요청을 처리하기 위해 모델에 명령 전송 / 대화식 애플리케이션을 위한 여러 보기 만들기 ~>


  • 기타 패턴
    • 마스터-슬레이브 모드 : 내결함성 시스템 및 병렬 컴퓨팅 시스템에서 주로 사용
    • 브로커 모드: 주로 분산 환경 시스템에서 사용
    • 피어 투 피어 모드: 다중 스레드 접근 방식 사용
    • 이벤트 버스 모드: 소스(생성), 리스너(실행), 채널(채널), 버스(관리)
    • 칠판 패턴: 주로 음성 인식, 차량 인식, 신호 해석 등에 사용됩니다.

    • 인터프리터 패턴: 특정 언어로 작성된 프로그램 코드를 해석하는 컴포넌트를 설계할 때 사용

023. 객체 지향 (★★★)
024. 객체지향 분석 및 설계 (★★★)
025. 모듈 (★★★)
026. 일반 모듈 (★★★)
027. 코드 (★★★)
028. 디자인 패턴 (★★★)