카테고리 없음

정보처리기사 - 4단원 서버 프로그램 구현

백코딩 2023. 10. 2. 13:36
728x90

1. 개발 환경

  • 개발 환경 구축 : 개발 프로젝트를 이해하고 SW 및 HW 장비를 구축
  • 하드웨어 환경 : Web Server, WAS, DB Server, File Server
  • 소프트웨어 환경 : 시스템 소프트웨어(OS, 서버 프로그램, DBMS) + 개발 소프트웨어
  • 웹 서버 기능 : HTTP/HTTPS 지원, 통신 기록, 정적 파일 관리, 대역폭 제한, 가상 호스팅(하나의 서버로 여러개 도메인 연결), 인증
  • 개발 언어 선정 기준 : 적정성, 효율성, 이식성, 친밀성, 범용성

2. 개발 패턴과 방법

  • 소프트웨어 아키텍처 : SW를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
    • 품질 속서 : 시스템, 비즈니스, 아키텍쳐 측면으로 나뉨
  • 모듈화 : 시스템의 기능들을 모듈 단위로 나누는 것
  • 추상화 : 전체적이고 포괄적인 개념 설계 후 차례로 세분화해서 구체화시킴
    • 과정 추상화, 자료 추상화, 제어 추상화로 나뉨
  • 단계적 분해 : 상위의 중요 개념으로부터 하위의 개녀므로 구체화 시킴
  • 정보 은닉 : 한 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 함
  • 상위 설계와 하위 설계
    • 상위 설계 : 아키텍처, 예비 설계 / 구조, DB, 인터페이스를 설계
    • 하위 설계 : 모듈, 상세 설계 / 컴포넌트, 자료구조, 알고리즘을 설계
  • 협약에 의한 설계 : 컴포넌트 설계 시 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
    • 선행 조건, 결과 조건, 불변 조건
  • 아키텍처 패턴 : 전형적인 해결 방식 및 예제
    • 레이어 패턴 : 계층으로 구분하여 구성
    • 클라이언트-서버 패턴 : 하나의 서버 - 여러개의 클라이언트 컴포넌트
    • 파이프-필터 패턴 : 데이터 스트림 절차의 각 단계를 필터로 캡슐화, 파이프 통해 전송 / 대표적으로 UNIX 쉘
    • MVC 패턴 : 모델, 뷰, 컨트롤러 구성
    • 마스터-슬레이브 패턴 : 장애 허용/병렬 컴퓨팅 시스템
    • 브로커 패턴 : 분산 환경 시스템, 사용자가 원하는 서비스와 특성을 브로커에 요청 -> 브로커가 연결
    • 피어-투-피어 : 하나의 컴포넌트가 클러이언트 or 서버 둘다 가능(파일 공유 네트워크)
    • 이벤트-버스 패턴 : 소스가 이벤트 메시지를 발행(퍼블리시)하면, 구독한 리스너들이 이벤트를 처리(알림 서비스)
    • 블랙보드 패턴 : 모든 컴포넌트들이 블랙보드& 공유 데이터 저장소에 접근 가능(음성 인식, 차량 식별 등)
    • 인터프리터 패턴 : 각 라인을 수행하는 방법을 지정, 기호마다 클래스를 갖도록 구성(번역기, 컴파일러, 인터프리터)

3. 객체 지향

  • 객체 지향 : SW의 각 요소를 객체로 만든 후 그 객체를 조립해 SW를 개발하는 기법
    • 객체 : 데이터 + 함수
    • 클래스 : 공통된 속성 및 연산을 갖는 객체 집합
    • 메시지 : 객체의 동작이나 연산을 일으키는 외부의 요구 사항
    • 캡슐화 : 외부 접근 제한, 세부내용 은닉
    • 상속 : 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려 받는 것
    • 다형성 : 각각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 것
    • 연관성 : 두 개 이상의 객체들이 상호 참조하는 관계
      • is member of : 연관화, 상호 관련
      • is instance of : 분류화, 동일한 특성
      • is part of : 집단화, 하나의 상위 객체를 구성
      • is a : 일반화, 특수화/ 상세화
  • 객체 지향 분석 : 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
    • 방법론
      • 럼바우 : 객체기
        • 객체 모델링 = 정보모델링 : 객체 다이어그램으로 표시
        • 동적 모델링 : 동적인 행위 표현
        • 기능 모델링 : 자료 흐름도 이용
      • 부치 : 미시 , 거시
      • 제이콥슨 : 유스케이스
      • 코드와 요르돈 : E-R다이어그램
      • Wirfs-Brock : 분석과 설계 간 구분 없음
  • SOLID : SRP(단일 책임), OCP(개방-폐쇄), LSC(리스코프 치환), ISP(인터페이스 분리), DIP(의존 역전)

 

4. 모듈

  • 모듈 : 모듈화를 통해 분리된 시스템의 각 기능
  • 결합도 : 자스제외공내  자료 -> 내용으로 가면 결합도 강함
    • 내용(Content) : 직접 참조
    • 공통(Common) : 공통 데이터 영역
    • 외부(External) : 외부 다른 모듈
    • 제어(Control) : 제어 요소를 전달
    • 스탬프(Stamp) : 자료구조
    • 자료(Data) : 자료 요소로만 구성
  • 응집도 : 우논시절교순기  우연 -> 기능으로 가면 응집도가 강함
    • 우연(Coincidental) : 서로 관련 없음
    • 논리(Logical) : 유사한 성격이나 특정 형태
    • 시간적(Temporal) : 특정 시간
    • 절차(Procedural) : 순차적으로 수행
    • 통신(Communication) : 동일한 입출력
    • 순차적(Sequential) : 하나의 출려기 그 다음 입력
    • 기능(Functional Cohesion) : 모든 기능 요소
  • 패인/팬아웃 : 팬아웃은 나가는 화살표 숫자 패인은 들어오는 숫자
  • N-S차트 : 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
  • 단위 모듈 : 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
  • IPC : 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적 프로그래밍 인터페이스 집합
    • 대표 메소드 : 공유 메모리, 소켓, 세마포어, 파이프와 네임드 파이프, 메시지 큐잉

 

5. 테스트

  • 테스트 케이스 : 소프트웨어가 요구사항을 정확하게 준수했는지 확인하기 위해 테스트 항목에 대한 명세서
  • 공통 모듈 명시 기법의 :
    • 정확성, 명확성, 완전성(모든 것을 기술), 일관성(상호 충돌 안나게 작성), 추적서
  • 재사용 : 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하느 ㄴ작업
    • 함수와 객체 단위
    • 컴포넌트 단위
    • 애플리케이션 단위
  • 코드 주요 기능 : 식별, 분류, 배열, 표준화, 간소
    • 종류
      • 순차 코드 1 2 3 4
      • 블록 코그 1001 ~ 1100
      • ...

6. 디자인 패턴

  • 디자인 패턴 : 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
    • 생성
      • 추상 팩토리 : 연관 서브 클래스, 서로 연관-의존하는 객체 그룹
      • 빌더 : 객체의 생성 과정과 표현 방법을 분리, 인스턴스 건축하듯 조합
      • 팩토리 메소드 : 가상 생성자 패턴, 객체 생선을 서브 클래스에서 처리하도록 분리해 캡슐화
        • 상위 클래스에서 인터페이스만 정의, 실제 생성은 서브 클래스 담당
      • 프로토타입 : 원본 객체를 복제해 객체 생성, 비용 큰 경우
      • 싱글톤 : 인스턴스가 하나뿐임을 보장. 생성된 객체를 어디서든 참조
    • 구조
      • 어댑터 : 호환성이 없는 클래스의 인터페이스를 다른 클래스가 이용할 수 있도록 변환
        • 기존 클래스 이용 원하지만 인터페이스가 일치하지 않을 때 이용
      • 브리지 : 구현부에서 추상층을 분리, 기능과 수현을 두 개의 별도 클래스로 구현
      • 컴포지트 : 복합 객체와 단일 객체를 구분없이 다루고자 사용. 객체를 트리 구조로 구성
      • 퍼케이드 : Wrapper 객체 필요. 서브 클래스 상위에 인터페이스 구현. 서브클래스 기능 간편 사용
      • 플라이웨이트 : 가능한 한 공유해서 사용해 메모리 절약. 다수의 유사 객체를 생성하거나 조작할 때 유용
      • 프록시 : 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터체이스 역할 수행. 네트워크 연결 등에 사용
    • 행위
      • 커맨드 : 하나의 추상 클래스에 메서드를 만들어 각 명령이 들어오면 그에 맞는 서브 클래스가 선택 되어 실행됨
      • 옵저버 : 어떤 클래스에 변화가 일어났을 때, 이를 감지하여 다른 클래스에 통보해주는것
      • 중재자 : 객체지향 설계에서 객체의 수가 너무 많아져 통신이 복잡해지면 느슨한 결합을 해칠 수 있기 때문에 중간에서 이를 통제하고 지시할 수 있는 역할
      • ...
728x90