본문 바로가기

정보처리기사

[정보처리기사] 실기 노트 - 서버 프로그램 구현 1

  1. 소프트웨어 아키텍처
    1. 개발 환경 구축
      1. 개발 환경 구축 개요
        1. 개발 환경 구축: 응용 소프트웨어 개발을 위해 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축하는 것을 의미
      2. 하드웨어 환경
        1. 하드웨어 환경: 사용자와의 인터페이스 역할을 하는 클라이언트 (Client) 그리고 클라이언트와 통신하여 서비스를 제공하는 서버 (Server) 로 구성
        2. 클라이언트의 종류: 개인용 컴퓨터 (PC), 스마트 폰 등
        3. 서버의 종류: 웹 서버 (Web Server), 웹 어플리케이션 서버 (WAS: Web Application Server), 데이터베이스 서버 (DB Server), 파일 서버 (File Server)
      3. 소프트웨어 환경
        1. 소프트웨어 환경: 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성
        2. 시스템 소프트웨어의 종류: 운영체제 (OS), 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS 등
        3. 개발 소프트웨어의 종류: 요구사항 관리 도구, 설계/모델링 도구, 구현 도구, 빌드 도구, 테스트 도구, 형상 관리 도구
      4. 웹 서버 (Web Server) 의 기능: HTTP/HTTPS 지원, 통신 기록 (Communitation Log), 정적 파일 관리 (Managing Static Files), 대역폭 제한 (Bandwidth Throttling), 가상 호스팅 (Virtual Hosting), 인증 (Authentication)
      5. 개발 언어의 선정 기준: 적정성, 효율성, 이식성, 친밀성, 범용성
    2. 소프트웨어 아키텍처 개요
      1. 소프트웨어 아키텍처의 개념
        1. 소프트웨어 아키텍처 (Software Architecture): 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
      2. 소프트웨어 아키텍처 설계의 기본 원리
        1. 모듈화 (Modularity)
        2. 추상화 (Abstraction)
        3. 단계적 분해 (Stepwise Refinement)
        4. 정보 은닉 (Information Hiding)
      3. 소프트웨어 개발의 설계 단계: 상위 단계, 하위 단계
      4. 소프트웨어 아키텍처의 품질 속성
        1. 소프트웨어 아키텍처의 품질 속성: 소프트웨어 아키텍처가 이해 관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계 되었는지 확인하기 위해 품질 평가 요소들을 구체화 시켜 놓은 것
        2. 품질 평가 요소의 종류
          1. 시스템 측면: 성능, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성, 테스트 용이성, 배치성, 안정성 등
          2. 비지니스 측면: 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표시장, 공개 일정, 기존 시스템과의 통합 등
          3. 아키텍처 측면: 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성, 적응성, 일치성, 대체성 등
      5. 소프트웨어 아키텍처의 설계 과정
        1. 설계 목표 설정
        2. 시스템 타입 결정
        3. 아키텍처 패턴 적용
        4. 서브시스템 구체화
        5. 검토
      6. 협약 (Contract)에 의한 설계
        1. 협약에 의한 설계: 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
        2. 명세에 포함될 조건: 선행 조건 (Precondition), 결과 조건 (Postcondition), 불변 조건 (Invariant)
  2. 아키텍처 패턴
    1. 아키텍처 패턴의 개념
      1. 아키텍처 패턴 (Architecture Patterns): 아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제를 의미
      2. 아키텍처 스타일 (Architecture Style) 또는 표준 아키텍처 (Standard Architecture)라고도 함
    2. 아키텍처 패턴의 종류
      1. 레이어 패턴 (Layers pattern)
      2. 클라이언트-서버 패턴 (Client-Server Pattern)
      3. 파이프-필터 패턴 (Pipe-Filter Pattern)
      4. 모델-뷰-컨트롤러 패턴 (Model-View-Controller Pattern)
      5. 기타 패턴
        1. 마스터-슬레이브 패턴 (Master-Slave Pattern)
        2. 브로커 패턴 (Broker Pattern)
        3. 피어-투-피어 패턴 (Peer-To-Peer Pattern)
        4. 이벤트-버스 패턴 (Event-Bus Pattern)
        5. 블랙보드 패턴 (Blackboard Pattern)
        6. 인터프리터 패턴 (Interpreter Pattern)
  3. 객체지향 개념
    1. 객체지향 (Object-Oriented) 의 개념
      1. 객체지향: 소프트웨어의 각 요소들을 객체 (Object)로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법
    2. 객체지향의 구성 요소
      1. 객체 (Object): 데이터와 데이터를 처리하는 함수를 묶어 놓은 하나의 소프트웨어 모듈
      2. 클래스 (Class): 공통된 속성과 연산을 갖는 객체의 집합으로, 객체의 일반적인 타입 (Type) 을 의미함
      3. 메시지 (Message): 객체들 간의 상호작용을 하는데 사용되는 수단으로, 객체에게 어떤 행위를 하도록 지시하는 명령 또는 요구사항
    3. 객체지향의 특성
      1. 캡슐화 (Encapsulation): 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
      2. 상속 (Inheritance): 이미 정의된 상위 클래스 (부모 틀래스)의 모든 속성과 연산을 하위 클래스가 물려받는 것
      3. 다형성 (Polymorphism): 메시지에 의해 객체 (클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
      4. 연관성 (Relationship): 두 개 이상의 객체 (클래스) 들이 상호 참조하는 관계를 의미
  4. 객체지향 분석 및 설계
    1. 객체지향 분석 (OOA: Object Oriented Analysis)의 개념
      1. 객체지향 분석: 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스 (객체), 이와 연관된 속성과 연산, 그들 간의 관계 등을 정의하여 모델링하는 작업
    2. 객체지향 분석의 방법론
      1. Rumbaugh (럼바우) 방법
      2. Booch (부치) 방법
      3. Jacobson 방법
      4. Coad 와 Yourdon 방법
      5. Wirfs-Brock 방법
    3. 럼바우 (Rumbaugh)의 분석 기법
      1. 럼바우의 분석 기법: 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
      2. 객체 모델링 기법 (OMT, Object-Modeling Technique)이라고도 함
      3. 분석 활동은 '객체 모델링 (Object Modeling) -> 동적 모델링 (Dynamic Modeling) -> 기능 모델링 (Functional Modeling)' 순으로 이루어짐
    4. 객체지향 설계 원칙
      1. 객체지향 설계 원칙은 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
      2. SRP, OCP, LSP, ISP, DIP 의 다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고도 함
      3. 객체지향 설계 원칙의 종류
        1. 단일 책임 원칙 (SRP, Single Responsibility Principle)
        2. 개방-폐홰 원칙 (OCP, Open-Closed Principle)
        3. 리스코프 치환 원칙 (LSP, Liskov Substitution Principle)
        4. 인터페이스 분리 원칙 (ISP, Interface Segregation Principle)
        5. 의존 역전 원칙 (DIP, Dependency Inversion Principle)