❐ 빌드 도구 : 작성한 코드의 빌드 및 배포를 수행
❐ 구현 도구 : 개발자의 코드 작성, 디버깅, 수정 등을 지원
❐ 테스트 도구 : 코드의 기능 검증과 전체 품질을 높이기 위해 사용
❐ 형상 관리 도구 : 개발자들이 작성한 코드와 리소스 등 산출물에 대한 버전 관리
통상적으로 WEB-WAS-DB의 3계층 구조를 실무에서 활용
웹 서버
- HTTP를 이용한 요청/응답 처리
- 웹 상의 정적 콘텐츠( CSS, Javascript, Image ) 처리
- 주로 Apache 웹 서버를 사용
웹 애플리케이션 서버 ( WAS )
- 사용자 요청 스레드를 처리, DB에 접속해 SQL 결괏값 반환
- 동적 콘텐츠( Servlet, JSP )를 처리하기 위해 사용
- 주로 Tomcat 등 사용
데이터베이스 서버
- 데이터의 수집, 저장을 위한 용도로 사용
- MySql, Oracle, MS-SQL, DB2 등 존재
파일 서버
- 파일 저장 하드웨어로 물리 저장장치를 활용 ( 대용량의 HDD, SSD )
소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리하기 위한 활동
초기에는 공유 폴더 방식을 많이 사용하였으나, 현재는 클라이언트/서버 방식과 분산 저장소 방식이 많이 활용
유형
공유 폴더 방식 ( RCS, SCCS ) : 매일 개발이 완료된 파일은 약속된 위치의 공유 폴더에 복사
클라이언트/서버 방식 ( CVS, SVN ) : 중앙에 버전 관리 시스템을 항시 동작
분산 저장소 방식 ( Git ) : 로컬 저장소와 원격 저장소로 분리되어 분산 저장
특징
CVS ( Concurrent Version System ) : 서버와 클라이언트로 구성, 다수의 인원이 동시에 접근 가능
SVN ( Subversion ) : 하나의 서버에서 소스를 쉽고 유용하게 관리할 수 있게 도와주는 도구
RCS ( Revision Control System ) : CVS와 달리 파일의 수정을 한 사람만으로 제한
Bitkeeper : SVN과 비슷한 중앙 통제 방식으로, 대규모 프로젝트에서 빠른 속도를 내도록 개발
Git : 속도에 중점을 둔 분산형 버전 관리 시스템, 대형 프로젝트에 효과적이고 유용
그 자체로 하나의 완전한 기능을 수행할 수 있는 독립된 실체로, 모듈 간 결합도는 줄이고 응집도는 높인 공통 모듈 구현을 권장
소프트웨어의 성능을 향상시키거나 복잡한 시스템의 수정, 재사용, 유지 관리 등이 용이하도록 기능 단위의 모듈로 분해하여 설계 및 구현하는 기법
루틴 ( Routine ) : 특정 동작을 수행하는 일련의 코드로 기능을 가진 명령들의 모임
메인 루틴 ( Main Routine ) : 프로그램의 주요한 부분이며, 전체의 개략적인 동작 절차를 표시
서브 루틴 ( Subroutine ) : 메인 루틴에 의해 필요할 때마다 호출되는 루틴
응집도 ( Cohesion ) : 모듈의 독립성을 나타내는 정도로, 모듈 내부 구성요소 간 연관 정도
💡 응집도는 높을수록 좋다!!
⭐ #우 논 시절 통 순기
우연적 ( Coincidental ) 응집도 : 내부 구성요소가 각 연관이 없을 경우
논리적 ( Logical ) 응집도 : 유사한 성격, 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리
시간적 ( Temporal ) 응집도 : 특정 시간에 처리되어야 하는 활동들
절차적 ( Procedural ) 응집도 : 다수의 관련 기능을 갖고, 순차적으로 수행
통신적 ( Communication ) 응집도 : 동일한 입력과 출력을 사용해 다른 기능을 수행하는 활동들이 모임
순차적 ( Sequential ) 응집도 : 모듈 내 한 활동으로부터 나온 출력값을 다른 활동이 사용
기능적 ( Functional ) 응집도 : 모듈 내부의 모든 기능이 단일한 목적을 위해 수행
결합도 ( Coupling ) : 모듈 내부가 아닌 외부의 모듈과의 연관도 또는 상호의존성
💡 결합도는 낮을수록 좋다!!
⭐ #내 공 외제 스자
내용 ( Content ) 결합도 : 다른 모듈 내부에 있는 변수나 기능을 사용
공통 ( Common ) 결합도 : 모듈 밖에 선언된 전역 변수를 참조하고 갱신하는 식으로 상호작용
외부 ( External ) 결합도 : 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜 등을 공유
제어 ( Control ) 결합도 : 처리 대상만 전달되는게 아닌 어떻게 처리 해야 한다는 제어 요소가 전달되는 경우
스탬프 ( Stamp ) 결합도 : 모듈 간의 인터페이스로 배열, 객체, 구조 등이 전달
자료 ( Data ) 결합도 : 모듈 간에 전달되는 파라미터만을 통해 모듈 간의 상호작용이 일어나는 경우
DTO/VO → SQL → DAO → Service → Controller → 화면 구현
💡 MVC 패턴 사용
DTO ( Data Transfer Object ) : 프로세스 사이에서 데이터를 전송하는 객체
VO ( Value Object ) : 간단한 엔티티를 의미하는 작은 객체 가변 클래스인 DTO와 달리 고정 클래스를 가지는 객체
DAO ( Data Access Object ) : 특정 타입의 DB에 추상 인터페이스를 제공
MVC 패턴
모듈을 계층적으로 분석하기 위해 팬인과 팬아웃을 활용
❐ 팬인 ( Fan-In ) : 자신을 기준으로 모듈에 들어오면 팬인 ( in )
❐ 팬아웃 ( Fan-Out ) : 자신을 기준으로 모듈에서 나가면 팬아웃 ( out )
💡 시스템 복잡도를 최적화하기 위해서는 팬인( Fan-In )은 높게 & 팬아웃( Fan-Out )은 낮게 설계한다.
- 업무 프로세스를 기반으로 개발언어와 도구를 이용해 서버에서 서비스 제공에 필요한 기능을 구현하는 활동
- 웹 서비스 기반의 회원정보를 조회하고 등록하는 서버 프로그램을 차례로 구현한다.
서버 프로그램은 프론트엔드 & 백엔드로 구분하여 구현한다.
1. DTO( Data Transfer Object ) , VO ( Value Object ) 구현
2. SQL문 구현
3. 데이터 접근 객체 ( DAO ; Data Access Object ) 구현
4. 서비스 ( Service ) 클래스 구현
5. 컨트롤러 ( Controller ) 클래스 구현
6. 입출력 검증 ( Validation ) 로직 구현
사용자와 상호작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리
이벤트 배치 : 사전에 정의해 둔 조건 충족 시 자동으로 실행
온디맨드 배치 : 사용자의 명시적 요구가 있을 때 실행
정기 배치 : 정해진 시점( 주로 야간 )에 정기적으로 실행
일괄 처리(Batch Processing)를 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 도구
스프링 배치 ( Spring Batch ) : 스프링 프레임워크의 3대 요소를 모두 사용 가능
쿼츠 스케줄러 ( Quartz Scheduler ) : 오픈소스 기반 스케줄러
스케쥴러를 실행시키기 위해 작업이 실행되는 배치 수행시간을 설정할 때 Cron 표현식이 사용된다.
#(초)분시일월요연
*
: 모든 수?
: 해당 항목을 미사용-
: 기간 설정,
: 특정 기간 설정/
: 시작시간과 반복간격 설정L
: 마지막 긱간에 동작W
: 가장 가까운 평일에 동작#
: 몇 번째 주, 요일 설정0 0 12 * * ?
: 매일 12시에 실행0 15 10 * * ?
: 매일 오전 10시 15분에 실행0 * 14 * * ?
: 오후 14시에서 15시 사이에 매 분마다 실행0 0/5 14.20 * * ?
: 매일 14시에 시작하여 14시 55분까지 5분마다 실행 & 매일 20시에 시작하여 20시 55분까지 5분마다 실행 0 0 20 ? * MON-FRI
: 매주 월요일과 금요일 사이 20시에 실행 ✔ 0 15 10 15 * ?
: 매달 15일 10시 15분에 실행0 15 10 L * ?
: 매달 마지 날 10시 15분에 실행0 15 10 ? * 6L 2020-2021
: 2020년부터 2021년 매달 마지막 토요일 10시 15분에 실행0 15 10 15 * ?
: 매달 15일 10시 15분에 실행0 11 11 1 1 ?
: 1월 1일 11시 11분마다 실행1. 배치 프로그램 관리대장 확인
애플리케이션 설계를 기반으로 한 프로그램 관리 대장을 읽고 구현해야 할 배치 프로그램 기능을 확인한다.
2. 배치 설계서 확인
프로그램 관리 대장의 ID와 일치하는 배치 설계서를 확인한다.
배치 설계서를 통해 작업 내역을 참고하여 배치 프로그램을 구현한다.
1. DTO( Data Transfer Object ) , VO ( Value Object ) 구현
2. SQL문 구현
배치 프로그램 구현을 위해 Mybatis XML을 통해 SQL 작성
3. 데이터 접근 객체 ( DAO ; Data Access Object ) 구현
4. 서비스 ( Service ) 클래스 구현
5. 스케쥴러 등록
작성한 배치 프로그램을 정기적으로 실행하는 쿼츠 스케쥴러 등록