정보처리기사

[정보처리기사] 소프트웨어 구축 (2)

hminor 2023. 7. 4. 19:11

소프트웨어 설계

  • 소프트웨어 설계
    • 개념
      • 요구사항 명세서를 참조하여 소프트웨어의 구체적인 설계서를 작성하는 단계
    • 종류 (CASE 도구의 상위 CASE, 하위 CASE 와 유사)
      • 상위 설계 (분석, 설계 관련)
        • 아키텍처 설계
        • 데이터 설계
        • 인터페이스 정의
        • 사용자 인터페이스 설계
      • 하위 설계 (구현 관련)
        • 모듈 설계
        • 자료구조 설계
        • 알고리즘 설계
    • 소프트웨어 설계의 원리
      • 정보은닉(Information Hiding)
        • 다른 객체에게 자신의 정보를 숨기고, 자신의 연산만을 통해 접근이 가능하도록 한다.
      • 분할과 정복(Divide & Conquer)
        • 규모가 큰 소프트웨어를 여러 개의 작은 서브시스템으로 나누어 하나씩 완성시킨다.
      • 추상화(Abstraction)
        • 실세계의 복잡한 상황을 간결하고 명확하게 핵심 위주로 단순화시킨다.
        • 공통적인 요소를 뽑아서 하위 클래스에서 실제로 구현가능하도록 해야한다.
        • 추상화 기법
          • 과정 데이터
          • 자료 데이터
          • 제어 데이터
      • 모듈화(Modulization)
        • 실제로 개발할 수 있는 작은 단위로 나눈다.
      • 단계적 분해(Stepwise Refinement)
        • 기능을 점점 작은 단위로 나누어 점차적으로 구체화하는 방법
  • 설계 모델링
    • 개념
      • 소프트웨어를 구성하는 모듈들을 식별하고, 이것들의 연결을 그림으로 표현한 것.
    • 설계 모델링 유형
      • 구조 모델링
        • 시스템의 구성 요소들과 이들 사이의 구조적인 관계와 특성들을 모델링
        • UML 정적 다이어그램
      • 행위 모델링
        • 소프트웨어의 구성요소들이 언제 어떠한 순서로 기능을 수행해야 작용하는지를 모델링
        • UML 동적 다이어그램
    • 소프트웨어 설계 절차 및 유형
      • 협약에 의한 설계
        • 클래스에 대한 여러 가정을 공유하도록 명세
        • 조건 종류
          • 선행 조건: 컴포넌트 오퍼레이션 사용 전에 참이 되어야 할 조건
          • 결과 조건: 사용 후 만족되어야 할 결과 조건
          • 불변 조건: 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건 (변하지 않는것)
  • 소프트웨어 아키텍쳐
    • 개념
      • 소프트웨어의 골격이 되는 기본 구조
      • 시스템의 컴포넌트 사이의 관계를 정의한 구조
    • 특징
      • 간략성
      • 추상화
      • 가시성
      • 관점 모형
      • 의사소통수단
    • 소프트웨어 아키텍처 4 + 1 뷰
      • 개념
        • 고객의 요구사항을 정리해 놓은 시나리오를 4개의 관점에서 바라보는 소프트웨어적인 접근 방법
      • View 종류
        • 유스케이스 뷰: 사용자 관점
        • 논리 뷰: 기능적인 요구사항
        • 프로세스 뷰: 전체적으로 돌아가는 것
        • 구현 뷰: 개발 환경
        • 배치 뷰: 물리적인 노드에 어떻게 배치되는 지
    • 소프트웨어 아키텍처 패턴
      • 개념
        • 소프트웨어 아키텍처의 공통적인 발생 문제에 ****대한 재사용 가능한 해결책
      • 소프트웨어 아키텍처 패턴 종류
        • 계층화 패턴(Layered Pattern)
          • N-티어 아키텍처 패턴으로 부른다.
          • 하위 모듈을 그룹으로 나눌 수 있는 구조화된 프로그램에서 사용
        • 클라이언트-서버 패턴(Client-Server Pattern)
          • 다수의 클라이언트와 하나의 서버로 구성
          • 서버는 클라이언트에게 서비스를 제공하며 데이터를 관리하는 역할
        • 마스터 슬레이브 패턴(Master-Slave Patter)
          • 마스터 컴포넌트가 동등한 구조의 슬레이브 컴포넌트로 작업을 분산하고, 슬레이브가 결과값을 반환하면 최종 결과값을 계산하는 구조
          • 클라이언트-서버 패턴과의 차이
            • 마스터 슬레이브 패턴의 슬레이브는 결과값을 전달받기만 하고 아무런 영향을 끼칠 수 없다.
        • 파이프-필터 패턴(Pipe-Filter Pattern)
          • 컨베이어 벨트 시스템과 유사
          • 서브시스템이 입력데이터를 받아 처리하고, 결과를 다음 서브시스템으로 넘겨주는 과정을 반복
        • 브로커 패턴(Broker Pattern)
          • 분리된 컴포넌트로 구성된 분산 시스템에서 사용되는 패턴
          • 분산 처리기가 중간에 있다.
        • 피어 투 피어 패턴(Peer to Peer pattern)
          • 피어라 부르는 각 컴포넌트 간에 서비스를 주고받는 패턴
        • 이벤트-버스 패턴(Event-Bus Pattern)
          • 이벤트 버스를 통해 특정 채널로 메시지를 발행
          • 리스너가 구독한 채널에 소스가 서비스를 제공하면 채널이 리스너에게 서비스를 제공
        • 모델-뷰-컨트롤러 패턴(MVC Pattern, Model-View-Controller Pattern)
          • 3개의 각 컴포넌트는 각자의 역할을 갖고 사용자에게 서비스를 제공
          • 모델: DB 역할
          • 뷰: 화면단
          • 컨트롤러: 로직
        • 블랙보드 패턴(Blackboard Pattern)
          • 명확히 정의된 해결 전략이 알려지지 않은 문제에 대해서 유용한 패턴
        • 인터프리터 패턴(Interpreter Pattern)
          • 특정 언어로 작성된 프로그램을 해석하는 컴포넌트를 설계할 때 사용되는 패턴

UML (Unified Modeling Language)

  • UML
    • 개념
      • 프로그램 설계를 표현하기 위해 사용하는 표기법
      • 시스템 개발 과정에서 이해관계자 사이에 의사소통을 원활하게 하기 위한 표준화된 모델링 언어
      • 프로그램 언어가 아닌 기호와 도식을 이용하여 표현하는 방법을 정의한다.
    • UML의 특징
      • 가시화 언어: 소프트웨어의 개념 모델을 시각적인 그래핑 형태로 작성
      • 구축 언어: 명세화된 설계모델은 다양한 언어의 소스코드로 변환하여 구축 가능
      • 명세화 언어: 분석, 설계, 구현 단계의 각 과정에서 필요한 모델을 명세화할 수 있는 언어
      • 문서화 언어: 일련의 과정을 문서로 남겨 계속 유지 보수한다.
    • UML의 구성요소
      • 사물(Thing)
        • 구조사물: 시스템의 개념적, 물리적 요소
        • 행동사물: 시간과 공간에 따른 요소들의 행위
        • 그룹사물: 요소들을 그룹으로 묶은 것
        • 주해사물: 부가적 설명이나 제약조건
      • 관계
        • 일반화관계:
          • 상속관계
          • 빈 화살표
          • ㅡ▷
        • 연관관계
          • 2개 이상 사물이 서로 완전히 밀접한 관계
          • 속찬 화살표
          • ㅡ ➤
        • 의존성관계
          • 아주 잠시 의존되는 관계
          • 그래서 연관관계 표기에서 실선이 점선으로 변경
        • 집합관계
          • 집합-집약 관계
            • 한 객체가 다른 객체를 소유하는 has a 관계
            • 전체 객체의 라이프타임과 부분 객체의 라이프타임은 독립적
            • 전체 객체가 사라진다 해도 부분 객체는 사라지지 않음
          • 집합-합성 관계
            • 부분 객체가 전체 객체에 속하는 관계
            • 전체 객체가 없어지면 부분 객체도 없어짐
        • 실체화관계
          • 인터페이스를 구현받아 추상 메서드를 오버라이딩하는 것을 의미
          • 한 객체가 다른 객체에게 오퍼레이션을 수행하도록 지정
                    • -▷
      • 다이어그램
        • 구조 다이어그램
          • 클래스 다이어그램
            • 클래스의 속성과 클래스 사이의 관계를 표현
            • 자기만의 속성과 일정한 행동으로 구성
            • 접근 제한자 표기법
              • Private(-): 해당 클래스 내에서만 접근 가능
              • Protected(#): 상속, 동일 패키지 내에서만 접근 가능
              • Public(+): 어디서든 접근 가능
              • Default(): 아무것도 안붙임
          • 객체 다이어그램
            • 클래스에 속한 객체(인스턴스)를 특정 시점의 객체와 객체 사이의 관계로 표현
          • 컴포넌트 다이어그램
            • 컴포넌트 사이 관계나 인터페이스를 표현
          • 배치 다이어그램
            • 결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치를 표현
          • 복합체 다이어그램
            • 클래스나 컴포넌트가 복합구조를 가질 시 그 내부 구조를 표현
          • 패키지 다이어그램
            • 유스케이스나 클래스 등 모델 요소들을 그룹화한 패키지들의 관계 표현
        • 행위 다이어그램
          • 유스케이스 다이어그램
            • 사용자의 요구를 분석하여 기능 모델링 작업에 사용됨
            • 시스템과 사용자의 상호작용을 다이어그램으로 표현
            • 구성요소
              • 시스템: 만들고자 하는 프로그램 명칭
              • 액터: 시스템의 외부에 있고 시스템과 상호작용을 하는 사람 또는 시스템
              • 유스케이스: 사용자 입장에서 바라본 시스템의 기능
                • ex) 글 작성, 로그인 등
              • 관계: 액터와 유스케이스 사이의 의미있는 관계
            • 유스케이스 다이어그램 관계
              • 연관관계
                • 유스케이스와 액터 간의 상호작용이 있음을 표현
                • 유스케이스와 액터를 실선으로 표현
              • 포함관계
                • 유스케이스를 수행할 때 반드시 실행되어야 하는 경우
                • <<include>>
              • 확장관계
                • 유스케이스를 수행할 때 특정 조건에 따라 확장 기능 유스케이스를 수행하는 경우
                • <<extend>>
              • 일반화 관계
                • 유사한 유스케이스 또는 액터를 모아 추상화한 유스케이스
          • 시퀀스 다이어그램
            • 특정 행동이 어떠한 순서로 어떤 객체와 상호작용하는지 표현
            • 객체 간의 상호작용 메시지 시퀀스를 시간의 흐름에 따라 나타낸 다이어그램
          • 커뮤니케이션 다이어그램
            • 동작에 참여한 객체들이 주고받는 메시지와 객체 간 연관까지 표현
          • 상태 다이어그램
            • 객체가 자신이 속한 클래스의 상태 변화 및 다른 객체 간 상호작용에 따라 상태 변화 표현
          • 활동 다이어그램
            • 시스템이 어떤 기능을 수행하는지에 따라 객체 처리 로직이나 조건에 따라 처리 흐름을 순서에 따라 표현
          • 타이밍 다이어그램
            • 객체 상태 변화와 시간 제약을 명시적으로 표현

화면 설계

  • UI(User Interface)
    • UI 개념
      • 컴퓨터, 웹 사이트, 시스템 등의 정보기기와 사용자가 서로 상호작용을 할 수 있도록 연결해주는 매개체
    • UX 개념
      • 사용자가 컴퓨터, 웹 사이트, 시스템 등 정보기기의 UI를 직/간접적으로 이용하여 경험한 모든 것
    • UI 유형
      • CLI(Command Line Interface)
        • 컴퓨터 자판을 이용해 명령을 입력하는 시스템
      • GUI(Graphical User Interface)
        • 사용자의 입력이나 출력을 마우스 등을 통한 시스템
      • NUI(Natural User Interface)
        • 특별한 하드웨어 없이 인간의 자연스러운 움직임을 인식하여 정보를 제공 (터치, 음성)
      • OUI(Organic User Interface)
        • 현실의 모든 것이 입출력 장치가 됨
        • 미래기술
      • AUI(Auditory User Interface)
        • 보다 나은 사용자 경험을 제공하기 위해 만들어진 임베디드 사운드 (음성)
  • UI 설계
    • UI 요구사항 구분
      • 기능적 요구사항
        • 시스템이 제공해야 하는 기능에 대한 요구사항
      • 비기능적 요구사항
        • 사용성, 효율성, 신뢰성, 유지 보수성, 재사용성 등 품질에 관한 요구사항
    • UI 설계 원칙
      • 직관성: 누구나 쉽게 이해할 수 있어야 함
      • 유연성: 사용자의 요구사항을 최대한 수용해야한다.
      • 학습성: 누구나 배우기 쉬워야 함
      • 유효성: 사용자의 목적을 정확하게 달성해야 함
    • UI 설계 도구
      • 와이어 프레임: 선으로 틀을 잡는다는 뜻
      • 스토리보드: 개발 후 완성된 콘텐츠의 최종 결과를 예상할 수 있는 기초 문서
      • 프로토타입: 실제 서비스와 흡사한 모형을 만드는 작업
      • 목업: 와이어프레임보다 좀 더 실제 화면과 유사하게 만든 정적인 형태의 모형
      • 유스케이스: 사용자 측면의 요구사항, 다이어그램 형태로 제작
  • 감성 공학
    • 개념
      • 인간의 심상을 구체적인 물리적 설계 요소로 번역하여 이를 실현하는 기술
    • 구분
      • 감각적 감성: 제품에 관해 사용자가 느끼는 감성
      • 기능적 감성: 제품의 성능과 사용 시 편리함에 대한 것
      • 문화적 감성: 개인이 속한 사회, 문화에 관련
    • 접근 방법
      • 1류 접근 방법: 인간의 어휘를 이용해 제품에 대한 이미지 조사 후 디자인 요소와 연계
      • 2류 접근 방법: 문화적 감성을 일부 반영한 개념
      • 3류 접근 방법: 특정 시제품을 사용해 감각 척도를 계측하고 정량화된 값을 환산
  • 화면 레이아웃 구성
    • 레이아웃의 개념
      • 특정 공간에 여러 구성 요소를 보기 좋게 효과적으로 배치하는 작업
    • HTML5
      • World Wide Web을 통해 제공되는 정보를 나타낼 목적으로 사용되는 마크업 언어
    • CSS
      • Cascading Style Sheet로 HTML과 함께 웹을 구성하는 기본 프로그래밍 요소
    • JavaScript
      • 이벤트 중심의 프로그래밍 언어