포스트

정보처리기사 실기 / i - 요구사항 확인


실기 시험 준비

수제비 2023 참조





C1. 소프트웨어 개발 방법론


i. 소프트웨어 개발 방법론

A. 소프트웨어 생명주기 모델

1. 소프트웨어 생명 주기 모델 개념

  • 개념 : 소프트웨어 생명주기는 시스템의 요구분석부터 유지보수까지 전 공정을 체계화한 절차


2. 소프트웨어 생명주기 모델 프로세스

  • 요구사항 분석 : 개발할 소프트웨어의 기능과 제약 조건, 목표 등을 소프트웨어 사용자와 함께 명확히 정의하는 단계
    • 기능 요구사항 / 비기능 요구사항
  • 설계 : 시스템 명세 단계에서 정의한 기능을 실제 수행할 수 있도록 수행방법을 논리적으로 결정하는 단계
    • 시스템 구조 설계 / 프로그램 설계 / UI 설계
  • 구현 : 설계 단계에서 논리적으로 결정한 문제 해결 방법을 특정 프로그래밍 언어를 사용하여 실제 프로그램을 작성하는 단계
    • 인터페이스 개발 / 자료 구조 개발 / 오류 처리
  • 테스트 : 시스템이 정해진 요구를 만족하는지, 예상과 실제 결과가 어떤 차이를 보이는지 검사하고 평가하는 단계
    • 단위 / 통합 / 시스템 / 인수 테스트
  • 유지보수 : 시스템이 인수되고 설치된 후 일어나는 모든 행동
    • 예방 / 완전 / 교정 / 적응 유지보수


3. 소프트웨어 생명주기 모델 종류

  • 폭포수 모델 (WaterFall) : 개발 시 각 단계를 확실히 마무리 후 다음 단계로 넘어감
    • 가장 오래됨 / 선형 / 고전적 / 명확 / 요구사항 변경 어려움
    • 절차 : 검토 → 계획 → 분석 → 설계 → 구현 → 테스트 → 유지보수
  • 프로토타이핑 모델 : 주요 기능을 프로토타입으로 구현, 피드백을 반영하여 개발
    • 프로토타입 / 분석 용이 / 검증 가능 / 프로토타입 폐기 시 비용 증가
    • 발주자, 개발자 모두에게 공동의 참조 모델을 제공 / 구현 단계의 구현 골격
  • 나선형 모델 : 시스템 개발 시 위험을 최소화하기 위해 점진적으로 개발
    • 위험분석 / 반복개발 / 위험성 감소 / 유연 대처 / 관리 어려움
    • 절차 : 계획 및 정의 → 위험 분석 → 개발 → 고객 평가
  • 반복적 모델 : 병렬적으로 개발 후 통합, 혹은 반복적으로 개발
    • 증분방식 병행 개발 / 일정 단축 / 관리 비용 증가



B. 소프트웨어 개발 방법론

1. 소프트웨어 개발 방법론 개념

  • 소프트웨어 개발 전 과정에 지속적으로 적용할 수 있는 방법, 절차, 기법
  • 소프트웨어를 하나의 생명체로 간주, 시작부터 끝까지 전 과정을 형상화한 방법론


2. 소프트웨어 개발 방법론 종류

  • 구조적 방법론 : 전체 시스템을 기능에 따라 나누어 개발, 이를 통합하는 분할과 정복 접근 방식의 방법론
    • 프로세스 중심의 하향식
    • 나씨-슈나이더만 차트 사용
  • 정보공학 방법론 : 정보시스템 개발에 필요한 관리 절차와 작업 기법을 체계화한 방법론
    • 개발 주기 활용, 대형 프로젝트 수행
  • 객체 지향 방법론 : 객체 단위로 시스템을 분석 및 설계하는 방법론
    • 객체, 클래스, 메시지 사용
  • 컴포넌트 기반 방법론 : 컴포넌트를 조립해서 하나의 새로운 프로그램을 작성하는 방법론
    • 개발 기간 단축 / 기능 추가 용이 / 재사용 가능
  • 애자일 방법론 : 절차보다는 사람이 중심, 변화에 유연하고 신속하게 적응하면서 효율적으로 개발하는 방법론
    • 개발 과정의 어려움 극복
  • 제품 계열 방법론 : 특정 제품에 적용하고 싶은 공통된 기능을 정의하여 개발하는 방법론
    • 영역 공학(영역 분석, 영역 설계, 자산 구현)과 응용 공학(요구분석, 제품 설계, 제품 구현)으로 구분


3. 애자일(Agile)

  • 절차보다는 사람이 중심, 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템 개발
  • 짧고 신속, 폭포수 모형에 대비되는 방법론
  • 기존 개발 방법론의 한계 극복을 위해 등장
  • 유동적 / 팀 중심 / 반복 주기 / 문서보다 코드
  • 유형
    • XP (eXtreme Programming)
      • 의사소통 개선, 즉각 피드백
      • 1 ~ 3주 반복 개발주기
      • 가치
        • 용기, 단순성, 의사소통, 피드백, 존중
      • 기본원리
        • 페어 프로그래밍, 공동 코드 소유, 지속적인 통합, 계획 세우기, 작은 릴리즈, 메타포어(공통적인 이름 체계, 시스템 서술서를 통해 의사소통), 간단한 디자인, 테스트 기반 개발, 리팩토링, 40시간 작업, 고객 상주, 코드 표준
    • 린 (Lean)
      • 도요타의 린 시스템 품질기법을 적용
      • 낭비 요소 제거
      • 원칙
        • 낭비제거, 품질 내재화, 지식 창출, 늦은 확정, 빠른 인도, 사람 존중, 전체 최적화
    • 스크럼
      • 매일 정해진 시간, 장소에서 짧은 시간의 개발을 하는 팀을 위한 프로젝트 관리 중심 방법론
      • 2 ~ 4주 단위 스프린트
      • 주요 개념
        • 백로그, 스프린트, 스크럼 미팅(매일), 스크럼 마스터, 스프린트 회고, 번 다운 차트(남아있는 백로그 대비 시간을 그래픽적으로 표현한 차트 / 수직축 : 백로그, 수평축 : 시간)



C. 객체 지향 분석 방법론

1. 객체 지향 개념

  • 객체 지향은 실세계의 개체를 속성과 메서드가 결합한 형태의 객체로 표현하는 기법


2. 객체 지향 구성 요소

  • 클래스 : 특정 객체 내에 있는 변수와 메서드를 정의하는 틀
  • 객체 : 물리적, 추상적으로 자신과 다른 것을 식별 가능한 대상
  • 메서드 : 클래스로부터 생성된 객체를 사용하는 방법
  • 메시지 : 객체 간 상호 작용을 하기 위한 수단
  • 인스턴스 : 객체 지향 기법에서 클래스를 통해 만든 실제의 실형 객체
  • 속성 : 한 클래스 내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의


3. 객체 지향 기법

  • 캡슐화
    • 서로 연관된 데이터와 함수를 묶어 외부와 경계를 만들고 필요한 인터페이스만을 밖으로 드러내는 기법
    • 결합도 낮음 / 재사용 용이
    • 인터페이스 단순화
    • 정보 은닉
  • 상속성
    • 상위 클래스의 속성과 메서드를 하위 클래스에서 재정의 없이 물려받아 사용하는 기법
  • 다형성
    • 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
    • 상속받은 여러 개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용될 수 있는 성질
    • 오버로딩(같은 이름 / 다른 매개변수) / 오버라이딩(상속 관계에서 상위의 메서드를 하위에서 재정의)
  • 추상화
    • 공통 성질을 추출하여 추상 클래스를 설정하는 기법
    • 과정 추상화 / 자료 추상화 / 제어 추상화
  • 정보 은닉
    • 코드 내부 데이터와 메서드를 숨기고 공개 인터페이스를 통해 접근이 가능하도록 하는 코드 보안 기술
    • 필요하지 않은 정보는 접근할 수 없도록 설계
    • 요구사항 등 변화에 따른 수정 용이
  • 관계성
    • 두 개 이상의 엔티티 형에서 데이터를 참조하는 관계를 나타내는 기법
    • 연관화
      • is-member-of 관계
    • 집단화
      • is-part-of 관계 / part-whole 관계
    • 분류화
      • is-instance-of 관계
    • 일반화
      • is-a 관계
      • 클래스들 간의 개념적인 포함 관계
    • 특수화
      • is-a 관계
      • 상위 클래스의 특성들을 상속 받으면서 하위 클래스가 수정하고 고유특성을 갖는 관계


4. 객체 지향 설계 원칙 (SOLID)

  • 단일 책임 원칙 (SRP)
    • 하나의 클래스는 하나의 책임만
  • 개방 폐쇄 원칙 (OCP)
    • 확장에는 열려있고, 변경에는 닫혀있어야함
  • 리스코프의 치환 원칙 (LSP)
    • (상속 관계에서) 하위 클래스는 상위 클래스로 교체할 수 있어야함
  • 인터페이스 분리 원칙 (ISP)
    • 사용하지 않는 인터페이스는 구현하지 말아야함
  • 의존 역전 원칙 (DIP)
    • 사용 관계 변경 없이 추상을 매개로 메시지를 주고 받음으로 관계 느슨하게


5. 객체 지향 분석의 개념

  • 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스, 속성과 연산, 관계를 정의하여 모델링하는 기법


6. 객체 지향 분석 방법론 종류

  • OOSE (Object Oriented Software Engineering)
    • 야콥슨
    • 유스케이스에 의한 접근 방법으로 유스케이스를 모든 모델의 근간으로 활용
    • 분석-설계-구현 단계
    • 기능적 요구사항 중심 시스템
  • OMT (Object Modeling Technology)
    • 럼바우
    • 그래픽 표기법을 이용하여 소프트웨어 구성요소를 모델링하는 방법론
    • 분석 절차 : 객체 모델링 → 동적 모델링 → 기능 모델링 순
      • 객체 모델링
        • 정보 모델링
        • 시스템에서 요구하는 객체를 찾고 객체들 간의 관계를 정의하여 ER 다이어그램 제작
        • 객체 다이어그램 활용
      • 동적 모델링
        • 시간의 흐름에 따라 객체들 사이의 제어 흐름, 동작 순서 등의 동적인 행위를 표현
        • 상태 다이어그램 활용
      • 기능 모델링
        • 프로세스들의 자료 흐름을 중심으로 처리 과정 표현
        • 자료 흐름도 (DFD) 활용
  • OOD (Object Oriented Design)
    • 부치
    • 설계 문서화를 강조, 다이어그램 중심으로 개발하는 방법론
    • 분석과 설계의 분리가 불가
  • 코드-요든
    • E-R 다이어그램 사용, 객체의 행위 모델링
  • 워프-브록
    • 분석과 설계 간 구분 없음


7. 기능 모델링 주요 기법

  • 데이터 흐름도 (DFD)
    • 자료 흐름 그래프 또는 버블 차트
    • 데이터가 각 프로세스를 따라 흐르면서 변환되는 모습을 나타낸 그림
    • 구조적 분석 기법에서 활용
    • 데이터 흐름에 중심을 둠
    • 제어 흐름은 중요치 않음
    • 시간 흐름 명확치 않음
  • 자료 사전 (DD)
    • 자료 요소, 자료 요소들의 집합, 자료의 흐름, 자료 저장소의 의미와 관계, 값, 범위, 단위들을 구체적으로 명시하는 사전
    • 조직 속 다른 이에게 특정한 자료 용어가 무엇을 의미하는 지 알려주기 위함




ii. 프로젝트 관리

A. 프로젝트 관리

1. 프로젝트 관리의 개념

  • 프로젝트 관리는 주어진 기간 내에 최소의 비용으로 사용자를 만족시키는 시스템을 개발하기 위한 전반적인 활동
  • 소프트웨어 생명 주기의 전과정에 걸쳐서 진행


2. 프로젝트 관리 대상

  • 계획 관리 : 프로젝트 계획, 비용 산정, 일정 계획, 조직 계획에 대한 관리
  • 품질 관리 : 품질 통제 및 품질 보증
  • 범위 관리 : 이해관계자가 요청한 모든 요구사항이 프로젝트 범위에 포함되었는지 보장하고, 필요한 작업만 수행될 수 있도록 관리


3. 프로젝트 관리 3대 요소

  • 사람 : 기본이 되는 인적 자원
  • 문제 : 사용자 입장에서 문제 분석 인식
  • 프로세스 : 서프트웨어 개발에 필요한 전체적인 작업 계획 및 구조



B. 비용산정 모형

1. 비용산정 모형 개념

  • 소프트웨어 규모파악을 통한 투입자원, 소요시간을 파악 후 실행 가능한 계획을 수립하기 위해 비용을 산정하는 방식


2. 비용산정 모형 분류

  • 하향식 산정방법
    • 전문가에게 의뢰 혹은 조정자를 통해 산정
    • 델파이 기법 : 전문가의 지식을 통한 문제해결 및 미래예측 산정
  • 상향식 산정방법
    • 세부적인 요구사항과 기능에 따라 필요한 비용 계산
    • 코드 라인 수(LoC) / Man Month / COCOMO / 푸트남 / 기능점수(FP)


3. 비용산정 모형 종류

  • LoC
    • 원시 코드 라인 수의 낙관치, 중간치, 비관치를 측정 후 예측치를 구해 비용 산정
    • (낙관치 + (4 * 중간치) + 비관치) / 6
  • Man Month
    • 한 사람이 1개월 동안 할 수 있는 일의 양을 기준으로 산정
    • Man Month = LoC / 프로그래머 월간 생산성
    • 프로젝트 기간 = Man Month / 프로젝트 인력
  • COCOMO
    • 보헴이 제안
    • 프로그램 규모에 따라 비용 산정
    • 개발비 견적에 널리 통용
    • 조직형 (Organic Mode)
      • 중/소규모 소프트웨어, 5만 라인 이하
      • 반 분리형 (Semi-Detached Mode)
      • 중규모 소프트웨어, 30만 라인 이하
    • 임베디드형 (Embedded Mode)
      • 대규모 소프트웨어, 30만 라인 이상
  • 푸트남(Putnam)
    • 소프트웨어 개발주기의 단계별로 요구할 인력의 분포를 가정
    • 생명주기 예측 모형
  • 기능점수(Function Point)
    • 요구 기능을 증가시키는 인자별로 가중치 부여, 요인별 가중치 합산 후 총 기능 점수 계산
    • 기능점수 = 총 기능점수 * [0.65 (0.1 * 총 영향도)]



C. 일정관리 모델

1. 일정관리 모델 개념

  • 프로젝트가 일정 기한 내에 적절하게 완료될 수 있도록 관리하는 모델


2. 일정관리 모델 종류

  • 주 공정법(CPM)
    • 여러 작업의 수행 순서가 얽혀 있는 프로젝트의 일정을 계산하는 기법
    • 프로젝트 시작에서 종료까지 가장 긴 시간이 걸리는 경로
  • PERT
    • 일의 순서를 계획적으로 정리하기 위한 수렴 기법
    • 비관치, 중간치, 낙관치 3점 추정방식을 통해 일정 관리
  • 중요 연쇄 프로젝트 관리(CCPM)
    • 주 공정 연쇄법
    • 자원제약사항을 고려하여 일정 작성



D. 위험 관리

1. 위험 관리 개념

  • 내재된 위험 요소 인식, 영향 분석 후 관리하는 활동


2. 위험의 종류

  • 알려진 위험 : 프로젝트 계획서, 기술적 환경, 정보 등에 의해 발견
  • 예측 가능한 위험 : 과거 경험으로부터 예측
  • 예측 불가능한 위험 : 사전 예측이 매우 어려움


3. 위험 대응 전략

  • 회피 : 발생 가능성을 원천적으로 제거
  • 전가 : 위험에 대한 책임을 제3자에게 전가
  • 완화 : 위험 발생 가능성 감소, 혹은 영향력 감소
  • 수용 : 위험을 그대로 받아들임





C2. 현행 시스템 분석


i. 현행 시스템 파악

A. 현행 시스템 파악 개념

  • 현행 시스템이 어떤 하위 시스템으로 구성되어 있고, 제공 기능 및 연계 정보는 무엇이며 어떤 기술 요소를 사용하는지를 파악하는 활동



B. 현행 시스템 파악 절차

  • 1단계 : 구성/기능/인터페이스 파악
  • 2단계 : 아키텍처/소프트웨어 구성 파악
  • 3단계 : 하드웨어/네트워크 구성 파악



C. 소프트웨어 아키텍처

1. 소프트웨어 아키텍처 개념

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


2. 소프트웨어 아키텍처 프레임워크

  • 소프트웨어 집약적인 시스템에서 아키텍처가 표현해야 하는 내용 및 이들 간의 관계를 제공하는 기술 표준
  • 아키텍처 명세서
    • 아키텍처를 기록하기 위한 산출물들
    • 이해관계자들의 시스템에 대한 관심을 관점에 맞춰 뷰로 표현
    • 개별 뷰 / 개괄 문서 / 인터페이스 명세
  • 이해관계자
    • 시스템 개발에 관련된 모든 사람과 조직
  • 관심사
    • 시스템에 대해 이해관계자들의 서로 다른 의견과 목표
  • 관점
    • 개별 뷰를 개발할 때 도대가 되는 패턴이나 양식
    • 서로 관련 있는 관심사들의 집합이라는 관점에서 전체 시스템 표현
  • 근거
    • 아키텍처 결정 근거
  • 목표
    • 환경 안에서 한 명 이상의 이해관계자들이 의도하는 시스템의 목적, 사용, 운영 방법
  • 환경
    • 시스템에 영향을 주는 요인으로 개발, 운영 등의 외부 요인 등으로 시스템에 영향을 주는 요인
  • 시스템
    • 각 애플리케이션, 서브 시스템, 시스템의 집합, 제품군 등의 구현체


3. 소프트웨어 아키텍처 4+1 뷰

  • 고객의 요구사항을 정리해 놓은 시나리오를 4개의 관점에서 바라보는 소프트웨어적인 접근 방법
  • 4개의 분리된 구조로 제시, 서로 충돌되지 않는지, 요구사항 충족시키는지를 증명하기 위해 유스케이스 사용
  • 유스케이스 뷰
    • 유스케이스 또는 아키텍처를 도출하고 설계하며 다른 뷰를 검증하는 데 사용
    • 사용자, 설계자, 개발자, 테스트 관점
  • 논리 뷰
    • 시스템의 기능적인 요구사항이 어떻게 제공되는지 설명해주는 뷰
    • 설계자, 개발자 관점
  • 프로세스 뷰
    • 시스템의 비기능적인 속성으로서 자원의 효율적인 사용, 병행 실행, 비동기, 이벤트 처리 등을 표현한 뷰
    • 개발자, 시스템 통합자 관점
  • 구현 뷰
    • 개발 환경 안에서 정적인 소프트웨어 모듈의 구성을 보여주는 뷰
  • 배포 뷰
    • 컴포넌트가 물리적인 아키텍처에 어떻게 배치되는가를 매핑해서 보여주는 뷰


4. 소프트웨어 아키텍처 패턴

  • 소프트웨어를 설계할 때 참조할 수 있는 전형적인 해결 방식
  • 일반적으로 발생하는 문제점들에 대한 일반화되고 재사용 가능한 솔루션
  • 계층화 패턴
    • 시스템을 계층으로 구분하여 구성하는 패턴
    • 각 하위 모듈들은 특정한 수준의 추상화를 제공, 각 계층은 다음 상위 계층에 서비스 제공
  • 클라이언트-서버 패턴
    • 하나의 서버와 다수의 클라이언트로 구성된 패턴
    • 사용자가 클라이언트를 통해 서버에 요청, 서버는 클라이언트에 응답
  • 파이프-필터 패턴
    • 데이터 스트림을 생성하고 처리하는 시스템에서 사용 가능한 패턴
    • 서브 시스템이 입력 데이터를 받아 처리, 결과를 다음 서브 시스템으로 넘겨주는 과정 반복
  • 브로커 패턴
    • 분리된 컴포넌트들로 이루어진 분산 시스템에서 사용, 컴포넌트들은 원격 서비스 실행을 통해 상호작용이 가능
    • 브로커 컴포넌트는 컴포넌트 간의 통신을 조정하는 역할 수행
  • MVC 패턴
    • 대화형 애플리케이션을 모델, 뷰, 컨트롤러 3개의 서브 시스템으로 구조화하는 패턴
    • 각 부분이 별도의 컴포넌트로 분리되어 있어서 서로 영향을 받지 않고 개발 가능
    • 모델 : 핵심 기능과 데이터 보관
    • : 사용자에게 정보 표시
    • 컨트롤러 : 사용자로부터 요청을 입력받아 처리


5. 소프트웨어 아키텍처 비용 평가 모델

  • 아키텍처 접근법이 품질 속성에 미치는 영향을 판단 후, 적합성 평가
  • SAAM : 변경 용이성과 기능성에 집중, 평가 용이
  • ATAM : 아키텍처 품질 속성을 만족시키는지 판단 및 품질 속성들의 이해 상충관계까지 평가
  • CBAM : ATAM 바탕의 시스템 아키텍처 분석 중심으로 경제적 의사결정에 대한 요구를 충족하는 비용 평가 모델
  • ADR : 소프트웨어 아키텍처 구성요소 간 응집도를 평가
  • ARID : 전체 아키텍처가 아닌 특정 부분에 대한 품질요소에 집중하는 비용 평가 모델



D. 디자인 패턴

1. 디자인 패턴 개념

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


2. 디자인 패턴 구성요소

  • 패턴 이름 : 부를 때 사용하는 이름과 디자인 패턴의 유형
  • 문제 및 배경 : 사용되는 분야 또는 배경, 해결하는 문제를 의미
  • 솔루션 : 요소들, 관계, 협동 과정
  • 사례 : 간단한 적용 사례
  • 결과 : 사용하면 얻게 되는 이점이나 영향
  • 샘플 코드 : 적용된 원시 코드


3. 디자인 패턴 유형

  • 목적
    • 생성 : 객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행하는 패턴
    • 구조 : 더 큰 구조 형성을 목적으로 클래스나 객체의 조합을 다루는 패턴
    • 행위 : 클래스나 객체들이 상호 작용하는 방법과 역할 분담을 다루는 패턴
  • 범위
    • 클래스 : 클래스 간 관련성, 상속 관계를 다루는 패턴 / 컴파일 타임
    • 객체 : 객체 간 관련성을 다루는 패턴 / 런타임


4. 디자인 패턴 종류

  • 생성 패턴
    • Builder
      • 복잡한 인스턴스를 조립하여 만드는 구조
      • 복합 객체를 생성할 때 객체를 생성하는 방법과 구현하는 방법을 분리
      • 동일한 생성 절차에서 서로 다른 표현 결과 도출
    • Prototype
      • 일반적인 원형 제작 후 그것을 복사하여 필요한 부분만 수정해서 사용
      • 생성할 객체의 원형을 제공하는 인스턴스에서 생성할 객체들의 타입이 결정되도록 설정
      • 객체를 생성할 때 갖추어야 할 기본 형태가 있을 때 사용
    • Factory Method
      • 상위 클래스에서 객체를 생성하는 인터페이스를 정의 후 하위 클래스에서 인스턴스를 생성하도록 하는 방식
      • 상위 클래스에서는 인스턴스를 만드는 방법만 결정, 하위 클래스에서 데이터 생성을 책임지고 조작하는 함수들을 오버라이딩
    • Abstract Factory
      • 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공
      • 이 패턴을 통해 생성된 클래스에서는 사용자에게 인터페이스를 제공, 구체적인 구현은 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개 이상의 객체에서 처리




ii. 개발 기술 환경 정의

A. 개발 기술 환경 현행 시스템 분석

1. 운영체제 현행 시스템 분석

  • 운영체제는 컴퓨터 시스템이 제공하는 모든 하드웨어, 소프트웨어를 사용할 수 있도록 해주고 컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스를 담당하는 프로그램
  • 운영체제 현행 시스템 분석
    • 품질 측면
      • 신뢰도 : 장기간 시스템 웅영 시 운영체제의 장애 발생 가능성
      • 성능 : 대규모 및 대량 파일 작업(배치 작업) 처리
    • 지원 측면
      • 기술 지원 : 공급사들의 안정적인 기술 지원
      • 주변 기기 : 설치 가능한 하드웨어
      • 구축 비용 : 지원 가능한 하드웨어 비용
  • 운영체제 종류 및 특징
    • PC
      • Windows : Microsoft : 중/소규모 서버, 일반 PC 등 유지, 관리 비용 장점
      • UNIX : IBM, HP, SUN : 대용량 처리, 안정성 높은 엔터프라이즈급 서버
      • Linux : Linus Torvalds : 중/대규모 서버 대상, 높은 보안성 제공
    • 모바일
      • 안드로이드 : Google : 리눅스 운영체제 위에서 구동, 휴대용 장치를 위한 운영체제와 미들웨어, 표준 응용 프로그램 등을 포함
      • IOS : Apple : 스마트폰, 태블릿 PC의 높은 보안성과 고성능 제공


2. 네트워크 현행 시스템 분석

  • 네트워크는 컴퓨터 장치들의 노드 간 연결을 사용하여 서로 데이터를 교환할 수 있도록 하는 기술
  • OSI 7계층
계층설명프로토콜전송단위
응용 계층(Application)사용자와 네트워크 간 응용서비스 연결, 데이터 생성HTTP / FTPDATA
표현 계층(Presentation)데이터 형식 설정과 부호교환, 암/복호화JPEG / MPEGDATA
세션 계층(Session)연결 접속 및 동기제어SSH / TLSDATA
전송 계층(Transport)신뢰성 있는 통신 보장TCP / UDPSegment
네트워크 계층(Network)단말기 간 데이터 전송을 위한 최적화된 경로 제공IP / ICMPPacket
데이터 링크 계층(Data Link)인접 시스템 간 데이터 전송, 전송 오류 제어이더넷Frame
물리 계층(Physical)0과 1의 비트 정보를 회선에 보내기 위한 전기적 신호 변환RS-232CBit


3. DBMS 현행 시스템 분석

  • DBMS는 데이터베이스를 만들고, 저장 및 관리할 수 있는 기능을 제공하는 응용 프로그램
  • DBMS 기능
    • 중복 제어 : 동일한 데이터가 여러 위치에 중복으로 저장되는 현상 방지
    • 접근 통제 : 권한에 따라 데이터에 대한 접근 제어
    • 인터페이스 제공 : 사용자에게 SQL 및 CLI, GUI 등 다양한 인터페이스 제공
    • 관계표현 : 서로 다른 데이터 간의 다양한 관계를 표현할 수 있는 기능 제공
    • 샤딩/파티셔닝 : 구조 최적화를 위해 작은 단위로 나누는 기능 제공
    • 무결성 제약 조건 : 무결성에 관한 제약 조건을 정의/검사하는 기능 제공
    • 백업 및 회복 : 데이터베이스 장애 발생 시 데이터의 보존 기능 제공
  • DBMS 현행 시스템 분석 시 고려 사항
    • 성능 측면
      • 가용성 : 장기간 시스템을 운영할 때 장애 발생 가능성 / 백업 및 복구 편의
      • 성능 : 대규모 데이터 처리 성능 / 다양한 튜닝 옵션
      • 상호 호환성 : 설치 가능한 운영체제 종류
    • 지원 측면
      • 기술 지원 : 공급 업체들의 안정적인 기술 지원 여부
      • 구축 비용 : 라이선스 정책 및 비용


4. 미들웨어의 현행 시스템 분석

  • 분산 컴퓨팅 환경에서 응용 프로그램과 프로그램이 운영되는 환경 간에 원만한 통신이 이루어질 수 있도록 제어해주는 소프트웨어
  • 대표 미들웨어 WAS
  • 웹 애플리케이션 서버(WAS)는 서버계층에서 애플리케이션이 동작할 수 있는 환경을 제공, 안정적인 처리 관리, 타기종 시스템과 연동 지원
  • 미들웨어 현행 시스템 분석 시 고려 사항
    • 성능 측면
      • 가용성 : 장기간 시스템을 운영할 때 장애 발생 가능성 / WAS 버그 등 개선 패치 설치 위한 재기동 기능 지원
      • 성능 : 대규모 데이터 처리 성능 / 가비지 컬렉션의 다양한 옵션
    • 지원 측면
      • 기술 지원 : 안정적인 기술 지원 여부 / 오픈 소스 여부
      • 구축 비용 : 라이선스 정책 및 비용 / 총 소유 비용


5. 오픈 소스 사용 시 고려 사항

  • 라이선스의 종류, 사용자 수, 기술의 지속 가능성
  • 자유 배포, 소스 코드 공개, 파생작업 허용, 소스 코드 일관성 확보, 차별금지, 라이선스 배포, 포괄적 허용





C3. 요구사항 확인


i. 요구사항

A. 요구사항 개념

1. 요구공학의 개념

  • 사용자의 요구가 반영된 시스템을 개발하기 위해 사용자 요구사항에 대한 도출, 분석, 명세, 확인 및 검증하는 구조화된 활동


2. 요구공학의 목적

  • 이해관계자 사이에 효과적인 의사소통 수단을 제공, 시스템 개발의 요구사항에 대한 공통된 이해 설정
  • 요구사항 누락 방지 및 이해 오류로 인한 불필요한 비용을 절감, 요구사항 변경 추척
  • 초기 요구사항 관리로 개발 비용과 시간을 절약, 효과적인 의사소통 수단 제공


3. 요구사항의 분류

구분기능적 요구사항비기능적 요구사항
개념시스템이 제공하는 기능, 서비스에 대한 요구사항시스템이 수행하는 기능 이외의 사항, 시스템 구축에 대한 제약사항에 관한 요구 사항
도출방법 특정 입력에 대해 시스템이 어떻게 반응해야 하는지에 대한 기술품질 속성에 관련하여 시스템이 갖춰야할 사항에 관한 기술
특징기능성, 완전성, 일관성신뢰성, 사용성, 효율성, 유지보수성, 이식성, 보안성, 품질관련 요구사항, 제약사항



B. 요구공학 프로세스

1. 요구사항 개발 단계 구성

  • 요구사항 도출
    • 소프트웨어가 해결해야 할 문제를 이해, 고객으로부터 제시되는 추상적 요구에 대해 정보 식별, 수집, 구체적으로 표현
  • 요구사항 분석
    • 도출된 요구사항에 대해 충돌, 중복, 누락 등의 분석을 통해 완전성과 일관성을 확보
  • 요구사항 명세
    • 체계적으로 검토, 평가, 승인될 수 있는 문서를 작성하는 단계
  • 요구사항 확인 및 검증
    • 요구사항을 이해했는지 확인하고, 요구사항 문서가 적합고 이해 가능하며, 일관성 있고, 완전한지 검증하는 단계


2. 요구사항 개발 단계 상세

  • 요구사항 도출 단계 주요 기법
    • 인터뷰 : 이해관계자와 직접 대화
    • 브레인스토밍 : 회의 참석자들의 아이디어를 비판 없이 수용
    • 델파이 기법 : 전문가의 경험적 지식을 통해 문제 해결 및 미래예측
    • 롤 플레잉 : 현실 장면 설정, 여러 사람이 각자 연기 후 분석 수집
    • 워크숍 : 단기간의 집중적인 노력을 통해 다양한 전문 정보를 획득, 공유
    • 설문 조사
  • 요구사항 분석 단계 절차
    • 요구사항 분류 : 기능인지 비기능인지 확인
    • 개념 모델링 생성 및 분석 : 요구사항을 더 쉽게 이해할 수 있도록 단순화, 개념적으로 표현
    • 요구사항 할당 : 요구사항을 만족시키기 위한 아키텍처 구성요소 식별
    • 요구사항 협상 : 두 명의 이해관계자가 서로 상충되는 내용 요구 시 적절한 지점에서 합의
    • 정형 분석 : 형식적으로 정의된 의미를 지닌 언어로 요구사항 표현
  • 요구사항 분석 단계 기법
    • 자료 흐름 지향 분석 : 데이터 흐름도(DFD) 및 자료 사전(DD)으로 부터 소프트웨어 구조를 유도
    • 객체 지향 분석 : 시스템의 기능과 데이터를 함꼐 분석, UML로 표준화
  • 요구사항 분석 기술
    • 청취 기술 : 이해관계자로부터 의견을 드는 기술
    • 인터뷰와 질문 기술 : 이해관계자를 만나 정보를 수집
    • 분석 기술 : 추출된 요구사항에 대해 충돌, 중복, 누락 등의 분석을 통해 완전성과 일관성 확보
    • 중재 기술 : 이해관계자들의 상반된 요구에 대한 중재기술
    • 관찰 기술 : 사용자가 작업하는 것을 관찰하면서 사용자가 언급하지 않은 의미를 탐지
    • 작성 기술 : 문서 작성 기술
    • 조직 기술 : 수집된 방대한 정보를 일관성 있는 정보로 구조화
    • 모델 작성 기술 : 수집한 자료를 바탕으로 모델로 작성하는 기술
  • 요구사항 명세 단계 주요 기법
    • 비정형 명세 기법 : 사용자의 요구를 표현할 때 자연어를 기반으로 서술
    • 정형 명세 기법 : 사용자의 요구를 표현할 때 수학적인 원리와 표기법으로 서술
  • 요구사학 명세 원리 및 검증 항목
    • 명확성 : 각각의 요구사항 명세 내용은 하나의 의미만 부여해야 함
    • 완전성 : 기능, 성능, 속성, 인터페이스, 설계 제약 등에 대한 모든 시스템 요구사항 포함
    • 검증 가능성 : 요구사항의 충족 여부와 달성 정도에 대한 확인
    • 일관성 : 요구사항의 내용 간 상호 모순 없어야 함
    • 수정 용이성 : 요구사항 변경 시 쉽게 수정 가능해야함
    • 추적 가능성 : 각 요구사항 근거에 대한 추적과 상호참조가 가능해야 함
    • 개발 후 이용성 : 개발 후 운영 및 유지보수에 효과적인 이용이 가능해야 함
  • 요구사항 확인 및 검증 절차
    • 요구사항 목록 확인 : 요구사항 목록에서 업무 기능에 대한 요구사항 반영 여부 확인
    • 요구사항 정의서 작성 여부 확인 : 요구사항 목록 중 수용인 경우, 요구사항 정의서가 작성되었는지 확인
    • 비기능적 요구사항의 확인 : 시스템 특성, 품질, 제약사항 등 비기능적 요구사항이 명확하게 도출되었는지 검토
    • 타 시스템 연계 및 인터페이스 요구사항 확인 : 타 시스템 또는 하위 시스템 등과의 모든 인터페이스 요구사항이 정의되어 있는지 확인
  • 요구사항 확인 및 검증 단계의 주요 기법
    • 요구사항 검토 : 여러 검토자들이 에러, 불명확성, 차이 등 검토
    • 정형 기술 검토 활용
      • 동료 검토 : 2~3명이 진행하는 리뷰의 형태
      • 워크 스루 : 오류를 조기에 검출하는 데 목적이 있는 검토 방법, 사전검토 후 짧은 시간 회의
      • 인스펙션 : 소프트웨어 요구, 설계, 원시 코드 등의 저작자 외의 다른 전문가 또는 팀이 검사
    • 프로토타이핑 활용 : 개발할 시스템에 대한 주요 기능이나 일부분을 개발 후 사용자나 고객이 경험할 수 있게하여 요구사항 확인
    • 모델 검증 : 분석단계에서 개발된 모델의 품질 검증 필요
    • 테스트 케이스 및 테스트를 통한 확인 : 중요 속성은 최종 제품이 요구사항을 만족시키는지 확인 가능해야 함
    • CASE 도구 활용 검증 : 구조화된 요구사항 명세서에 대해서는 자동화된 일관성 분석을 제공하는 CASE 도구 활용 가능
    • 베이스라인을 통한 검증 : 요구사항 변경을 체계적으로 추적하고 통제하는 시점인 베이스라인을 통한 지속적 검증
    • 요구사항 추적표 : 요구사항 정의서를 기준으로 개발 단계별 최종 산출물 반영, 변경 확인 가능 문서
  • 상세 정형 기술 검토 기법
    • 관리 리뷰 : 프로젝트 진행 상황에 대한 전반적인 검토를 바탕으로 통제 및 의사결정 지원
    • 기술 리뷰 : 정의된 계획 및 명세를 준수하고 있는지에 대한 검토
    • 인스펙션 : 동료 검토
    • 워크 스루 : 짧은 회의 진행
    • 감사 : 소프트웨어 제품의 제공자, 소비자, 제3기관 수행


3. 요구사항 관리 단계

  • 요구사항 관리 단계 절차
    • 요구사항 협상 : 가용 자원과 수용 가능한 위험 수준에서 구현 가능한 기능을 협상
    • 요구사항 기준선 설정 : 공식적으로 검토되고 합의된 요구사항 명세서를 통해 기준선을 설정
    • 요구사항 변경관리 : 요구사항 기준선을 기반으로 모든 변경을 공식 통제
    • 요구사항 확인 및 검증 : 구축된 시스템이 이해관계자가 기대한 요구사항에 부합하는지 확인




ii. 요구사항의 시스템화 타당성 분석

A. 요구사항의 기술적 타당성 검토

  • 성능 및 용량 산정의 적정성 : 목표 시스템의 용량이 산정되면, 적정성 여부 판단
  • 시스템 간 상호 운용성 : 요구사항 중 타 시스템과의 연동을 요구하는 경우 가능한지 판단
  • IT 시장 성숙도 및 트렌드 부합성 : 향후 사용되지 않을 가능성이 높은 시스템들은 향후 유지보수가 어려울 가능성
  • 기술적 위험 분석 : 요구사항을 만족시키기 위해 적용한 기술의 복잡성 등에 대하여 영향도 파악



B. 요구사항의 기술적 타당성 분석 프로세스

  • 타당성 분석 결과 기록 : 요구사항 목록에 타당성 분석을 위한 속성을 추가하고 타당성 분석 결과 기록
  • 타당성 분석 결과의 이해관계자 검증 : 요구사항의 시스템화 타당성 분석 결과를 요구사항 관련 이해관계자에게 배포하여 사전 검토 요청
  • 타당성 분석 결과 확인 및 배포/공유 : 확정된 타당성 분석 결과를 이해관계자에게 배포하여 공유





이제 서적의 1과목인데 내용이 너무 많다.

단어-의미로 최대한 정리, 줄여서 작성하려 했는데도 이 정도다.

일단 이번 포스트의 목적 자체는 “정독”을 하는 느낌으로 외우다시피 하기 위해 타이핑을 한 것이라 “요약본”과는 확연히 다른데, 추후 12과목을 모두 정독, 타이핑하고 나면 정말 중요한 부분만 짚어서 요약할 예정이다.

손꾸락과 손목이 부러질 것 같지만 정처기 실기는 이렇게까지 해야하나? 싶을 정도로 해야한다고들 하니 최대한 타이핑해보자

그리고 추후 기출 문제를 풀면서 어떤 식으로 출제되는 지 확인 후 요약을 진행할 생각이지만

내가 추려낸 가장 중요한 것들은

개발 방법론 종류
객체 지향 분석 방법론 (*럼바우 - 객동기)
LOC & Man Month 계산식
객체지향 설계 (SOLID) 원칙
아키텍처 패턴
*디자인 패턴
운영체제 종류
요구사항 분류

이렇게다.

여기서 특히 디자인 패턴은 무조건 한 두 문제는 출제될 것 같다.

그리고 60점만 넘으면 된다. 최대한 전략을 잘 짜보자.

이 블로그는 저작권자의 CC BY 4.0 라이센스를 따릅니다.