정보처리기사 실기/서버프로그램 구현

개발 환경 구축 & 공통 모듈 구현

· 코딩마이데이

1. 개발 환경 구축

개발환경 준비

1. 개발 환경 구축의 이해

해당 프로젝트의 목적과 구축 설계에 대한 명확한 이해

이에 맞는 하드웨어, 소프트웨어의 선정

개발에 사용되는 제품들의 성능과 라이선스, 사용 편의성 등에 대한 내용 파악

 

2. 개발을 위해 사용되는 소프트웨어의 종류와 특성

구현 도구 코드의 작성 및 편집, 디버깅(Eclipse, Visual Studio Code, Intellij, NetBeans)
테스트 도구 소프트웨어의 품질을 높이기 위해 테스트에 사용되는 소프트웨어 도구
코드의 테스트, 테스트에 대한 리프팅 및 분석 (xUnit, Spring Test)
형상관리 도구 개발자들이 작성한 소스 및 리소스 등 산출물에 대한 버전 관리를 위해 사용
(CVS, Subversion, Git(
빌드 도구 개발자가 작성한 소스에 대한 빌드 및 배포를 지원
프로젝트에서 사용되는 구성 요소들과 라이브러리들에 대한 의존성 관리를 지원(Ant, Maven, Grandle)

 

3. 하드웨어를 고려한 개발 소프트웨어의 선정

프로그램 개발에 사용되는 소프트웨어들은 OS에 따라 적합한 것을 선정

개발에 사용되는 시스템의 하드웨아 사양을 파악하여 해당 시스템 성능에 적합한 소프트웨어 선정

 

개발환경 구축

1. 개발 하드웨어 환경

(1) 클라이언트(Client) 환경 구성

서버 시스템에서 제공하는 서비스를 활용하기 위해 사용자와의 인터페이스(Interface)를 제공하는 하드웨어

PC(Client/Server 화면), 웹 브라우저 화면, 핸드폰(모바일 앱)

 

(2) 서버(Server) 환경 구성

웹 서버 클라이언트(웹 브라우저 화면)에서 요청하는 서비스의 속도를 향상시키기 위해 정적 파일(HTML, CSS, 이미지 등)들을 제공하는 웹 서버 애플리케이션이 설치되는 하드웨어
웹 애플리케이션
서버
동적 웹 서비스를 제공하기 위해 사용
Tomcat, Undertow, IIS 등 미들웨어인 WAS(Web application Server)와 서비스에 관련된 애플리케이션이 설치되는 하드웨어
데이터베이스 서버 MySql, Oracle, MS-SQL 등 데이터베이스가 설치디는 하드웨어
파일 서버 서비스 제공을 위해 파일을 저장하고, 공유하기 위한 파일 저장 하드웨어

 

2. 개발 소프트웨어 환경

(1) 시스템 소프트웨어

운영체제
(OS: Operation System)
하드웨어 운영을 위한 운영체제
(예) Windows, Linux, UNIX(HPUX, Solaris, AIX) 등
JVM(Java Virtual Machine) Java 관련 응용 프로그램을 기동하기 위한 인터피리터 환경
Web Server 정적 웹 서비스를 수행하는 미들웨어로서, 웹 브라우저 화면에서 요청하는 정적 파일을 제공
WAS
(Web Application Server)
웹 애플리케이션을 수행하는 미들웨어
웹 서버와 JSP/Servlet 애플리케이션 수행을 위한 엔진으로 구성
(예) Tomcat, Undertow, JEUS, Weblogic, Websphere 등
DBMS
(Database Management System)
데이터 저장과 관리를 위한 데이터베이스 소프트웨어
(예) Oracle, DB2, Sybase, SQL Server, MySQL 등

 

(2) 개발 소프트웨어

요구 사항 관리도구 고객의 요구 사항을 수집, 분석, 추적을 쉽게 할 수 있게 지원
(예) JFeature, JRequisite, OSRMT, Trello 등
설계/모델링 도구 설계 및 모델링을 지원하는 도구
(예) ArgoUML, DB Designer, StarUML 등
구현 도구 문제 해결 방법을 소프트웨어 언어를 통해 구현 및 개발을 지원하는 도구
(예) Eclipse, Intellij, Visual Studio 등
테스트 도구 구현 및 개발된 모듈들에 대하여 요구 사항에 적합하게 구현되어 있는지 테스트
(예) JUnit, CppUnit, JMeter SpringTest 등
형상관리 도구 산출물의 변경 사항을 버전별로 관리하여 목표 시스템의 품질 향상을 지원하는 도구
(예) Git, SVN 등

 

3. 형상 관리

1) 형상관리(SCM: Software Configuration Management)의 정의:

소프트웨어의 개발 과정에서 발생하는 산출물의 변경 사항을 버전 관리하기 위한 일련의 활동

(1) 소프트웨어 변경사항을 파악하고 제어하며, 적절히 변경되고 있는지에 대한 확인하여 해당 담당자에게 통보하는 작업

(2) 프로젝트 생명 주기의 전 단계에서 수행하는 활동이며, 유지 보수 단계에서도 수행되는 활동

(3) 형상관리를 함으로써 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정에서 발생하는 여러가지 문제점 발생 요인이 최소화되도록 보증하는 것이 목적

 

2) 형상관리 절차

(1) 형상 식별

형상관리 대상을 식별하여 이름과 관리 번호를 부여하고, 게층(Tree) 구조로 구분하여 수정 및 추적이 용이하도록 하는 작업으로베이스라인의 기준을 정하는 활동

 

(2) 변경 제어

식별된 형상항목의 변경 요구를 검토, 승인하여 적절히 통제함으로써 현재의 베이스라인에 잘 반영될 수 있도록 조정하는 작업

 

(3) 형상 상태 보고

베이스라인의 현재 상태 및 변경 항목들이 제대로 반영되는지 여부를 보고하는 절차

형상의 식별, 통제, 감사 작업의 결과를 기록 및 관리하고 보고서를 작성하는 작업

 

(4) 형상 감사

베이스라인의 무결성을 평가하기 위해 확인, 검증 과정을 통해 공식적으로 승인하는 작업

 

(5) 버전 관리

변경 전과 변경 후를 정확히 기록

 

베이스라인

=> 형상 항목이 하나의 완성된 산출물로써 책임있는 기관이나 관리주체에 의해 공식적으로 승인된 상태

 

(6) 변경 관리

변경으로 인한 성능 및 품질을 평가

 

(7) 형상 통제

식별된 형상 항목에 대한 변경 요구를 검토하여 현재의 기준선이 잘 반영될 수 있도록 조정

 

(8) 형상 기록

위의 절차에 따른 내용을 기록하고 보고서를 작성

 

2. 공통 모듈 구현

공통 모듈 구현

재사용(Reuse) : 목표 시스템의 개발 시간 및 비용 절감을 위하여 검증된 기능을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 작업

분류 설명
함수와 객체 재사용 클래스(Class)나 함수(Function) 단위로 구현한 소스코드를 재사용
컴포넌트 재사용 컴포넌트(Component) 단위로 재사용하며, 컴포넌트의 인터페이스를 통해 통신
애플리케이션 재사용 공통된 기능을 제공하도록 구현된 애플리케이션의 통신으로 기능을 공유하여 재사용

 

<공통 기능에 대한 모듈화>

 

 

<응집도>

응집도는 모듈 내부에서 구성 요소 간에 밀접한 관계를 맺고 있는 정도로 평가되며,

응집도가 높을수록 필요한 요소들로 구성되어 있고

낮을수록 관련이 적은 요소들로 구성되어 있음

 

1. 응집도의 유형

구분 설명
기능적 응집도
(Functional Cohesion)
모듈 내부의 모든 기능이 단일한 목적을 위해 수행
예) 원넓이 계산
순차적 응집도
(Sequential Cohesion)
한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우
예) 파일에서 데이터를 읽고, 데이터를 처리
통신적 응집도
(Communication
Cohesion)
동일한 자료를 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우
처리 순서는 상관없음
절차적 응집도
(Procedual Cohesion)
관련 없는 기능요소가 배열된 순서로 수행
요소들이 서로 관련이 없다는 것만 빼면 순차적 응집도와 유사함
시간적 응집도
(Temporal Cohesion)
특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우
예) 초기화 하는 동안 사용되는 코드들을 같이 모아 둔 경우, 예외사항 발생시
논리적 응집도
(Logical Cohesion)
유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈들에서 처리
예) 모든 마우스 및 키보드 입력 처리 루틴 그룹화
우연적 응집도
(Coincidental Cohesion)
모듈 내부의 각 구성 요소들이 연관이 없을 경우

 

2. 응집도와 품질

다양한 기준으로 모듈을 구성할 수 있으나 품질 측면에서 기능적 응집도가 가장 품질이 높고, 우연적 응집도가 가장 낮음

 

<결합도>

모듈과 모듈 간에 어느 정도 관련성이 있는지를 나타내며, 관련이 적을수록 모듈의 독립성이 높아 모듈간 영향이 적어지게 됨

 

1. 결합도의 유형

구분 설명
자료 결합도(Data Coupling) 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호 작용이 일어나는 경우
스탬프 결합도(Stamp Coupling) 모듈 간의 인터페이스로 배열이나 오브젝트, 스트럭처 등이 전달되는 경우
데이터 구조 결합도
제어 결합도(Control Coupling) 단순 처리할 대상인 값만 전달되는 게 아니라 어떻게 처리를 해야 하는 제어 요소가 전달되어 다른 모듈의 흐름을 제어
외부 결합도(External Coupling) 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜을 디바이스 인터페이스를 공유할 때 발생
공통 결합도(Common Coupliing) 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호 작용하는 경우
내용 결합도(Content Coupling) 다른 모듈 내부에서 있는 변수나 기능을 다른 모듈에서 사용하는 경우

 

2. 결합도와 품질

다양한 결합으로 모듈을 구성할 수 있으나

품질 측면에서 자료 결합이 가장 품질이 높고, 내용 결합이 가장 낮음

 

 

공통 모듈 구현하기

 

 

공통 모듈 테스트

1. 테스트 케이스의 이해

1) 테스트 케이스(Test Case)의 개념: 테스트 케이스란 요구 사항을 준수하는지 검증하기 위하여 테스트 조건, 입력값, 예상 출력값 및 수행한 결과등 테스트 조건을 명게한 것

 

2. 테스트 케이스의 구성 요소

항목 설명
식별자(Identifier) 항목 식별자, 일련번호
테스트 항목(Test Item) 테스트할 모듈 또는 기능
입력 명세(Inpit Specification) 입력값 또는 테스트 조건
출력 명세(Output Specification) 테스트 케이스 실행시 기대되는 출력값 결과
환경 설정(Environmental Needs) 테스트 수행 시 필요한 하드웨어나 소프트웨어 환경
특수 절차 요구 테스트 케이스 수행시 특별히 요구되는 절차
의존성 기술 테스트 케이스간의 의존성

 

3. 테스트 프로세스

테스트 수행과 관련된 활동들이 의도된 테스트 목적과 조건을 달성할 수 있도록 도와주는 역할을 함