2022. 9. 7. 16:07ㆍ정처기(실기)/서버 프로그램 구현
(1) 배치 프로그램의 개념
- 배치 프로그램은 사용자와의 상호 작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법이다.
(2) 배치 프로그램의 유형
- 배치 프로그램의 유형으로는 정기 배치, 이벤트 배치, 온디맨드 배치가 있다.
- 이벤트 배치 : 사전에 정의해 둔 조건 충족 시 자동으로 실행
- 온디맨드 배치 : 사용자의 명시적 요구가 있을 때마다 실행
- 정기 배치 : 정해진 시점에 정기적으로 실행
(3) 배치 스케줄러
- 배치 스케줄러는 일괄 처리를 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 도구이다.
1. 배치 스케줄러의 종류
종류 | 설명 |
스프링 배치 (Spring Batch) |
스프링 프레임워크의 DI, AOP, 서비스 추상화 등 스프링 프레임워크의 3대 요소를 모두 사용할 수 있는 대용량 처리를 제공하는 스케줄러 배치 애플리케이션 |
쿼츠 스케줄러 (Quartz Scheduler) |
스프링 프레임워크에 플러그인되어 수행하는 작업과 실행 스케줄을 정의하는 트리거를 분리하여 유연성을 제공하는 오픈 소스 기반 스케줄러 |
2. Cron 표현식
- 스케쥴러를 실행시키기 위해 작업이 실행되는 시간 및 주기 등을 설정하게 되는데 크론 표현식을 통해 배치 수행시간을 설정한다.
- 크론 표현식은 크게 리눅스/유닉스와 쿼츠로 구분된다.
▼ 리눅스/유닉스 크론 표현식
순서 | 필드 이름 | 허용 값 |
1 | 분(Minutes) | 0~59, 특수문자 |
2 | 시간(Hours) | 0~23, 특수문자 |
3 | 일(Day) | 1~31, 특수문자 |
4 | 월(Months) | 1~12, JAN~DEC, 특수문자 |
5 | 요일(Week) | 1~7, SUN-SAT, 특수문자 |
6 | 연도(Year)(생략 가능) | 1970~2099, 특수문자 |
▼ 쿼츠 크론 표현식
순서 | 필드 이름 | 허용 값 |
1 | 초(Seconds) | 0~59, 특수문자 |
2 | 분(Minutes) | 0~59, 특수문자 |
3 | 시간(Hours) | 0~23, 특수문자 |
4 | 일(Day) | 1~31, 특수문자 |
5 | 월(Months) | 1~12, JAN~DEC, 특수문자 |
6 | 요일(Week) | 1~7, SUN-SAT, 특수문자 |
7 | 연도(Year)(생략 가능) | 1970~2099, 특수문자 |
- 월은 0~11이 아닌 1~12로 표기
- 요일은 0:일요일/6:토요일이나, 7:일요일로 표기 가능
- 일관성을 위해 일요일은 0 또는 7 중 한 가지만 쓰는 것을 권장
▼Cron 표현식 특수문자 의미
기호 | 의미 |
* | 모든 수 |
? | 해당 항목을 미사용 |
- | 기간 설정 |
, | 특정 기간 설정 |
/ | 시작시간과 반복간격 설정 |
L | 마지막 기간에 동작 |
W | 가장 가까운 평일에 동작 |
# | 몇 번째 주, 요일 설정 |
▼Cron 표현식 특수문자 의미
- 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 15 * ? -> 매달 15일 10시 15분에 실행
- 0 11 11 1 1 ? -> 1월 1일 11시 11분마다 실행
(4) 배치 프로그램 설계
1. 배치 프로그램 관리대장 확인
- 애플리케이션 설계를 기반으로 한 프로그램 관리 대장을 읽고 구현해야 할 배치 프로그램 기능을 확인한다.
2. 배치 설계서 확인
- 프로그램 관리 대장의 ID와 일치하는 배치 설계서를 확인한다.
- 배치 설계서를 통해 작업 내역을 참고하여 배치 프로그램을 구현한다.
(5) 배치 프로그램 작성
1. DTO(Data Transfer Object), VO(Value Object) 구현
- 전달하려는 푸시 메시지 내용을 데이터베이스에 저장할 객체를 구현한다.
public class PushMessageVO {
//푸시 발송마스터
private String pushSeqCd; //푸시 순차코드
private String sendSubject; //발송 제목
private String sendContent; //발송 내용
private String sndrEmpNo; //발신자 사원번호
private String sndrNm; //발신자 이름
private String arrayEmpNo; //사원 리스트
private String getPushSeqCd() {
this.pushSeqCd = pushSeqCd;
}
public String getSendSubject() {
return sendSubject;
}
}
2. SQL문 구현
- 배치 프로그램 구현을 위해 Mybatis XML을 통해 SQL을 작성한다.
<mapper namespace="PushMessageDAO">
<select id="selectPushEmpList" resultType="PushMessageVO">
/*사번 테이블과 모바일 기기 테이블을 JOIN하여 필요한 정보 조회*/
SELECT /* pushMessageDAO.selectPushEmpList */
A.CMPY_CD AS cmpyCd, //회사코드
A.DEPT_CD AS deptCd, //부서코드
A.DEPT_NM_KOR AS deptNmKor, //부서명
A.EMP_NO AS empNo, //사원번호
A.EMP_NM_KOR AS empNmKor, //사원이름
A.DUTY_CD AS dutyCd //직책코드
FROM MOB_EMPTEST A,
MOB_DVCTEST B
WHERE A.CMPY_CD = B.CMPY_CD(+)
AND A.EMP_NO = B.EMP_NO(+)
</select>
3. 데이터 접근 객체 구현
- DAO를 통해 SQL을 구현한 XML id를 호출하여 조작을 수행한다.
4. 서비스 클래스 구현
- 푸시발송 대상조회를 위해 PushMessageDAO를 호출하는 PushService를 선언 및 구현한다.
5. 스케줄러 등록
- 작성한 배치 프로그램을 정기적으로 실행하는 쿼츠 스케줄러를 등록한다.
'정처기(실기) > 서버 프로그램 구현' 카테고리의 다른 글
서버 프로그램 구현 (0) | 2022.09.07 |
---|---|
서버 프로그램 구현 (0) | 2022.09.06 |
공통 모듈 구현 (0) | 2022.09.06 |
개발환경 구축 (0) | 2022.09.05 |