Ⅰ. 요구사항 확인

Chapter 02 소프트웨어 개발방법론

(1) 현행 시스템 파악

  • 구성/기능/인터페이스 파악 → 아키텍처 및 소프트웨어 구성 파악 → 하드웨어 및 네트워크 구성 파악

    • 구성 현황 파악 : 주요 업무를 처리하는 기간 업무와 지원 업무로 구분하여 파악

    • 기능 현황 파악 : 단위 업무 시스템이 현재 제공하고 있는 기능을 파악

    • 인터페이스 파악 : 다른 시스템과 주고받는 데이터의 종류, 형식, 프로토콜, 연계유형, 주기를 파악

    • 아키텍쳐 파악 : 계층별 기술 스택을 최상위 수준에서 파악

    • 소프트웨어 파악 : 소프트웨어의 제품명, 용도, 라이선스 적용 방식 및 라이선스 수 파악

    • 하드웨어 파악 : 서버의 위치 및 사양, 수량, 이중화 구현 여부 등을 파악

    • 네트워크 파악 : 어떤 네트워크 장비를 사용하여 구성되어있는지 파악

(2) 소프트웨어 아키텍처

  • 소프트웨어 아키텍처 프레임워크 : 소프트웨어 집약적인 시스템에서 아키텍처가 표현해야 하는 내용 및 이들간의 관계를 제공하는 아키텍처 기술 표준

    • 아키텍처 명세서 : 이해관계자들의 관점에 맞추어 작성하며 개별 뷰, 뷰 개괄 문서, 인터페이스 명세 등이 있음
    • 이해관계자 : 시스템 개발과 관련도니 모든 사람과 조직
    • 관심사 : 사용자, 유지보수자, 개발자 입장으로 나뉨
    • 관점 : 개별 뷰를 개발할 때 토대가 되는 패턴이나 양식
    • 뷰 : 서로 관련 있는 관심사들의 집합이라는 관점에서 전체 시스템을 표현
    • 근거 : 아키텍처 결정 근거(회의나 보고 결과)
    • 목표 : 환경 안에서 한 명 이상의 이해관계자들이 의도하는 시스템의 목적, 사용, 운영 방법
    • 환경 : 시스템에 영향을 주는 요인
    • 시스템 : 각 앱의 서브 시스템, 시스템 집합, 제품군 등의 구현체
  • 소프트웨어 아키텍처 4+1 뷰

    • 고객의 요구사항을 정리해 놓은 시나리오를 4개의 관점에서 바라보는 소프트웨어적인 접근방법으로 주로 유스케이스를 사용한다
    • 논리 뷰, 구현 뷰, 프로세스 뷰, 배포 뷰(4) + 유스케이스 뷰(1) 로 구성된다
    • 계측화 패턴, 클라이언트-서버 패턴, 파이프-필터 패턴, 브로커 패턴, 모델-뷰-컨트롤러 등으로 나뉨
  • 소프트웨어 아키텍처 비용 평가 모델

    • 아키텍처 접근법이 품질 속성에 미치는 영향을 판단, 아키텍처의 적합성을 평가하는 모델로 SAAM, ATAM, CBAM, ADR, ARID 등의 모델이 있다
  • 디자인 패턴

    • 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴

    • 개발의 효율성, 유지보수성, 운용성이 높아지며 프로그램의 최적화에 도움이 된다

    • 패턴의 이름, 문제 및 배경, 솔루션, 사례, 결과, 샘플 코드 등으로 구성되어 있다

    • 디자인 패턴의 유형은 목적(생성, 구조, 행위) 과 범위(클래스, 객체)로 구성된다

    • 디자인 패턴의 종류
      생성 패턴

      • Builder : 복잡한 인스턴스를 조립하여 만드는 구조로 객체를 생성하는 방법(과정)과 객체를 구현(표현)하는 방법을 분리
      • Prototype : 처음부터 원형을 만들어놓고 복사 후 필요한 부분만 수정하여 사용하는 패턴
      • Factory Method : 상위 클래스의 인터페이스를 하위 클래스에서 인스턴스를 생성하도록 하는 방식
      • Abstract Factory : 제공된 API를 사용하여 생성된 클래스를 Concrete Product 클래스에서 구체적으로 구현하는 패턴
      • Singleton : 한 클래스에 한 객체만 존재하도록 제한하는 패턴

      구조 패턴

      • Bridge : 기능 계층과 구현 계층을 연계하고 구현부에서 추상화된 부분을 독립적으로 확장할 수 있는 디자인 패턴
      • Decorator : 기존에 구현된 클래스에 필요한 기능을 추가해 나가는 설계 패턴으로 유연하게 확장 가능한 패턴
      • Facade : 단순한 인터페이스를 사용해 결합도를 낮추고 시스템 구조 파악을 쉽게 하는 패턴
      • Flyweight : 클래스의 경량화를 목적으로 하는 디자인 패턴
      • Proxy : 대리 객체를 사용해 메모리 용량을 절약하고 정보 은닉의 역할도 수행하는 디자인 패턴
      • Composite : 객체들을 트리 구조로 구성하여 복합 객체와 단일 객체를 모두 동일하게 다루도록 하는 패턴
      • Adapter : 상속을 이용하는 클래스 패턴과 위임을 이용하는 인스턴스 패턴의 두 가지 형태로 사용되는 디자인 패턴

      행위 패턴

      • Mediator : 객체지향 설계에서 중재자를 두고 통신의 빈도수를 줄여 객체 지향의 목표를 달성하게 해 주는 디자인 패턴
      • Interpreter : 언어의 구문을 나누어 해석을 맡는 클래스를 각각 작성하여 여러 형태의 언어 구문을 해석할 수 있게 만드는 디자인 패턴
      • Iterator : 내부 구조를 노출하지 않고 복잡한 객체의 원소를 순차적으로 순회 접근 가능하게 해주는 행위 패턴
      • Template Method : 상위 클래스에선 추상 메서드로 기능의 골격을, 하위 클래스에선 세부 처리를 구체화 하는 방식의 디자인 패턴
      • Observer : 객체의 상태 변화에 따라 다른 객체의 상태도 연동되는 일대다 의존 디자인 패턴
      • State : 객체 상태를 캡슐화하여 클래스화하여 참조케 하는 방식의 디자인 패턴
      • Visitor : 각 클래스 데이터 구조에서 처리기능을 분리, 별도의 클래스를 만들어놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴
      • Command : 재사용성이 높은 클래스를 설계하는 패턴으로 하나의 추상 클래스에 메서드를 만들어 각 명령이 들어오면 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행되는 디자인 패턴
      • Strategy : 알고리즘을 하나의 클래스로 캡슐화하고 필요할 때서로 교환해서 사용할 수 있게 하는 패턴
      • Memento : 객체의 정보를 저장할 필요가 있을 때 적용하는 디자인 패턴으로 ‘작업취소(Undo)’를 요청 할 수 있다
      • Chain of Responsibility : 한 요청을 2개 이상의 객체에서 처리하도록 하는 디자인 패턴

(3) 현행 시스템 분석서 작성 및 검토

  • 현행 시스템 관련 자료 수집 → 수집 자료의 분석 → 분석한 결과를 기반으로 산출물 작성 → 산출물에 대한 검토 수행

(4) 개발 기술 환경 정의

  • 운영체제 시스템 분석
  • 네트워크 시스템 분석
    • OSI 7계층(응용, 표현, 세션, 전송, 네트워크, 데이터 링크, 물리 계층)
  • DBMS 시스템 분석
  • 미들웨어 시스템 분석
  • 오픈소스 사용 시 고려 사항
    • 라이선의 종류, 사용자 수, 기술의 지속 가능성 등을 고려

기출문제

  1. 다음 보기가 설명하는 패턴을 쓰시오
1
2
3
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에 연락이 가고
자동으로 내용이 갱신되는 방법으로 일대다의 의존성을 가지며
상호작용하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인을 사용해야 한다.

Observer Pattern

  1. Linux 운영체제 위에서 구동하며 휴대폰 전화를 비롯한 휴대용 장치를 위한 운영체제와 미들웨어, 사용자 인터페이스 그리고 표준 응용 프로그램(웹 브라우저, 이메일 클라이언트, 단문 세시지 서비스, MMS) 등을 포함하고 있는 소프트웨어 스택이자 리눅스 모바일 운영체제로 개발자들이 자바와 코틀린 언어로 응용 프로그램을 작성할 수 있게 했고, 컴파일된 바이트 코드를 구동할 수 있는 런타임 라이브러리를 제공하는 운영체제는 무엇인지 쓰시오.

안드로이드

  1. 목적에 다른 디자인 패턴의 유형에는 생성, 구조, ( )이/가 있다. 괄호 안에 알맞는 유형을 쓰시오.

행위

예상문제

  1. 소프트웨어 아키텍처에 대해서 서술하시오.

여러 가지 소프트웨어 구성요소와 그 구성요소가 가진 특성 중에서 외부에 드러나는 특성, 그리고 구성요소 간의 관계를 표현하는 시스템의 구조나 구조체

  1. 4+1 뷰 중 다음 설명에 해당하는 뷰가 무엇인지 쓰시오.
1
2
3
- 시스템의 비기능적인 속성으로서 자원의 효율적인 사용, 병행 실행, 비동기,
이벤트 처리 등을 표현한 뷰
- 개발자, 시스템 통합자 관점

프로세스 뷰

  1. 시스템을 계층으로 구분하여 구성하는 패턴으로 서로 마주 보는 두 개의 계층 사이에서만 상호작용이 이루어지는 패턴은 무엇인가?

계층화 패턴

  1. MVC 패턴에 대해 서술하시오.

대화형 애플리케이션을 모델, 뷰, 컨트롤러 3개의 서브 시스템으로 구조화하는 패턴

  1. 디자인 패턴에 대해서 서술하시오.

소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계방법을 정리한 패턴

  1. 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하고, 한 클래스에 한 객체만 존재하도록 제한하는 디자인 패턴은 무엇인가?

싱글톤 패턴

  1. 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식으로, 상위 클래스에서는 인스턴스를 만드는 방법만 결정하고, 하위 클래스에서 그 데이터의 생성을 책임지고 조작하는 함수들을 오버로딩하여 인터페이스와 실제 객체를 생성하는 클래스를 분리할 수 있는 특성을 갖는 디자인 패턴은 무엇인가?

팩토리 메서드 패턴

  1. 알고리즘 군을 정의하고 같은 알고리즘을 각각 하나의 클래스로 캡슐화한 다음, 필요할 때 서로 교환해서 사용할 수 있게 하는 패턴으로, 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 디자인 패턴은 무엇인가?

전략 패턴

  1. 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴으로 일반적으로 상위 클래스(추상 클래스)에는 추상 메서드를 통해 기능의 골격을 제공하고, 하위 클래스(구체 클래스) 메서드에는 세부 처리를 구체화하는 방식으로 사용하며 코드 양을 줄이고 유지보수를 용이하게 만드는 특징을 갖는 디자인 패턴은 무엇인가?

템플릿 패턴