정보처리기사 08. 서버 프로그램 구현
본문 바로가기

정보처리기사

정보처리기사 08. 서버 프로그램 구현

728x90
반응형

 


01 개발환경 구축

 

개발 환경 구축은 응용 소프트웨어 개발을 위해 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축하는 것을 의미한다.

 

 

📌 프로그램 개발을 위한 도구

 

빌드 도구, 구현 도구, 테스트 도구, 형상 관리 도구(산출물에 대한 버전 관리 도구)

 

 

서버 하드웨어 개발 환경

 

종류 특징
웹 서버(Web Server) - 클라이언트로부터 직접 요청을 받아 처리함
- 저용량의 정적 파일들을 제공함
웹 애플리케이션 서버(WAS; Web Application Server) 동적 서비스를 제공하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행함
데이터베이스 서버(DB Server) 데이터베이스와 이를 관리하는 DBMS를 운영함
파일 서버(File Server) 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장함

 

 

소프트웨어 환경

 

소프트웨어 환경은 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성된다.

 

종류 특징
요구사항 관리 도구 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어
설계/모델링 도구 UML을 지원하며, 개발의 전 과정에서 설계 및 모델링을 도와주는 소프트웨어
구현 도구 개발 언어를 통해 애플리케이션의 실제 구현을 지원하는 소프트웨어
빌드 도구 구현 도구를 통해 애플리케이션의 실제 구현을 지원하는 소프트웨어
테스트 도구 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어
형상 관리 도구 산출물들을 버전별로 관리하여 품질 향상을 지원하는 소프트웨어

 

 

형상관리(Configuration Management)

 

소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리하기 위한 활동

 

 

형상관리의 절차 (식통감기)

 

- 형상 별: 형상 관리 대상 정의 및 식별

- 형상 제: 형상 항목 버전 관리를 위해 변경 여부와 변경 활동 통제

- 형상 사: 소프트웨어 베이스라인의 무결성 평가, 베이스라인 변경 시 요구사항과 일치하는 지 검토

- 형상 록: 형상 및 변경관리에 대한 각종 수행결과 기록

 

 

소프트웨어 형상 관리도구

 

- 공유 폴더 방식(RCS, SCCS): 매일 개발이 완료된 파일은 약속된 위치의 공유 폴더에 복사하는 방식

- 클라이언트/서버 방식(CVS, SVN): 중앙에 버전 관리 시스템을 향시 동작시키는 방식
- 분산 저장소 방식(Git): 로컬 저장소와 원격 저장소로 분리되어 분산 저장하는 방식

≫ CVS: 서버와 클라이언트와 구성, 다수의 인원이 동시에 운영체제로 접근 가능

≫ SVN(Subversion): 하나의 서버에서 소스를 쉽고 유용하게 관리할 수 있게 도와줌

≫ RCS: 소스 파일의 수정을 한 사람으로 제한

≫ BitKeeper: SVN과 비슷, 대규모 프로젝트에서 빠른 속도 내도록 개발된 형상 관리 도구

 

 

아키텍처 패턴(Patterns)

 

아키텍처 패턴은 아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제를 의미한다.

📍 레이어 패턴: 시스템을 계층으로 구분하여 구성하는 고전적 방법의 패턴

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

📍 파이프-필터 패턴: 데이터 스트림 절차의 각 단계를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴이다.

📍 모델-뷰-컨트롤러 패턴: 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴이다.

 

 


 

📔 객체지향(Object-Oriented)

 

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

소프트웨어의 재사용 및 확장이 용이하여 고품질의 소프트웨어를 빠르게 개발할 수 있고 유지보수가 쉽다.

 

객체지향의 구성 요소

 

- 객체(Object): 데이터와 이를 처리하기 위한 함수를 묶어 놓은 소프트웨어 모듈이다.

- 클래스(Class): 공통된 속성과 연산을 갖는 객체의 집합이다.

- 메시지(Message): 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구 사항이다. 

 

 

객체지향의 특징

 

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

- 상속(Inheritance): 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것이다.

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

- 연관성(Relationship): 두 개 이상의 객체들이 상호 참조하는 관계

 

 

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

 

객체지향 분석은 사용자의 요구사항과 관련된 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업이다.

 

종류 내용
Rumbaugh(럼바우) 방법 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행함
Boochi(부치) 방법 - 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용함
- 클래스와 객체들을 분석 및 식별하고 클래스의 속성와 연산을 정의함
Jacobson 방법 유스케이스(Use Case)를 강조하여 사용함
Coad와 Yourdon 방법 E-R 다이어그램을 사용하여 객체의 행위를 모델링함
Wirfs-Brock 방법 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행함

 

 

럼바우(Rumbaugh)의 분석 기법

 

럼바우의 분석 기법은 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법이다.

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

≫ 동적 모델링(Dynamic Modeling): 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어, 흐름, 상호 작용, 동작 수선 등의 동적인 행위를 표현하는 모델링

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

 

객체지향 설계원칙(SOLID)

 

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

 

  1. 단일 책임 원칙(SRP): 객체는 단 하나의 책임만 가져야 한다.
  2. 개방-폐쇄 원칙(OCP): 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 한다는 원칙
  3. 리스코프 치환 원칙(LSP): 자식 클래스는 최소한 부모 클래스의 기능은 수행할 수 있어야 한다는 원칙
  4. 인터페이스 분리 원칙(ISP): 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙
  5. 의존 역전 원칙(DIP): 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙

 

 


02 공통 모듈 구현

 

모듈(Module): 하나의 완전한 기능을 수행할 수 있는 독립된 실체

 

→ 모듈은 모듈화를 통해 분리된 시스템의 각 기능으로, 기능적 독립성은 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미한다.

결합도응집도에 의해 측정된다.

 

 

모듈화(Modularity): 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 시험, 통합 및 수정을 용이하도록 시스템을 분해 기법 

 

 

모듈화 기법

 

🪐 루틴: 소프트웨어에서 특정 동작을 수행하는 일련의 코드로 기능을 가진 명령어들의 모임

메인 루틴, 서브 루틴

 

 

단위 모듈

 

단위 모듈은 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것이다.

 

IPC(Inter-Process Communication)

 

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

- 복수의 프로세스를 수행하며 이뤄지는 프로세스 간 통신까지 구현이 가능하다.

 

메소드 특징
Shared Memory 공유 가능한 메모리를 구성하여 다수의 프로세스가 통신하는 방식
Socket 네트워크 소켓을 이용하여 네트워크를 경유하는 프로세스 간에 통신하는 방식
Semaphores 공유 자원에 대한 접근 제어를 통해 통신하는 방식
Pipes&named Pipes 'Pipe'라고 불리는 선입선출 형태로 구성된 메모리를 여러 프로세스가 공유하여 통신하는 방식
- Pipe는 하나의 프로세스가 이용 중이라면 다른 프로세스는 접근할 수 없음
Message Queueing 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식

 


 

응집도(Cohesion)

 

모듈의 독립성을 나타내는 정도, 모듈 내부 구성요소 간 연관정도

응집도가 강할수록 품질이 높고, 약할수록 품질이 낮다.

 

기능적 응집도 순차적 응집도 통신적 응집도 절차적 응집도 시간적 응집도 논리적 응집도 우연적 응집도

 

응집도 유형(우논시절 통신기)

 

1. 우연적 응집도: 모듈 내부의 구성요소가 연관이 없는 경우

2. 논리적 응집도: 유사한 성격, 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우

3. 시간적 응집도: 특정 시간에 처리되어야 하는 활동들

4. 절차적 응집도: 모듈이 다수의 관련 기능을 가지고 모듈 안 구성요소들이 그 기능을 순차적으로 수행할 경우

5. 통신적 응집도: 동일한 입력과 출력을 사용해 다른 기능을 수행하는 활동들의 모임

6. 순차적 응집도: 모듈내 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우

7. 기능적 응집도: 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우

 

 

결합도(Coupling)

 

모듈 내부가 아닌 외부 모듈과의 연관도, 모듈 간 상호의존성, 모듈간 관련성

결합도는 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계이다.

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

 

내용 결합도 공통 결합도 외부 결합도 제어 결합도 스탬프 결합도 자료 결합도

 

결합도 유형(내공외제스자)

 

1. 내용 결합도: 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우

2. 공통 결합도: 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 갱신하는 식으로 상호작용하는 경우

3. 외부 결합도: 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스 인터페이스를 공유할 경우

4. 제어 결합도: 어떻게 처리해야한다는 제어요소가 전달되는 경우

5. 스탬트 결합도: 모듈 간 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우

6. 자료 결합도: 모듈 간 인터페이스로 전달되는 파라미터를 통해서만 모듈 간 상호작용이 일어나는 경우

 

 

공통 모듈(또는 서버 프로그램)의 구현 절차

공통 모듈은 여러 프로그램에서 공통으로 사용할 수 있는 모듈이다.

 

공통 모듈 명세 기법의 종류

 

명세 기법 내용
정확성(Correctness) 시스템 구현 시 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성함
명확성(Clarity) 해당 기능을 이해할 때 중의적으로 해석되지 않도록 명확하게 작성함
완전성(Completeness) 시스템 구현을 위해 필요한 모든 것을 기술함
일관성(Consistency) 공통 기능들 간 상호 충돌이 발생하지 않도록 작성함
추적성(Traceability) 기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성함

 

서버 개발 프레임워크

 

서버 개발 프레임워크는 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어를 의미한다.

서버 개발 프레임워크의 대부분은 모델-뷰-컨트롤러(MVC) 패턴을 기반으로 개발되었다.

 

DTO/VO → SQL → DAO → Service → Controller → View

 

과정 내용
DTO/VO 구현 - 데이터 교환을 위해 사용할 객체를 만드는 과정
- 송, 수신할 데이터의 자료형(Data Type)에 맞는 변수 및 객체를 생성함
SQL 구현 - 데이터의 삽입, 변경, 삭제 등의 작업을 수행할 SQL문을 생성하는 과정
- SQL문은 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리함
DAO 구현 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현하는 과정
Service 구현 사용자의 요청에 응답하기 위한 로직을 구현하는 과정
Controller 구현 사용자의 요청에 적절한 서비스를 호출하여, 그 결과를 사용자에게 반환하는 코드를 구현하는 과정

 

 

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

 

팬인: 어떤 모듈을 제어하는 모듈의 수/모듈 자신을 기준으로 들어오면 팬인

→ 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있다./팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요하다.

 

팬아웃: 어떤 모듈에 의해 제어되는 모듈의 수/모듈 자신을 기준으로 나가면 팬아웃

 

JUnit: 자바 프로그래밍 언어용 단위 테스트 도구

 

 


03 배치 프로그램 구현

 

배치 프로그램

 

일련의 작업들을 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법으로, 

배치 프로그램의 유형에는: 이벤트 배치, 온디맨드 배치, 정기 배치 등이 있다.

 

 

배치 프로그램의 필수 요소

 

요소 내용
대용량 데이터 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리가 가능해야 함
자동화 심각한 오류가 발생하는 상황을 제외하고는 사용자의 개입 없이 수행되어야 함
견고성 잘못된 데이터나 데이터 중복 등의 상황으로는 중단되는 일 없이 수행되어야 함
안전성/신뢰성 오류가 발생하면 오류의 발생 위치, 시간 등을 추적할 수 있어야 함
성능 - 다른 응용 프로그램의 수행을 방해하지 않아야 함
- 지정된 시간 내에 처리가 완료되어야 함

 

배치 스케줄러

 

일괄 처리를 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 도구

배치 스케줄러 종류: 스프링 배치, 쿼츠 스케줄러, 크론

 

Cron 표현식

 

리눅스/유닉스 크론 표현식: 분시일 월요연

쿼츠 크론 표현식: 초분시일 월요연

반응형