정보처리기사 실기 - 서버 프로그램 구현

둡둡·2023년 4월 9일

정보처리기사

목록 보기
4/12

개발 환경 구축

  • 하드웨어 환경
    • 서버 종류
      • 웹 서버(Web Server) : 저용량 정적 파일 제공
      • 웹 애플리케이션 서버(WAS, Web Application Server) : 동적 서비스, 서버 간 인터페이스 역할
      • 데이터베이스 서버(Database Server) : 데이터베이스와 DBMS
      • 파일 서버(File Server) : 서비스 제공 목적 등의 파일 저장
  • 웹 서버의 기능
    • HTTP/HTTPS 지원 : 브라우저 요청/응답 프로토콜
    • 통신 기록
    • 정적 파일 관리
    • 대역폭 제한: 트래픽 포화 방지
    • 가상 호스팅
    • 인증(Authentication)

소프트웨어 아키텍처

  • 소프트웨어를 구성하는 구성 요소 간의 관계, 특성 등을 표현하는 시스템 구조
  • 소프트웨어 아키텍쳐 4+1뷰
    • 유스케이스: 아키텍처를 도출하고 설계, 다른 뷰 검증, 사용자/설계자/개발자/테스트 관점
    • 논리: 기능적 요구사항, 설계자/개발자 관점
    • 프로세스: 비기능적 요구사항, 효율적인 사용/비동기 처리 등, 개발자 관점
    • 구현: 소프트웨어 모듈 구성, 컴포넌트 구조와 의존성
    • 배포: 컴포넌트가 어떻게 배치되는지
  • 모듈화(Modularity)
    • 시스템 기능을 모듈 단위로 분리하여 관리함
    • 모듈 크기가 작으면 관리 비용이 증가, 크면 개발 비용이 증가
  • 추상화(Abstraction)
    • 전체적이고 포괄적인 개념을 먼저 설계 후 구체화함
  • 단계적 분해(Stepwise Refinement)
    • 상위 개념으로부터 하위 개념으로 구체화시키는 분할 기법(포괄 -> 구체화)
  • 정보 은닉(Information Hiding)
    • 모듈 내부에 포함된 정보를 감추어 다른 모듈이 접근하거나 변경하지 못하도록 함
  • 상위 설계(아키텍처 설계)
    • 시스템의 전체적인 구조 (ex. 구조, 데이터베이스, 인터페이스 등)
  • 하위 설계(모듈 설계)
    • 시스템 내부 구조 및 행위 (ex. 컴포넌트, 자료구조, 알고리즘 등)

소프트웨어 아키텍처 패턴

  • 아키텍처를 설계할 때 참조할 수 있는 표준 모델 또는 샘플
  • 주요 아키텍처 패턴: 레이어, 클라이언트-서버, 파이프-필터, 모델-뷰-컨트롤러 패턴
  • 레이어 패턴(Layers Pattern)
    • 시스템을 계층으로 구분하여 구성하는 패턴
    • 상위 계층은 서비스 제공자, 하위 계층은 클라이언트
  • 클라이언트-서버 패턴(Client-Server Pattern)
    • 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴
    • 서버에 요청하면 클라이언트가 응답을 받아 제공하는 방식
  • 파이프-필터 패턴(Pipe-Filter Pattern)
    • 데이터 전송 절차를 각 필터로 캡슐화하고 파이프를 통해 전송하는 패턴
    • 데이터 변환, 버퍼링, 동기화 등, 대표적으로 UNIX Shell
  • MVC 패턴(Model-View-Controller Pattern)
    • 사용자의 요청을 받은 컨트롤러가 모델을 통해 핵심 기능과 데이터를 관리하고, 뷰로 출력하는 패턴

객체 지향(Object-Oriented)

  • 객체 지향의 구성 요소
    • 객체(Object)
    • 클래스(Class)
    • 메시지(Message)
  • 객체 지향의 특징
    • 캡슐화(Encapsulation)
      • 인터페이스를 제외한 세부 내용을 은닉함, 객체 간 결합도 낮아짐
    • 상속(Inheritance)
    • 다형성(Polymorphism)
    • 연관성(Relationship)
      • 연관화(Association), 집단화(Aggregation), 분류화(Classification), 일반화(Generalization), 상세화(Specialization)
  • 객체 지향 분석의 방법론
    • 럼바우(Rumbaugh) 모델링
      • 그래픽 표기법을 이용하여 모델링하는 기법, 객체 모델링 기법(OMT)
      • 객체 모델링: 정보 모델링, 객체들 간의 관계, 속성 등을 규정하여 객체 다이어그램으로 표시
      • 동적 모델링: 상태 다이어그램을 통해 시간의 흐름에 따른 제어 흐름, 상호 작용 등의 동적 행위 표현
      • 기능 모델링: 자료 흐름도(DFD)를 통해 프로세스 간 자료 흐름을 중심으로 처리 과정 표시
  • 객체 지향 설계 원칙(SOLID)
    • 단일 책임 원칙(SRP)
    • 개방 폐쇄 원칙(OCP) : 기존 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 함
    • 리스코프 치환 원칙(LSP) : 자식 클래스는 부모 클래스의 기능을 수행할 수 있어야 함
    • 인터페이스 분리 원칙(ISP) : 사용하지 않는 인터페이스와 의존하거나 영향을 받지 않도록 해야 함
    • 의존 역전 원칙(DIP) : 실제 사용 관계는 바뀌지 않으며, 추상을 매개로 추상성이 높은 클래스와 의존 관계를 맺으면서 관계를 느슨하게 만듦

모듈

  • 모듈 독립성
    • 독립성을 높이기 위해 결합도는 낮게, 응집도는 높게, 모듈 크기는 작게 만들어야 함
  • 결합도(Coupling)
    • 모듈 간 상호 의존하는 정도, 연관 관계
    • 결합도가 낮을수록 품질이 높고, 높을수록 품질이 낮음
    • 내용 > 공통 > 외부 > 제어 > 스탬프 > 자료 결합도 순으로 결합도 낮음
    • 내용(Content) : 다른 모듈 내부의 변수나 기능을 직접 사용
    • 공통(Common) : 모듈 밖에 선언된 전역 변수를 참조하고 공유
    • 외부(External): 외부에서 도입된 데이터 포맷, 통신 프로토콜 등을 공유
    • 제어(Control): 제어 신호나 제어 요소를 전달하고, 처리 명령을 내리는 권리 전도 현상
    • 스탬프(Stamp): 모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달
    • 자료(Data): 모듈 간 인터페이스가 자료 요소로만 구성됨
  • 응집도(Cohesion)
    • 모듈 내부의 요소들이 서로 연관된 정도
    • 응집도가 높을수록 품질이 높고, 낮을수록 품질이 낮다
    • 우연 > 논리 > 시간 > 절차 > 통신 > 순차 > 기능 순으로 응집도 높음
    • 우연적(Coincidental): 각 구성요소가 연관이 없음
    • 논리적(Logical): 유사한 성격을 갖거나 특정 형태로 분류되는 요소들이 한 모듈에서 처리됨
    • 시간적(Temporal): 특정 시간에 처리
    • 절차적(Procedural): 구성 요소들이 순차적으로 수행
    • 통신/교환적(Communication): 동일한 입출력
    • 순차적(Sequential): 모듈 내에서 나온 출력값을 다른 활동이 사용할 경우
    • 기능적(Functional): 단일한 목적을 위해 수행되는 경우
  • 팬인(Fan-In) / 팬아웃(Fan-Out)
    • 팬인: 제어하는 모듈의 수
    • 팬아웃: 제어되는 모듈의 수
    • 팬인이 높을수록 재사용 측면에서 잘 설계됨
    • 단일 장애점(SPOF, 구성 요소 중 하나가 고장나면 전체 시스템이 중단됨)이 발생할 수 있음

단위 모듈(Unit Module)

  • 한 가지 기능을 수행하는 모듈, 단위 기능
  • IPC(Inter-Process Communication)
    • 모듈 간 통신 방식을 구현하기 위한 프로그래밍 인터페이스 집합
    • 대표 메소드 5가지
      • Shared Memory
      • Socket
      • Semaphores : 공유 자원 접근 제어
      • Pipes & Named Pipes
      • Message Queueing
  • 단위 모듈 테스트(Unit Test)
    • 단위 기능으로 구현된 모듈이 정확히 수행하는지 검증
  • 테스트 케이스(Test Case)
    • 구현된 소프트웨어가 사용자의 요구사항을 준수했는지 확인하기 위한 테스트 항목 명세서
    • 구성 요소(ISO/IEC/IEEE 29119-3 표준)
      • 식별자(Identifier)
      • 테스트 항목(Test Item) : 테스트 대상
      • 입력 명세(Input Specification) : 입력 데이터, 테스트 조건
      • 출력 명세(Output Specification) : 예상 결과
      • 환경 설정(Environment Needs)
      • 특수 절차 요구(Special Procedure Requirement)
      • 의존성 기술(Inter-case Dependencies)
  • 공통 모듈
    • 공통으로 여러 사용할 수 있는 모듈
    • 공통 모듈 명세 기법의 종류
      • 정확성
      • 명확성
      • 완전성
      • 일관성
      • 추적성
  • 재사용(Reuse)
    • 개발된 기능을 새로운 시스템이나 기능 개발에 재사용하도록 최적화함
  • 효과적인 모듈 설계 방안
    • 결합도는 줄이고, 응집도는 높여서 모듈의 독립성과 재사용 높임
    • 복잡도와 중복성을 줄이고, 일관성을 유지시킴

디자인 패턴(Design Pattern)

  • 모듈 간 관계 및 인터페이스 설계 시 참조할 수 있는 예제
  • GOF의 디자인 패턴
    • 생성 패턴(BAFPS)
      • Builder
        • 복잡한 인스턴스를 조립하여 복합 객체 생성
        • 생성 과정과 표현 방법 분리
      • Abstract Factory
        • 서로 연관되거나 의존적인 객체들을 조합하여 인터페이스를 통해 그룹 및 추상적으로 표현
      • Factory Method
        • 상위 클래스에서 인터페이스 정의, 하위 클래스에서 인스턴스 생성/오버로딩
        • 가상 생성자(Virtual Construtor)
      • Prototype
        • 원본 객체를 복제하여 생성
      • Singleton
        • 하나의 객체를 생성하여 다른 객체에서 참조함, 인스턴스 하나 보장
    • 구조 패턴(ABCDFFP)
      • Adapter
        • 재사용하도록 중간에서 호환성 없는 클래스들의 인터페이스를 변환
        • 상속 클래스 패턴과 위임 인스턴스 패턴 두 가지 형태 사용
      • Bridge
        • 기능 클래스 계층과 구현 클래스 계층을 분리하여 구현
        • 구현뿐만 아니라, 추상화된 부분을 변경하여 독립적으로 확장 가능
      • Composite
        • 트리 구조 구성, 부분-전체 계층 표현
        • 복합 객체 안에 복합 객체 포함하는 구조 가능
      • Decorator
        • 다른 객체들을 덧붙이는 방식으로 객체 간의 결합을 통해 확장 가능
        • 상속 대체
      • Facade
        • 복잡한 시스템에서 서브 클래스들 간 단순 통합 인터페이스 제공하여 결합도 낮춤(wrapper 사용)
      • Flyweight
        • 인스턴스를 공유하여 메모리 절약
      • Proxy
        • 여러 객체 사이에서 인터페이스 역할하는 대리 객체 수행
        • 대용량 메모리의 객체 접근 등
    • 행위 패턴(MOSSTVCMI)
      • Mediator
        • 복잡한 상호작용을 캡슐화하여 객체로 정의함
      • Observer
        • 한 객체의 상태가 변화하면 다른 객체들에게 전달
        • 느슨한 결합
      • State
        • 객체의 상태에 따라 동일한 동작을 다르게 처리할 때, 행위 내용 변경
        • 원시코드 수정 최소화
        • 유지보수 편의성
      • Strategy
        • 동일한 알고리즘을 캡슐화하여 상호 교환할 수 있도록 정의
      • Template Method
        • 상위 구조는 바꾸지 않고 기능의 골격을 제공하고, 하위 클래스에서 세부 처리 구체화
        • 코드를 줄이고 유지보수 용이
      • Visitor
        • 처리 기능을 별도로 분리하고, 각 클래스를 방문하여 수행함
      • Command
        • 요청을 객체 형태로 캡슐화하여 저장
        • 각종 명령어들을 추상 클래스와 구체 클래스로 분리함
      • Memento
        • 특정 시점에서의 객체 내부 상태를 객체화
        • 되돌리기 가능(백업), undo 요청
      • Interpreter
        • 언어나 문법 표현을 정의, SQL 또는 통신 프로토콜
      • Iterator
        • 내부 구조를 노출하지 않고, 복합 객체의 원소를 순차적으로 접근 가능

개발 지원 도구

  • 통합 개발 환경(IDE)
    • 개발에 필요한 편집기(Editor) / 컴파일러 / 디버거 등을 하나의 인터페이스로 제공하는 환경
  • 빌드 도구
    • 소스 코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 과정
    • 빌드 도구
      • Ant : 자바 프로젝트의 공식적인 빌드 도구
      • Maven : Dependency 설정
      • Gradle : Groovy 기반 빌드 스크립트

소프트웨어 개발 보안

  • 소프트웨어 개발 과정에서 발생할 수 있는 보안 취약점을 최소화하고 안전한 개발을 위한 활동
  • 보안 요소
    • 기밀성(Confidentiality) : 접근 및 노출 차단
    • 무결성(Integrity) : 고의 훼손/파괴 불가
    • 가용성(Availability) : 지속 사용 보장

배치 프로그램(Batch Program)

  • 정해진 일련의 순서에 따라 일괄적으로 특정 작업들을 처리하도록 만든 프로그램
  • 필수 요소
    • 대용량 데이터
    • 자동화
    • 견고성
    • 안정성 / 신뢰성
    • 성능
  • 배치 스케줄러(Batch Scheduler)
    • 설정된 주기에 맞춰 자동으로 수행되도록 지원하는 배치 프로그램, 잡 스케줄러
    • 종류: 스프링 배치, Quartz, Cron
      • crontab : [분][시] [일][월] [요일][명령어]
profile
괴발개발라이프

0개의 댓글