본문 바로가기
개발적인/기타 개발적인 부분

VIII. 서버 프로그램 구현

by klm hyeon woo 2022. 10. 8.

오늘의 용어

* MyVatis : 객체 지향 언어인 자바의 관계형 DB 프로그래밍을 좀 더 쉽게 할 수 있게 도와주는 개발 프레임워크

01. 개발환경 구축

개발 도구의 종류

- 빌드 도구 : 작성한 코드의 빌드 및 배포를 수행하는 도구 (Eclipse, IntelliJ ...)

- 구현 도구 : 개발자의 코드 작성과 디버깅, 수정 등과 같은 작업을 지원하는 도구 (xUnit, PMD ...)

- 테스트 도구 : 코드의 기능 검증과 전체의 품질을 높이기 위해 사용하는 도구 (CVS, Git ...)

- 버전 관리 도구 : 개발자들이 작성한 코드와 리소스 등 산출물에 대한 버전 관리를 위한 도구 (Ant, Maven ...)

 

서버 하드웨어 개발 환경

- 웹 서버 : 웹 상의 정적 콘텐츠(CSS, JS, Image) 등을 처리하며, HTTP를 이용한 요청 및 응답을 처리

- 웹 어플리케이션 서버 : 동적 콘텐츠(Servlet, JSP)를 처리하기 위해 사용

- 데이터베이스 서버 : 데이터의 수집, 저장을 위한 용도로 사용

- 파일 서버 : 파일 저장 하드웨어로 물리 저장장치를 활용한 서버

 

클라이언트 하드웨어 개발 환경

- 클라이언트 프로그램 : 설치를 통해 사용자와 커뮤니케이션하는 프로그램

- 웹 브라우저 : 웹 서비스의 형태로 서버에서 웹 어플리케이션을 응답 시 브라우저를 통해 사용자와 커뮤니케이션 (일반적인 형태의 웹 사이트)

- 모바일 앱 : 모바일 디바이스에 설치되어 활용되는 어플리케이션

- 모바일 웹 : 웹 브라우저와 동일한 형태로 모바일상 웹 브라우저를 통해 서비스를 제공

 

소프트웨어 개발환경

- 운영체제 : 서버의 하드웨어를 사용자 관점에서 편리하고 유용하게 사용하기 위한 소프트웨어 (프로젝트 성격에 따라 운영체제 변동)  

- 미들웨어 : 컴퓨터와 컴퓨터 간의 열결을 쉽고 안전하게 할 수 있도록 해주고 이에 대한 관리를 도와주는 소프트웨어

(자바에서는 JVM을 설치하여 컨테이너 (JSP와 서블릿을 실행시킬 수 있는)로의 기능을 주로 이용

- DBMS : 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고, 데이터 베이스를 관리해주는 소프트웨어

 

형상관리 

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

(보통 소프트웨어의 무결성을 지키기 위해서 (그리고 변경에 대한 추적을 하기 위해서) 형상관리를 실행한다)

 

* 형상관리통제위원회(Configuration Control Board) : 형상관리에 대한 주요 방침을 정하고 산출물을 검토하며, 단계별 의사결정을 수행하는 조직

 

형상관리 절차

(1) 형상 식별 : 형상 관리 대상을 정의 및 식별하는 활동

(2) 형상 통제 : 형상 항목의 버전 관리를 위한 형상통제위원회 운영

(3) 형상 감시 : 소프트웨어 베이스라인의 무결성 평가

(4) 형상 기록 : 소프트웨어 형상 및 변경관리에 대한 각종 수행결과를 기록

 

형상관리 도구 유형

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

- 클라이언트 및 서버 방식(CVS, SVN) : 중앙에 버전 관리 시스템을 항시 동작시키는 방식

- 분산 저장소 방식(Git) : 로컬 저장소와 원격 저장소로 분리되어 분산 저장하는 방식

 

소프트웨어 형상 관리 도구별 특징

- CVS(Concurrent Versions System) : 서버와 클라이언트로 구성되어있고, 다수의 인원이 동시에 범용적인 운영체제로 접근 가능한 형상 관리 도구

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

- RCS(Revision Control System) : CVS와 달리 소스 파일의 수정을 한 사람만으로 제한하여 다수의 사람이 파일의 수정을 동시에 할 수 없도록 파일 잠금 방식으로 형상을 관리하는 도구

- BitKeeper : SVN과 비슷한 중앙 통제 방식으로 대규모 프로젝트에서 빠른 속도를 내도록 개발된 형상 관리 도구

- Git : 속도에 중점을 둔 분산형 버전 관리 시스템 (대형 프로젝트에서 효과적이고 유용)

- Clear Case : 복수 서버, 복수 클라이언트 구조이며 서버가 부족할 때 필요한 서버를 하나씩 추가하여 확장을 할 수 있음

 

02. 공통 모듈 구현

모듈 

그 자체로 하나의 완전한 기능을 수행할 수 있는 독립된 실체

 

모듈의 특징 

각각의 모듈은 상대적으로 독립성을 가지고 있다.

단독으로 컴파일을 할 수 있으며, 재사용이 가능하다.

모듈의 독립성은 결합도와 응집도에 의해 측정되며, 독립성을 높이려면 응집도는 높고 결한도는 낮게, 모듈의 크기는 작게 만들어야한다.

 

모듈화

소프트웨어의 성능을 향상시키거나, 복잡한 시스템의 수정, 재사용, 유지 관리 등이 용이하도록 기능 단위의 모듈로 분해하는 설계 및 구현 기법

 

모듈화 기법

- 루틴 (Routine) : 특정 동작을 수행하는 일련의 코드로 기능을 가진 명령들의 모임

- 메인루틴 (Main Routine) : 프로그램의 주요한 부분이며, 전체의 개략적인 동작 절차를 표시하도록 만들어진 루틴

- 서브루틴 (Sub Routine) : 메인 루틴에 의해 필요할 때마다 호출되는 루틴

 

응집도 개념

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

하나의 모듈은 하나의 기능을 수행할 수록 응집도가 높다

 

응집도 유형

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

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

시간적 응집도 : 연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우의 응집도

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

통신적 응집도 : 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우의 응집도

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

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

 

우연적 응집도에서 기능적 응집도로 내려올 수록 응집도의 품질이 좋다.

 

결합도 개념

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

 

결합도 유형

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

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

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

제어 결합도 : 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호를 이용하여 통신하는 경우의 결합도

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

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

 

내용 결합도에서 자료 결합도로 내려올 수록 결합도가 높은 낮은 품질로 구성이 된다.

 

MVC 역할

M : 내부 비즈니스 로직을 처리하기 위한 역할, 어플리케이션이 무엇을 할 것인지를 정의

V : 화면에 무엇인가를 보여주기 위한 역할

C : 뷰에 명령을 보내어 화면 요청 결과를 전달

 

모듈을 계층적으로 분석하기 위해서 팬인(Fan-In)과 팬 아웃(Fan-Out)을 사용

 

팬인 : 어떤 모듈을 제어(호출)하는 모듈의 수

- 팬인이 높으면 재사용 측면에서 설계가 잘 되었지만, 단일 장애점 발생 가능

- 팬인이 높으면 관리 비용 및 테스트 비용 증가

팬 아웃 : 어떤 모듈에 의해 제어(호출)되는 모듈의 수

- 팬 아웃이 높을 경우 불필요한 모듈 호출 여부 검토 필요

- 팬 아웃이 높을 경우는 단순화 여부 검토 필요

 

시스템 복잡도를 최적화 하기 위해서는 팬인은 높게, 팬 아웃은 낮게 설계해야한다.

 

공통 모듈 테스트

공통 모듈 테스트를 위해 IDE 도구를 활용하여 개별 공통 모듈에 대한 디버깅을 수행

공통 모듈 테스트는 화이트 박스 기법을 활용한다.

 

공통 모듈 테스트 종류

- 화이트 박스 테스트 : 응용 프로그램의 내부 구조와 동작을 검사하는 소프트웨어 테스트 방식

- 메서드 기반 테스트 : 공통 모듈의 외부에 공개된 메서드 기반의 테스트

- 화면 기반 테스트 : 사용자용 화면이 있는 경우 각각 화면 단위로 단위 모듈을 개발 후에 화면에 직접 데이터를 입력하여 테스트를 수행

- 테스트 드라이버(Driver) / 테스트 스텁(Stub) 활용 : 기능을 테스트할 수 있는 화면 또는 하위 모듈이 구현되지 않은 경우 테스트 드라이버, 테스트 스텁을 통해 테스트를 수행

> 테스트 드라이버는 하위모듈은 있지만, 상위 모듈이 없는 경우

> 테스트 스텁은 상위 모듈은 있지만, 하위 모듈이 없는 경우

 

04. 배치 프로그램 구현

배치 프로그램(Batch Program)

사용자와의 상호 작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법

 

배치 프로그램의 유형

- 이벤트 배치 : 사전에 정의해 둔 조건 충족 시 자동으로 실행

- 온디맨드 배치 : 사용자의 명시적 요구가 있을 때마다 실행

- 정기 배치 : 정해진 시점(주로 야간)에 정기적으로 실행

 

배치 스케줄러(Scheduler)의 개념

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

 

배치 스케줄러의 종류

- 스프링 배치 (Spring Batch) : DI, AOP, 서비스 추상화 등 스프링 프레임워크의 3대 요소를 모두 사용할 수 있는 대용량 처리를 제공하는 스케쥴러 배치 어플리케이션

- 쿼츠 스케줄러 (Quartz Scheduler) : 스프링 프레임워크에 플러그인되어 수행하는 작업과 실행 스케줄을 정의하는 트리거를 분리하여 유연성을 제공하는 옾느 소스 기반 스케줄러

 

Cron 표현식

스케쥴러를 실행시키기 위해 작업이 실행되는 시간 및 주기 등을 설정하게 되는데 크론 표현식을 통해 배치 수행시간을 설정한다.

 

 

 

 

 

 

'개발적인 > 기타 개발적인 부분' 카테고리의 다른 글

X. 어플리케이션 테스트 관리  (0) 2022.10.10
IX. 소프트웨어 개발 보안 구축  (0) 2022.10.09
VII. SQL 응용  (0) 2022.10.06
V. 인터페이스  (0) 2022.10.03
IV. 통합 구현  (0) 2022.10.01

댓글