배치 프로그램 구현

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