배치 프로그램(batch program)은 사람의 손을 거치지 않고, 쌓인 데이터를 정한 때에 한꺼번에 처리하는 프로그램입니다. 잘 도는 배치는 대용량 데이터·자동화·견고성·안정성·성능을 갖추고, 크론탭 같은 배치 스케줄러가 정한 때에 깨웁니다.
서버 프로그램의 구조: MVC·DAO·DTO에서 본 서버 프로그램은 요청이 올 때마다 한 건씩 바로 답합니다. 하루치 주문 정산처럼 많은 데이터를 다루는 일까지 낮에 요청마다 처리하면, 손님의 주문 응답이 그만큼 늦어집니다. 그래서 이런 일은 쌓아 두었다가 사람이 적은 새벽에 몰아서 처리합니다. 아래 그림은 낮 동안 쌓인 주문 1,200건을 새벽 2시에 배치 하나가 처리하는 하루와, 그 시각을 적는 크론 식(cron expression)을 보입니다.
1한꺼번에, 사람 없이 — 배치 프로그램의 필수 요소
요청마다 한 건씩 바로 처리하는 것을 온라인 처리라 하고, 모아 두었다가 한꺼번에 처리하는 것을 일괄 처리, 곧 배치(batch)라 합니다. 배치 프로그램은 결과를 기다리는 사람이 없는 일을 정한 때에 혼자 처리합니다. 그래서 다섯 가지를 갖춰야 합니다.
| 필수 요소 | 갖출 것 | 그림의 정산 배치 |
|---|---|---|
| 대용량 데이터 | 많은 데이터를 읽고 계산하고 저장한다 | 하루치 1,200건 |
| 자동화 | 심각한 오류가 아니면 사람 없이 돈다 | 새벽 2시에 저절로 시작 |
| 견고성 | 잘못된 데이터가 섞여도 멈추지 않는다 | 잘못된 주문 1건을 건너뛰고 계속 |
| 안정성 | 오류가 나면 언제 어디서인지 기록하고 알린다 | 오류 1건을 기록에 남김 |
| 성능 | 다른 일을 방해하지 않고 정한 시간 안에 끝낸다 | 업무 시작 전에 끝 |
안정성은 자료에 따라 신뢰성이라고도 부릅니다. 견고성과 안정성이 헷갈리기 쉽습니다. 멈추지 않고 넘어가는 것이 견고성이고, 넘어간 것을 기록해 알리는 것이 안정성입니다.
2무엇이 깨우나 — 정기·이벤트·온디맨드 배치
배치는 무엇이 깨우는지로 갈립니다.
| 가르는 기준 | 유형 | 그림의 예 |
|---|---|---|
| 정한 때가 되면 | 정기 배치 | 날마다 새벽 2시 정산 |
| 정한 조건이 맞으면 | 이벤트 배치 | 쌓인 주문이 1,000건을 넘는 순간 |
| 사람이 요청하면 | 온디맨드 배치 | 관리자가 '지금 정산'을 누를 때 |
가장 흔한 것은 정기 배치이고, 데이터베이스 백업의 밤마다 뜨는 백업도 정기 배치입니다. 이벤트 배치는 자료에 따라 이벤트성 배치라고도 부릅니다. 온디맨드 배치는 사람이 깨우지만, 깨운 뒤에는 사람 없이 끝까지 돌아갑니다.
3누가 깨우나 — 배치 스케줄러와 크론 식
정한 때나 조건에 배치를 깨워 주는 프로그램을 배치 스케줄러(batch scheduler)라 합니다. 시험 자료는 셋을 듭니다.
| 이름 | 무엇인가 |
|---|---|
| 크론탭(crontab) | UNIX·Linux에 들어 있는 스케줄러. 작업 목록 한 줄에 크론 식과 명령을 적는다 |
| 쿼츠(Quartz) | Java 프로그램 안에 넣어 쓰는 작업 스케줄링 라이브러리 |
| 스프링 배치(Spring Batch) | 대용량 배치 프로그램을 짜는 틀을 주는 Java 프레임워크 |
Linux에서는 크론(cron)이 작업 목록인 크론탭을 읽어 정한 때에 명령을 돌립니다. 시험 자료는 이 스케줄러를 크론탭이라 부릅니다. 스프링 배치는 배치 프로그램을 짜는 틀이라, 시각을 재어 깨우는 일은 크론탭이나 쿼츠에 맡겨 함께 씁니다.
크론탭 한 줄은 크론 식 다섯 칸과 돌릴 명령으로 이루어집니다.
0 2 * * * /batch/settle.sh
칸마다 넣는 값은 이렇습니다.
| 칸 | 분 | 시 | 일 | 월 | 요일 |
|---|---|---|---|---|---|
| 값의 범위 | 0~59 | 0~23 | 1~31 | 1~12 | 0~6 |
| 위 줄 | 0 | 2 | * | * | * |
*는 그 칸의 모든 값이라 위 줄은 날마다 2시 0분에 돌아갑니다. 요일은 0이 일요일, 1이 월요일입니다. 쉼표는 목록(일 칸의 1,15는 1일과 15일), 하이픈은 범위(요일 칸의 1-5는 월요일부터 금요일)입니다. 크론 식은 자료에 따라 크론 표현식이라고도 부릅니다. 쿼츠의 크론 식은 맨 앞에 초 칸이 더 붙으니, 시험의 다섯 칸은 크론탭 꼴로 읽습니다.
예제
2026년 10월 15일(목) 밤 9시, 어느 서버의 크론탭에 세 줄이 있습니다. 줄마다 처음 도는 때를 먼저 구해 보세요.
0 2 * * * /batch/settle.sh
30 1 1 * * /batch/month.sh
0 9 * * 1-5 /batch/mail.sh
세 줄을 칸별로 읽으면 이렇습니다.
| 크론 식 | 읽는 법 | 처음 도는 때 |
|---|---|---|
0 2 * * * | 날마다 2시 0분 | 10월 16일(금) 2시 0분 |
30 1 1 * * | 매달 1일 1시 30분 | 11월 1일(일) 1시 30분 |
0 9 * * 1-5 | 월~금 9시 0분 | 10월 16일(금) 9시 0분 |
둘째 줄은 이번 달 1일이 지났으므로 다음 달 1일에 처음 돌아갑니다. 셋째 줄은 다음 날인 금요일이 1-5 안에 들어 그날 아침에 돌아갑니다.
시험 포인트
- 필기: 배치 프로그램은 쌓인 데이터를 사람 없이 정한 때에 한꺼번에 처리합니다. 필수 요소는 대용량 데이터·자동화·견고성·안정성·성능이고, 견고성(잘못된 데이터에도 멈추지 않음)과 안정성(오류를 기록하고 알림)을 바꿔 놓은 보기가 함정입니다. 유형은 정한 때에 도는 정기 배치, 조건이 맞을 때 도는 이벤트 배치, 사람이 요청할 때 도는 온디맨드 배치입니다. 배치 스케줄러로는 크론탭·쿼츠·스프링 배치를 들고, 크론 식은 분·시·일·월·요일 다섯 칸에 0이 일요일입니다.
- 실기: 정기 배치·이벤트 배치·온디맨드 배치, 크론탭(Crontab)·쿼츠(Quartz)·스프링 배치(Spring Batch)로 씁니다.
확인 문제
1. 어느 회사의 월급 계산 배치입니다. 필수 요소 가운데 견고성을 갖춘 모습을 고르세요.
- ① 계좌 번호가 빈 직원 한 명을 만나도 멈추지 않고 나머지 직원의 월급을 계산했다
- ② 계산하지 못한 직원의 사번과 시각을 기록 파일에 남기고 담당자에게 알렸다
- ③ 낮 업무 프로그램을 느리게 하지 않고 은행 마감 전에 계산을 끝냈다
- ④ 담당자가 출근하지 않았는데도 정한 날짜에 계산이 시작되었다
정답
①입니다. 잘못된 데이터가 섞여도 비정상으로 멈추지 않고 나머지를 처리하는 것이 견고성입니다.
- ② 오류를 기록해 알리는 것은 안정성입니다. 견고성은 멈추지 않는 것, 안정성은 그 일을 남기는 것입니다.
- ③ 다른 일을 방해하지 않고 정한 시간 안에 끝내는 것은 성능입니다.
- ④ 사람 없이 정한 때에 시작하는 것은 자동화입니다.
2. 다음 (가)~(다)는 어떤 유형의 배치인지 이름을 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) 매주 일요일 새벽 3시가 되면 지난주 판매 통계를 냅니다.
- (나) 창고의 재고가 10개 아래로 떨어지는 순간 발주서를 만듭니다.
- (다) 회계 담당자가 '지금 마감' 단추를 누르면 그때 결산을 시작합니다.
정답
받는 답: (가) 정기 배치 · (나) 이벤트 배치 또는 이벤트성 배치 · (다) 온디맨드 배치
(가)의 실마리는 '시각이 되면', (나)는 '재고가 떨어지는 순간', (다)는 '사람이 단추를 누르면'입니다.
- 틀리는 꼴 이벤트 배치 — (가)에: 미리 정한 조건이 맞는 순간에 돌아갑니다. (가)는 달력의 시각이 깨웁니다.
- 틀리는 꼴 정기 배치 — (나)에: 정한 때에 돌아갑니다. 재고가 언제 떨어질지는 미리 정할 수 없습니다.
- 틀리는 꼴 이벤트 배치 — (다)에: 조건이 저절로 깨웁니다. (다)는 사람이 직접 요청했습니다.
3. 다음 (가)~(다)에 맞는 이름을 한글 이름과 영문으로 함께 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) Linux 서버에 처음부터 들어 있습니다. 작업 목록 파일 한 줄에 다섯 칸 시각과 명령을 적어 둡니다.
- (나) Java 프로그램 안에 라이브러리로 넣어, 프로그램이 스스로 작업을 정한 때에 깨웁니다.
- (다) 많은 데이터를 한꺼번에 처리하는 프로그램을 짜는 틀을 주는 Java 프레임워크입니다. 그 자체로 시각을 재지 않아 다른 스케줄러가 깨워 줍니다.
정답
받는 답: (가) 크론탭(Crontab) 또는 크론(Cron) · (나) 쿼츠(Quartz) · (다) 스프링 배치(Spring Batch)
(가)의 실마리는 'Linux에 들어 있고 다섯 칸 시각을 적는다', (나)는 'Java 프로그램 안의 라이브러리가 스스로 깨운다', (다)는 '배치를 짜는 틀이고 시각은 남이 잰다'입니다.
- 같은 이름의 다른 꼴: (가) 크론 — 작업 목록인 크론탭을 읽어 명령을 돌리는 프로그램의 이름입니다. 함께 받습니다.
- 틀리는 꼴 스프링 배치 — (나)에: 배치 프로그램을 짜는 틀이고 시각을 재지 않습니다. (나)는 작업을 스스로 깨웁니다.
- 틀리는 꼴 쿼츠 — (다)에: 작업을 정한 때에 깨우는 쪽입니다. (다)는 깨움을 받는 배치 프로그램의 틀입니다.
4. (1) 매주 월요일 3시 30분에 돌 크론 식을 다섯 칸으로 쓰세요. (2) 0 6 1 * *는 언제 도는지 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
정답
받는 답: (1) 30 3 * * 1 · (2) 매달 1일 6시 0분
(1)은 분 30, 시 3, 일과 월은 모두(*), 요일 1(월요일)입니다. (2)는 분 0, 시 6, 일 1이고 월과 요일이 *라 달마다 1일에 돌아갑니다.
- 틀리는 꼴
3 30 * * 1— (1)에: 칸 차례는 분이 먼저입니다. 시 칸은 0~23이라 30이 들어갈 수 없습니다. - 틀리는 꼴
30 3 * * 0— (1)에: 0은 일요일입니다. 월요일은 1입니다. - 틀리는 꼴 날마다 6시 0분 — (2)에: 셋째 칸(일)이 1이라 매달 1일에만 돌아갑니다.