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) Coad와 Yourdon 방법
- 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)
- 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해 주는 도구
'자격증 > 정보처리기사' 카테고리의 다른 글
[정보처리기사] 실기 정리 - 8. SQL 응용 (0) | 2023.06.23 |
---|---|
[정보처리기사] 실기 정리 - 6. 화면 설계 / 7. 애플리케이션 테스트 관리 (0) | 2023.03.07 |
[정보처리기사] 실기 정리 - 5. 인터페이스 구현 (0) | 2023.03.03 |
[정보처리기사] 실기 정리 - 2. 데이터 입,출력 구현 (0) | 2023.02.27 |
[정보처리기사] 실기 정리 - 1. 요구사항 확인 (0) | 2023.02.24 |