[정처기 실기] 3,4장 - 통합 / 서버프로그램 구현

배채윤·2021년 4월 20일

✅ 통합 구현

◾️ 통합 구현

사용자의 요구 사항에 맞춰 송수신 모듈과 중계 모듈 간의 연계를 구현하늗 것.

◾️ 연계 메커니즘

  • 연계 데이터 보안 적용 방식
    • 전송 구간 보안
      보안용 프로토콜 이용, 패킷이나 데이터를 암호화
    • 데이터 보안
      데이터 추출, 반영할 때 데이터를 암&복호화

◾️ XML ⭐️⭐️⭐️

eXtensible Markup Language

📌 특수한 목적을 갖는 마크업 언어를 만드는 데 사용되는 다목적 마크업 언어

  • 원활한 데이터 연계를 위해 유니코드를 기반으로 송수신 시스템 간에 전송되는 데이터가 동일한 구조로 구성될 수 있도록 형태를 정의하는 역할을 함.
  • HTML 호환 문제와 SGML 복잡성 해결

◽️ SOAP

Simple Object Access Protocol
📌 네트워크 상에서 HTTP/HTTPS, SMTP 등을 이용하여 XML을 교환하기 위한 통신 규약

  • 메시지 형식과 처리 규약 지정
  • 프록시, 방화벽 영향 X
  • 최근에는 무거운 SOAP 대신 RESTful 프로토콜을 이용하기도 함

💡RESTful 프로토콜
HTTP와 REST(Representational State Transfer)의 원칙을 사용하여 구현되는 웹서비스로, HTTP로 자원을 관리하는 데 사용되는 웹서비스 API의 집합

◽️ WSDL

Web Service Description Languages

📌 웹서비스와 관련된 서식이나 프로토콜 등을 표준적인 방법으로 기술하고 게시하기 위한 언어

  • XML로 작성되며, UDDI의 기초가 됨.
  • SOAP, XML과 결합하여 웹서비스 제공에 사용

✅ 서버 프로그램 구현

◾️ 아키텍처

◽️ SW 아키텍처

📌 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체

  • 설계 기본 원리(4)

    • 모듈화(Modularity)
      시스템의 기능들을 모듈 단위로 나누는 것
    • 추상화(Abstraction)
      문제의 전체적인 개념을 설계한 후 차례로 구체화시켜 나가는 것
      • 과정 추상화 : 전반적인 흐름만
      • 데이터 추상화 : 데이터 구조를 대표할 수 있는 표현으로 대체
      • 제어 추상화 : 이벤트 발생 절차나 방법을 대표할 수 있는 표현으로 대체
    • 단계적 분해(Stepwise Refinement)
      하향식 설계전략. 상위 중요 개념으로부터 하위 개념으로 **구체화
    • 정보 은닉(Information Hiding)
      모듈 내부 데이터에 접근하거나 변경 X -> 독립적 수행이 가능하게 함

  • 설계 단계

    상위 설계하위 설계
    별칭아키텍처 설계, 예비 설계모듈 설계, 상세 설계
    설계 대상시스템 전체 구조시스템 내부구조&행위
    세부 목록구조, DB, 인터페이스컴포넌트, 자료구조, 알고리즘
  • 품질 평가 요소

    • 시스템 측면
    • 비즈니스 측면
    • 아키텍처 측면
  • 아키텍처 설계 과정 ⭐️

    • 설계 목표 설정
    • 시스템 타입 결정
    • 아키텍처 패턴 적용
    • 서브시스템 구체화
    • 검토
  • 협약(Contract)에 의한 설계
    컴포넌트를 설계할 때 클래스 대한 여러 가지 가정을 공유할 수 있도록 명세한 것

    • 컴포넌트에 대한 정확한 인터페이스 명세
    • 명세에 포함될 조건
      • 선행 조건(Precondition)
      • 결과 조건(Postcondition)
      • 불변 조건(Invariant)

◽️ 아키텍처 패턴

📌 아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식

  • 레이어 패턴(Layers Pattern)
    시스템을 계층으로 구분하는 패턴(고전)
    ex) OSI 참조 모델

  • 클라이언트-서버 패턴
    하나의 서버 컴포넌트와 다수의 클라이언트로 구성되는 패턴

  • 파이프-필터 패턴
    데이터 스트림 절차의 각 단계를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
    데이터 변환, 버퍼링, 동기화 등에 주로 사용
    ex) UNIX의 쉘

  • MVC 패턴(Model-View-Controller)
    서브 시스템을 model, view, controller로 구조화하는 패턴
    controller가 요청을 받으면 핵심 기능과 데이터를 보관하는 model을 이용하여 view에 정보를 출력
    ex) 대화형 어플리케이션

  • 마스터 슬레이브 패턴
    슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업을 수행하는 패턴
    ex) 장애 허용 시스템, 병렬 컴퓨팅 시스템

  • 브로커 패턴
    사용자가 원하는 서비스를 브로커 컴포넌트에 요청하면 그에 맞는 컴포넌트와 연결해주는 패턴
    ex) 분산 환경 시스템

  • 피어-투-피어 패턴
    피어끼리 데이터를 주고받는 구조의 패턴. 피어는 클라이언트가 될 수도, 서버가 될 수도 있음(유동적)
    ex) 파일 공유 네트워크

  • 이벤트-버스 패턴
    소스가 채널에 메시지를 publish 하면 channel을 구독한 listener들이 이벤트를 처리하는 패턴
    ex) 알림 서비스

  • 블랙보드 패턴
    모든 컴포넌트들이 공유데이터 저장소와 블랙보드 컴포넌트에 접근 가능한 패턴
    ex) 음성 인식, 차량 식별, 신호 해석

    • 블랙보드 : 솔루션의 객체를 포함하는 구조화된 전역 메모리
    • 지식 소스 : 자체 표현을 가진 특수 모듈
    • 제어 컴포넌트 : 모듈 선택, 설정 및 실행을 담당한다
  • 인터프리터 패턴
    프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴
    ex) 번역기, 컴파일러, 인터프리터

◾️ 객체지향 ⭐️ ⭐️ ⭐️

📌 각 요소들을 객체로 만든 후, 객체들을 조립해서 SW를 개발하는 기법

◽️ 객체지향 구성요소

  • 객체
    📌 데이터와 이를 처리하기 위한 함수를 묶어놓은 SW 모듈
    • 데이터 : 객체가 가지고 있는 정보. 속성, 상태 등
    • 함수 : 객체가 수행하는 기능
  • 클래스
    📌 공통된 속성과 연산을 갖는 객체의 집합.
    객체 지향 프로그램에서 데이터를 추상화하는 단위
    클래스에 속한 각각의 객체를 인스턴스라고 한다.
  • 메시지
    📌 객체 간 상호작용에 사용되는 수단. 객체의 동작이나 연산을 일으키는 외부 요구 사항

◽️ 객체지향의 특징

  • 캡슐화(Encapsultaion)
    외부에서의 접근을 제외하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것

  • 상속(Inheritance)
    상위 클래스의 모든 것을 하위 클래스가 물려받는 것

  • 다형성(Polimorphism)
    하나의 메시지에 대하여 각각의 객체가 고유한 방법으로 다르게 응답하는 것

  • 연관성(Relationship)
    두 개 이상의 객체가 상호참조하는 관계를 맺는 것

    종류의미특징
    is member of연관화2개 이상의 객체가 상호 관련함을 의미
    is instance of분류화동일한 형을 갖는 객체를 모아 구성
    is part of집단화관련 있는 객체를 묶어 하나의 상위 객체 구성
    is a일반화공통 성질로 추상화한 상위 객체를 구성
    특수화/상세화상위 객체를 구체화 하여 하위 객체를 구성

◽️ 객체지향 분석 & 설계 ⭐️

  • 객체 지향 분석(OOA)
    사용자의 요구사항과 관련된 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
    클래스를 식별하기 위함
  • 객체 지향 분석의 방법론
    • 럼바우 방법(Rumbaugh) ⭐️
      모든 SW 구성요소를 그래픽 표기법을 이용하여 아래 순서대로 모델링.
      • 체 모델링
        UML의 객체 다이어그램 사용
      • 적 모델링
        UML의 상태 다이어그램 사용
      • 능 모델링
        자료흐름도(DFD) 사용. 자료 흐름을 중심으로 처리 과정 표현
    • 부치 방법(Booch)
      미시/거시 개발 프로세스 사용. 클래스 분석
    • Jacobson 방법
      유스케이스 강조
    • Coad와 Yourdon 방법
      E-R 다이어 그램을 사용하여 모델링
    • Wirfts-Brock 방법
      분석/설계간 구분이 X

  • 객체 지향 설계 원칙
    변경이나 확장에 유연한 시스템을 설계하기 위해 지켜야할 원칙
    설계 원칙의 종류는 아래 5가지 원칙의 앞글자를 따 SOLID 원칙이라 부름
    • 단일 책임 원칙(SRP)
      객체는 단 하나의 책임만
    • 개방 폐쇄 원칙(OCP)
      코드 변경 없이 기능 추가하도록 설계
    • 리스코프 치환 원칙(LSP)
      자식 클래스는 최소 부모 클래스의 기능은 수행
    • 인터페이스 분리 원칙(ISP)
      인터페이스와 의존 X
    • 의존 역전 원칙(DIP)
      의존관계는 추상성 높은 클래스와

◾️ 모듈

◽️ 모듈의 독립성 측정

📌 다른 모듈과의 과도한 상호작용을 배제하고 하나의 기능만을 수행하게 하여 독립성을 높여야 함. 독립성은 결합도, 응집도 등으로 측정 가능

  • 결합도 6단계(내공외제스자)
    모듈 간 상호작용 정도

    • 내용 결합도 : 내부 자료를 직접 참조
    • 공통 결합도 : 공유 영역을 여러 모듈이 사용
    • 외부 결합도 : 외부 다른 모듈에서 참조
    • 제어 결합도 : 다른 모듈의 논리적 흐름을 제어
    • 스탬프(검인) 결합도 : 모듈 간 인터페이스에 배열 등의 자료구조를 전달
    • 자료 결합도 : 모듈 간 인터페이스에 자료 요소만 이용
  • 응집도 7단계(기순결절시논우)
    모듈 내부 관련 정도

    • 기능적 응집도 : 모든 기능 요소가 단일 문제
    • 순차적 응집도 : 출력 데이터를 다음 활동의 입력 데이터로 사용
    • 교환적 응집도 : 동일한 입출력으로 서로 다른 기능
    • 절차적 응집도 : 다수의 기능이 순차적으로 수행
    • 시간적 응집도 : 특정 시간에 처리되는 것을 모듈로 작성
    • 논리적 응집도 : 유사한 기능끼리 묶음
    • 우연적 응집도 : 관련 X
  • 팬인 / 팬아웃

    • Fan-In : 어떤 모듈을 제어하는 모듈의 수
    • Fan-Out : 어떤 모듈에 의해 제어되는 모듈의 수
  • N-S 차트(Nassi-Schneiderman Chart)
    논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
    박스 다이어그램, Chapin Chart라고도 함.

◽️ 단위 모듈

한 가지 동작을 수행하는 기능을 모듈로 구현한 것

  • 과정 : 단위 기능 명세 작성 -> 입출력 기능 구현 -> 알고리즘 구현
  • IPC(Inter-Process Communication)
    모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
    • Shared Memory : 공유 메모리로 프로세스 간 통신
    • Socket : 네트워크 소켓으로 통신
    • Semaphores : 공유 자원 접근 제어
    • Pipes&named Pipes : pipe 메모리 이용
    • Message Queueing : 메시지 전달 방식
  • 테스트 : Unit Test라고 부름
    • 📌 테스트 케이스
      구현된 SW가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위한 테스트 항목에 대한 명세서.
    • ISO/IEC/IEEE 29119-3 표준에 따른 테스트 케이스 구성 요소
      식별자, 테스트 항목, 입력 명세, 출력 명세, 환경 설정, 특수 절차 요구, 의존성 기술

◽️ 공통 모듈 ⭐️

여러 프로그램에서 공통으로 사용할 수 있는 모듈
공통 모듈 구현은 기능을 명확히 이해하도록 명세 기법 준수가 필요

  • 공통 모듈 명세 기법의 종류 ⭐️ (정명완일추)
    • 정확성
    • 명확성
    • 완전성 : 시스템 구현에 필요한 모든 것을 기술
    • 일관성 : 상호 충돌 X
    • 추적성(Traceability) : 요구 사항의 출처, 관계 파악 가능
  • 재사용
    이미 개발된 기능을 새로운 시스템이나 기능 개발이나 유지에 사용하는 것
    • 재사용 규모에 따른 분류(함컴애)
      • 함수와 객체
      • 컴포넌트
      • 애플리케이션

◽️ 코드 ⭐️

📌 자료의 분류, 조합, 집계, 추출을 용이하게 하기 위해 사용하는 기호

  • 코드의 주요 기능 5가지(식분배간표)

    • 식별
    • 분류
    • 배열
    • 간소화
    • 표준화
  • 코드의 종류 6가지

    • 순차 코드 : 차례로 일련번호 부여. 구분 코드
      ex) 1, 2, 3, 4
    • 블록 코드 : 공통성 있는 것끼리 블록. 구분 코드
      ex) 1001~1100 : 총무부, 1101~1200 : 관리부
    • 10진 코드(Decimal) : 10진 분할. 도서 분류식 코드
      ex) 1000: 공학, 1100 : SW 공학, 1110: SW 설계
    • 그룹 분류 코드(Group Classification) : 대분류, 중분류, 소분류
      ex) 1-01-001: 본사-총무부-인사계, 2-01-001: 지사-총무부-인사계
    • 연상 코드(Mnemonic) : 명칭, 관계인는 숫자 등 이용
      ex) TV-40 : 40인치 TV
    • 표의 숫자 코드(Significant Digit) : 물리적 수치를 그대로 코드에 적용. 유효 숫자 코드라고도 함
      ex) 120-720 : 두께, 폭이 120x720인 강판
    • 합성 코드 : 2개 이상 조합
      ex) KE-711 : 대한항공(연상) + 711기(순차)

◾️ 디자인 패턴 ⭐️

📌 모듈 간 관계 및 인터페이스 설계할 때 참조할 수 있는 전형적인 해결 방식

GOF의 디자인 패턴은 생성, 구조, 행위 패턴으로 나뉨

◽️ 생성 패턴(5)(Creational)

📌 클래스, 객체 생성과 참조 과정을 정의하는 패턴

  • 추상 팩토리(Abstract Factory)
    연관 객체 그룹을 생성하여 추상적으로 표현
    연관 서브 클래스를 묶어 한번에 교체 가능
  • 빌더(Builder)
    인스턴스를 조합
  • 팩토리 메소드(Factory Method)
    서브클래스에서 처리하도록 분리하여 캡슐화
    가상 생성자(Virtual Constructor) 패턴이라고도 함
  • 프로토 타입(Prototype)
    원본 객체 복제.
  • 싱글톤(Singleton)
    하나의 객체를 생성하여 어디서든 참조. 동시에 참조는 X

◽️ 구조 패턴(7)(Stuructural)

📌 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴

  • Adapter
    인터페이스를 다른 클래스와 호환 가능하게 변환
  • Bridge
    구현부에서 추상층을 분리하여 기능, 구현을 두 개의 별도 클래스로 구현.
  • Composite
    복합 객체 안에 복합 객체가 포함되는 구조. 객체를 트리구조로 구성
  • Decorator
    객체간 결합을 통해 능동적으로 기능 확장
  • Pacade(퍼싸드)
    더 상위에 인터페이즈 구성 -> 서브 클래스 사용
    서브 클래스 간 통합 인터페이스 Wrapper 객체 필요
  • Flyweight
    인스턴스 매번 생성 X, 공유 -> 가볍!
  • Proxy
    접근 어려운 객체와 연결하려는 객체 사이에서 인터페이스 역할

◽️ 행위 패턴(Behavioral)

📌 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배하는 과정을 정의하는 패턴

  • 책임 연쇄(Chain of Responsibility)
    요청을 처리하지 못하면 다음 객체가 연속해서 처리
  • 커맨드
    요청을 재이용 할 수 있도록 저장. 명령어를 추상/구체 클래스로 분리하여 저장
  • 인터프리터(Interpreter)
    언어에 문법 표현을 정의
  • 반복자(Iterator)
    접근 잦은 객체에 동일한 인터페이스
  • 중재자(Mediator)
    복잡한 상호작용을 캡슐화하여 객체로 정의
  • 메멘토(Memento)
    특정 시점에서 상태를 객체화 -> 시점으로 돌릴 수 있게 함
  • 옵서버(Observer)
    객체 상태가 변하면 다른 객체에 전달
  • 상태(State)
    객체 상태에 따라 동일한 동작을 다르게 처리
  • 전략(Strategy)
    동일한 알고리즘을 개별적으로 캡슐화하여 상호 교환
  • 템플릿 메소드
    상위에서 골격 정의, 하위에서 세부처리 구체화
  • 방문자
    처리 기능 분리 -> 방문하여 사용
  • 방문자(Visitor)

◾️ 배치 프로그램

여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램

◽️ 필수 요소 5가지(대자견안성)

  • 대용량 데이터
  • 자동화 : 사용자 개입없이
  • 견고성 : 중단 X
  • 안정성 : 오류 추적 가능하게
  • 성능 : 다른 프로그램 수행 방해 X

◽️ 배치 스케줄러

배치 프로세싱 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구. 잡 스케줄러라고도 불린다.

  • 종류
    • 스프링 배치
      Spring Source 사, Accenture 사 공동 개발
    • Quartz
      스프링 프레입워크로 개발되는 Batch program을 위한 기능을 제공하는 오픈 소스 라이브러리
    • Cron
      리눅스 기본 스케줄러 도구. crontab 명령어 이용
profile
새로운 기술을 테스트하고 적용해보는 걸 좋아하는 서버 개발자

0개의 댓글