4. 서버 프로그램 구현
개발환경 구축
개발환경 구축
개발환경 구축의 개념
- 구현될 시스템 요구사항의 명확한 이해가 필요
- 개발 도구와 서버의 선정이 이루어져야 하고, 개발에 사용되는 도구들의 사용 편의성과 성능, 라이선스를 확인
개발 도구의 분류
- 구현 도구 : 개발자의 코드 작성과 디버깅, 수정 등과 같은 작업을 지원하는 도구.
ex) Eclipse, intelliJ, Spring Tool Suite, NetBeans, Visual Studio - 테스트 도구 : 코드의 기능 검증과 전체의 품질을 높이기 위해 사용하는 도구
ex) xUnit, PMD, Findbugs, Cppcheck, Sonar - 형상관리 도구 : 개발자들이 작성한 코드와 리소스 등 산출물에 대한 버전 관리를 위한 도구
ex) CVS, Subversion, Git - 빌드 도구 : 작성한 코드의 빌드 및 배포를 수행. 각각의 구성요소와 모듈에 대한 의존성 관리를 지원
ex) Ant, Maven, Gradle
개발환경 구성요소
하드웨어 개발환경
서버 하드웨어 개발환경
웹 서버 : HTTP를 이용한 요청/응답 처리. 웹 상의 정적 콘텐츠를 처리. Apache 웹 서버, IIS 웹 서버, Google Web Server, Nginx 등 존재.
웹 애플리케이션 서버 : 동적 콘텐츠를 처리하기 위해 사용. Tomcat, Weblogic, Jeus, Resin 등 존재.
데이터베이스 서버 : 데이터의 수집, 저장을 위한 용도. DBMS로는 MySql, Oracle, MS-SQL, DB2 등 존재.
파일 서버 : 파일 저장 하드웨어로 물리 저장장치를 활용한 서버.클라이언트 하드웨어 개발환경
클라이언트 프로그램 : 설치를 통해 사용자와 커뮤니케이션하는 프로그램
웹 브라우저 : 웹 사이트
모바일 앱
모바일 웹
소프트웨어 개발환경
운영체제
미들웨어
Weblogic, Webspehere, Jeus, Tomcat.
자바 기반 환경에서 JVM을 설치하여 컨테이너로의 기능을 주로 이용.DBMS
형상 관리
- 소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리하기 위한 활동
- SW 생명 주기 동안 형상 관리를 통해 산출물을 체계적으로 관리하여 SW의 가시성, 추적성, 무결성 등의 품질 보증을 보장
- 형상 관리대상 파악, 베이스라인 지정, 버전관리, 접근제어 등의 메커니즘 제공
- 형상관리 절차: 형상 식별, 통제, 감사, 기록
개발환경 구축절차
- 통합 개발환경 설치 : Eclipse, IntelliJ, Android Studio.
- 형상 관리 도구 설치 : Git, SVN, CVS
- 빌드 도구 설치 : Ant, Maven, Gradle
공통 모듈 구현
공통 모듈 구현
공통 모듈 구현의 개념
모듈의 개념
- 모듈은 크게 독립된 하나의 소프트웨어 또는 하드웨어 단위를 지칭하는 용어
모듈의 특징
- 독립성
- 단독으로 컴파일, 재사용
- 결합도와 응집도에 의해 측정. 결합도는 약하게 응집도는 강하게, 모듈의 크기는 작게 만들어야 함
모듈화의 개념 및 기법
- 소프트웨어의 성능을 향상시키거나 복잡한 시스템의 수정, 재사용, 유지 관리 등이 용이하도록 기능 단위의 모듈로 분해하는 설계 및 구현 기법.
- 모듈화 기법
루틴 : 소프트웨어에서 특정 동작을 수행하는 일련의 코드
메인 루틴 : 프로그램의 주요한 부분.
서브 루틴 : 메인 루틴에 의해 필요할 때마다 호출되는 루틴
공통 모듈 구현의 개념
- 소프트웨어 개발에 있어 기능을 분할하고 추상화하여 성능을 향상시키고 유지보수를 효과적으로 하기위한 공통 컴포넌트 구현 기법
소프트웨어 모듈 응집도
응집도의 개념
- 모듈의 독립성을 나타내는 개념으로, 모듈 내부 구성요소 간 연관 정도.
응집도의 유형
- 우연적 응집도 : 구성요소가 연관이 없을 경우
- 논리적 응집도 : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소 정도
- 시간적 응집도 : 연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들
- 절차적 응집도 : 기능을 순차적으로 수행할 경우
- 통신적 응집도 : 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우
- 순자적 응집도 : 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우
- 기능적 응집도 : 기능이 단일한 목적을 위해 수행되는 경우
소프트웨어 모듈 결합도
결합도의 개념
모듈 내부가 아닌 외부의 모듈과의 연관도 또는 모듈 간의 상호의존성
결합도의 유형
- 내용 결합도 : 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용
- 공통 결합도 : 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호작용하는 경우
- 외부 결합도 : 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스와 공유할 경우
- 제어 결합도 : 단순 처리할 대상인 값만 전달되는 게 아니라 어떻게 처리를 해야 한다는 제어 요소가 전달됨
- 스탬프 결합도 : 모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달
- 자료 결합도 : 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호 작용이 일어나는 경우
공통 모듈 구현 대상
화면 모듈, 서비스 컴포넌트, 비즈니스 트랜잭션 컴포넌트
공통 모듈 구현 절차
DTO/VO → SQL → DAO → Service → Controller → 화면 구현
MVC 패턴 역할
- 모델 : 애플리케이션이 무엇을 할 것인지를 정의. 내부 비즈니스 로직 처리.
- 뷰 : 화면에 무엇인가를 보여주기 위한 역할
- 컨트롤러 : 모델이 어떻게 처리할지를 알려주는 역할
팬인 및 팬아웃 개념
- 소프트웨어의 구성요소인 모듈을 계층적으로 분석하기 위해서 팬인, 팬아웃 활용
팬인
- 어떤 모듈을 제어하는 모듈의 수. 모듈 자신을 기준으로 모듈에 들어오면 팬인
팬아웃
- 어떤 모듈에 의해 제어되는 모듈의 수. 모듈 자신을 기준으로 모듈에서 나가면 팬아웃
시스템 복잡도를 최적화하기 위해서는 팬인은 높게, 팬아웃은 낮게 설계해야 함.
공통 모듈 테스트
공통 모듈 테스트 개념
공통 모듈 테스트를 위해 IDE 도구를 활용하여 개별 공통 모듈에 대한 디버깅을 수행. 화이트 박스 기법 활용. 공통 모듈 구현 시 단위 테스트 도구 JUnit을 활용.
공통 모듈 테스트의 종류
- 화이트 박스 테스트 : 응용 프로그램의 내부 구조와 동작을 검사. 소스 코드를 보면서
- 메서드 기반 테스트
- 화면 기반 테스트
- 테스트 드라이버/ 테스트 스텁 : 테스트 드라이버는 하위 모듈은 있지만 상위 모듈은 없는 경우 사용. 테스트 스텁은 그 반대.
JUnit 주요 어노테이션
- @Test : 테스트 메서드 선언
- @Before : @Test 실행 전 실행되는 코드
- @After : @Test 실행 후 실행되는 코드
- @BeforeClass : @Test 메서드보다 먼저 딱 한 번 수행되어야 할 경우 지정
- @AfterClass : 단위 테스트 맨 마지막에 수행되어야 할 경우
- @ignore : 테스트에서 제외할 메서드
배치 프로그램 구현
배치 프로그램
배치 프로그램의 개념
사용자와의 상호작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법
배치 프로그램의 필수 요소
- 이벤트 배치 : 사전에 정의해 둔 조건 충족 시 자동으로 실행
- 온디맨드 배치 : 사용자의 명시적 요구가 있을 때마다 실행
- 정기 배치 : 정해진 시점에 정기적으로 실행
배치 스케줄러
일괄 처리를 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 도구
배치 프로그램의 유형
- 스프링 배치 : 스프링 프레임워크의 DI, AOP, 서비스 추상화 등 스프링 프레임워크의 3대 요소를 모두 사용할 수 있는 대용량 처리를 제공하는 스케줄러
- 쿼츠 스케줄러 : 스프링 프레임워크에 플러그인되어 수행하는 작업과 실행 스케줄을 정의하는 트리거를 분리하여 유연성을 제공하는 오픈 소스 기반 스케줄러
Cron 표현식
작업이 실행되는 시간 및 주기 등을 설정. Cron 표현식을 통해 배치 수행시간을 설정.
Cron 표현식 순서대로 초, 분, 시간, 일, 월, 요일, 연도(생략가능)이다.
Cron 표현식 특수문자 의미
- '*' : 모든 수
- ? : 해당 항목을 미사용
- '-' : 기간 설정
- . : 특정 기간 설정
- / : 시작시간과 반복간격 설정
- L : 마지막 기간에 동작
- W : 가장 가까운 평일에 동작
- '#' : 몇 번째 주, 요일 설정