자격증/정보처리기사

[정보처리기사] 실기 정리 - 3. 통합구현 / 4. 서버 프로그램 구현

lucy1215 2023. 3. 2. 00:55
728x90
반응형

3. 통합구현

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

 - 웹브라우저 간 HTML 문법이 호환되지 않는 문제와 SGML의 복잡함을 해결하기 위하여 개발됨

 - 사용자가 직접 문서의(Tag)를 정의할 수 있으며, 다른 사용자가 정의한 태그를 사용할 수 있다.

 - 트리 구조로 구성되어 있어 상위 태그는 여러 개의 하위 태그를 가질 수 있다.

 

SOAP (Simple Object Access Protocol)

 - 컴퓨터 네트워크 상에서 HTTP/HTTPS, SMTP 등을 이용하여 XML을 교환하기 위한 통신 규약

 - 웹 서비스에서 사용되는 메시지의 형식과 처리 방법을 지정

 - 프록시와 방화벽의 영향 없이 통신 가능

 

WSDL(Web Services Description Language)

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

 - XML로 작성되며, UDDI의 기초가 된다.

 

 

4. 서버 프로그램 구현

소프트웨어 아키텍처

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

 - 애플리케이션의 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정

 - 기본 원리 : 모듈화, 추상화, 단계적 분해, 정보은닉

 

모듈화(Modularity)

 - 시스템의 기능들을 모듈 단위로 나누는 것

 - 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 든다.

 - 모듈의 크기를 너무 크게 나누면 개수가 적어 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 든다.

 

추상화(Abstraction)

 - 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시켜 나가는 것

 - 추상화의 유형

   1) 과정 추상화 : 전반적인 흐름만 파악할 수 있게 설계하는 방법

   2) 데이터 추상화 : 데이터의 세부적인 속성이나 용도를 정의하지 않고, 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법

   3) 제어 추상화 : 이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체하는 방법

 

단계적 분해(Stepwise Refinement)

 - 문제를 상위의 중요 개념으로부터 하위의 개념으로 구체화시키는 분할 기법

 

정보 은닉(Information Hiding)

 - 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법

 

객체지향 : 각 요소들을 객체(Object)로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법

 - 구성 요소 : 객체, 클래스, 메시지

 - 특징 : 캡슐화, 상속, 다형성, 연관성

 

객체(Object)

 - 데이터와 이를 처리하기 위한 함수를 묶어 놓은 소프트웨어 모듈

 

클래스(Class)

 - 공통된 속성과 연산을 갖는 객체의 집합

 - 클래스의 속한 각각의 객체를 인스턴스(Instance)라고 한다.

 

메시지(Message)

 - 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동장이나 연산을 일으키는 외부의 요구 사항

 

캡슐화(Encapsulation)

 - 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것

 - 인터페이스가 단순해지고, 객체 간의 결합도가 낮아진다.

 

상속(Inheritance)

 - 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것

 

다형성(Polymorphism)

 - 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력

 

연관성(Relationship)

 - 두 개 이상의 객체들이 상호 참조하는 관계

 

객체지향 분석(OOA; Object Oriented Analysis)

 - 사용자의 요구사항과 관련된 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업

 - 개발을 위한 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석

 - 클래스를 식별하는 것이 객체지향 분석의 주요 목적

 

객제지향 분석의 방법론

1) Rumbaugh(럼바우) 방법

 - 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행함

2) Booch(부치) 방법

 - 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용

 - 클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산을 정의

3) Jacobson 방법

 - 유스케이스(Use Case)를 강조하여 사용

4) CoadYourdon 방법

 - E-R 다이어그램을 사용하여 객체의 행위를 모델링

 - 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성함\

5) Wirfs-Brock 방법

 - 분석과 설계 간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행

 

럼바우(Rumbaugh)의 분석 기법

 - 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법

 - 객체 모델링 -> 동적 모델링 -> 기능 모델링 순으로 이루어 진다.

1) 객체 모델링(Object Modeling)

 - 정보 모델링(Information Modeling)이라고도 하며, 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 객체 다이어그램으로 표시하는 것

2) 동적 모델링(Dynamic Modeling)

 - 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링

3) 기능 모델링(Functional Modeling)

 - 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링

 

객체 지향 설계 원칙

 - 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙

 - 종류

  1) 단일 책임 원칙(SRP) : 객체는 단 하나의 책임만 가져야 한다는 원칙

  2) 개방-폐쇄 원칙(OCP) : 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 한다는 원칙

  3) 리스코프 치환 원칙(LSP) : 자식 클래스는 최소한 부모 클래스의 기능은 수행할 수 있어야 한다는 원칙

  4) 인터페이스 분리 원칙(ISP) : 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙

  5) 의존 역전 원칙(DIP) : 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙

 

모듈(Module)

 - 모듈화를 통해 분리된 시스템의 각 기능

 - 모듈의 독립성은 결합도(Coupling)응집도(Cohesion)에 의해 측정된다.

 

결합도(Coupling)

 - 모듈 간에 상호 의존하는 정도

 - 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮다

 - 종류 (결합도 강한 순서)

   1) 내용 결합도(Content Coupling)

       - 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도

   2) 공통(공유) 결합도(Common Coupling)

       - 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도

       - 파라미터가 아닌 모듈 밖에 선언된 전역 변수를 사용하여 전역 변수를 갱신하는 방식으로 상호작용하는 때의 결합도

   3) 외부 결합도(External Coupling)

       - 어떤 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조할 때의 결합도

   4) 제어 결합도(Control Coupling)

       - 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호나 제어 요소를 전달하는 결합도

       - 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 하위 모듈이 상위 모듈에게 처리 명령을 내리는 권리 전도 현상이 발생하게 됨

   5) 스탬프(검인) 결합도(Stamp Coupling)

      - 모듈 간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달될 때의 결합도

   6) 자료 결합도(Data Coupling)

      - 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도

 

응집도(Cohesion)

 - 모듈의 내부 요소들이 서로 관련되어 있는 정도

 - 종류 (응집도 강한 순서)

   1) 기능적 응집도(Functional Cohesion)

       - 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도

   2) 순차적 응집도(Sequential Cohesion)

       - 모듈 내 하나의 활동으로부터 나온 출력 데이터를 그다음 활동의 입력 데이터로 사용할 경우의 응집도

   3) 교환(통신)적 응집도(Communication Cohesion)

       - 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우의 응집도

   4) 절차적 응집도(Procedural Cohesion)

       - 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도

   5) 시간적 응집도(Temporal Cohesion)

       - 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성할 경우의 응집도

   6) 논리적 응집도(Logical Cohesion)

       - 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우의 응집도

   7) 우연적 응집도(Coincidental Cohesion)

       - 모듈 내부의 각 구성 요소들이 서로 관련 없는 요소로만 구성된 경우의 응집도

 

팬인(Fan-In)/ 팬아웃(Fan-Out)

 - 팬인 : 어떤 모듈을 제어하는 모듈의 수

 - 팬아웃 : 어떤 모듈에 의해 제어되는 모듈의 수

 

N-S 차트(Nassi-Schneiderman Chart)

 - 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법

 

단위 모듈(Unit Module)

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

 - 구현 과정 : 단위 기능 명세서 작성 -> 입,입, 출력 기능 구현 -> 알고리즘 구현

 

IPC(Inter-Process Communication)

 - 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합

 

단위 모듈 테스트

 - 모듈이 정해진 기능을 정확히 수행하는지 검증하는 것

 - 단위 테스트(Unit Test)라고도 불린다.

 - 시스템 수준의 오류는 잡아낼 수 없다.

 

테스트 케이스(Test Case)

 - 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위한 테스트 항목에 대한 명세서

 

공통 모듈 : 여러 프로그램에서 공통으로 사용할 수 있는 모듈

공통 명세 기법의 종류

  1) 정확성(Correctness) : 시스템 구현 시 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성함

  2) 명확성(Clarity) : 해당 기능을 이해할 때 중의적으로 해석되지 않도록 명확하게 작성함

  3) 완전성(Completeness) : 시스템 구현을 위해 필요한 모든 것을 기술함

  4) 일관성(Consistency) : 공통 기능들 간 상호 충돌이 발생하지 않도록 작성함

  5) 추적성(Traceability) : 기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성함

 

재사용(Reuse)

 - 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업

 

코드(Code)

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

 

코드의 주요 기능

 - 식별 기능 : 데이터 간의 성격에 따라 구분이 가능함

 - 분류 기능 : 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화할 수 있음

 - 배열 기능 : 의미를 부여하여 나열할 수 있음

 - 표준화 기능 : 다양한 데이터를 기준에 맞추어 표현할 수 있음

 - 간소화 기능 : 복잡합 데이터를 간소화할 수 있음

 

디자인 패턴(Design Pattern)

 - 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제

 

1) 생성 패턴(Creational Pattern)

  1-1) 추상 팩토리(Abstract Factory)

         - 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관, 의존하는 객체들의 그룹으로 생성하여 추상적으로 표현함

         - 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능함

  1-2) 빌더(Builder)

         - 작게 분리된 인스턴스를 건축하듯이 조합하여 객체를 생성함

         - 객체의 생성 과정과 표현 방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어낼 수 있음

  1-3) 팩토리 메소드(Factory Method)

         - 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴

         - 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당함

         - 가상 생성자(Virtual Constructor) 패턴이라고도 함

  1-4) 프로토타입(Prototype)

         - 원본 객체를 복제하는 방법으로 객체를 생성하는 패턴

         - 일반적인 방법으로 객체를 생성하며, 비용이 큰 경우 주로 이용함

  1-5) 싱글톤(Singleton)

         - 하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수는 없음

         - 클래스 내에서 인스턴스가 하나뿐임을 보장하며, 불필요한 메모리 낭비를 최소화할 수 있음

 

2) 구조 패턴(Structural Pattern)

  2-1) 어댑터(Adapter)

         - 호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환해 주는 패턴

  2-2) 브리지(Bridge)

         - 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성한 패턴

  2-3) 컴포지트(Composite)

         - 여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴

  2-4) 데코레이터(Decorator)

         - 객체 간의 결합을 통해 능동적으로 기능들을 확장할 수 있는 패턴

  2-5) 퍼싸드

  2-6) 플라이웨이트(Flyweight)

  2-7) 프록시(Proxy)

 

3) 행위 패턴(Behavioral Pattern)

  3-1) 책임 연쇄(Chain of Responsibility)

         - 요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 개가체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴

  3-2) 커맨드(Command)

         - 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴

  3-3) 인터프리터(Interpreter)

         - 언어에 문법 표현을 정의하는 패턴

  3-4) 반복자(Iterator)

  3-5) 중재자(Mediator)

  3-6) 메멘토(Memento)

  3-7) 옵서버(Observer)

         - 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴

  3-8) 상태(State)

         - 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용하는 패턴

  3-9) 전략(Strategy)

         - 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴

  3-10) 템플릿 메소드(Template Method)

  3-11) 방문자(Visitor)

         - 각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성하는 패턴

 

배치 프로그램(Batch Program)

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

 - 필수 요소

   1) 대용량 데이터 : 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리가 가능해야 함

   2) 자동화 : 심각한 오류가 발생하는 상황을 제외하고는 사용자의 개입 없이 수행되어야 함

   3) 견고성 : 잘못된 데이터나 데이터 중복 등의 상황으로 중단되는 일 없이 수행되어야 함

   4) 안정성/신뢰성 : 오류가 발생하면 오류의 발생 위치, 시간 등을 추적할 수 있어야 함

   5) 성능 : 다른 응용 프로그램의 수행을 방해하지 않아야 함 / 지정된 시간 내에 처리가 완료되어야 함

 

배치 스케줄러(Batch Scheduler)

 - 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해 주는 도구

 
반응형