프로세스 간 통신과 재실행 가능한 배치 설계
IPC는 프로세스 사이의 정보 교환이고 동기화는 공유 자원 접근 순서를 조정하는 것이다. 배치 프로그램은 데이터를 일정한 단위로 모아 처리하며, 실행 시점·처리량·오류 복구와 중복 처리 방지의 기본 원칙을 함께 고려한다.
IPC는 프로세스 사이의 정보 교환이고 동기화는 공유 자원 접근 순서를 조정하는 것이다. 배치 프로그램은 데이터를 일정한 단위로 모아 처리하며, 실행 시점·처리량·오류 복구와 중복 처리 방지의 기본 원칙을 함께 고려한다.
그림으로 확인하기

프로세스 간 통신과 동기화
프로세스는 일반적으로 독립된 주소 공간을 갖는다. 다른 프로세스의 지역 변수를 자기 변수처럼 직접 읽을 수 없으므로 운영체제가 제공하는 통신 수단을 이용한다. 이러한 수단을 IPC(Inter-Process Communication)라고 한다.
| 수단 | 핵심 특징 | 구분할 점 |
|---|---|---|
| 파이프 | 프로세스 사이에서 데이터를 흐름 형태로 전달 | 전통적인 익명 파이프는 관련 프로세스의 단방향 통신에 사용 |
| FIFO·이름 있는 파이프 | 이름을 통해 접근할 수 있는 파이프 | 이름을 이용해 관련 없는 프로세스도 연결 가능 |
| 메시지 큐 | 메시지를 큐에 넣고 꺼내 전달 | 메시지 단위의 송수신 |
| 공유 메모리 | 여러 프로세스가 같은 메모리 영역을 공유 | 빠른 데이터 교환에 유리하지만 별도 동기화가 필요 |
| 소켓 | 통신 끝점을 이용한 데이터 교환 | 같은 컴퓨터와 네트워크상의 다른 컴퓨터 모두에서 사용 가능 |
| 세마포어 | 자원 이용 수나 실행 순서를 제어 | 대용량 데이터 전달이 아니라 동기화 수단 |
공유 메모리를 사용한다고 데이터가 자동으로 일관되게 유지되는 것은 아니다. 두 프로세스가 같은 값을 동시에 읽고 갱신하면 한쪽 변경이 사라질 수 있다. 데이터의 전달과 접근 순서의 제어를 구분해야 한다.
배치 처리의 의미
배치 처리(Batch Processing)는 처리할 데이터를 일정한 단위로 모아 연속적으로 처리하는 방식이다. 매일 밤 주문 집계, 월급 계산, 기간별 통계 생성 등이 예이다. 사용자의 요청마다 즉시 응답하는 대화형 처리나 정해진 시간 안에 반응해야 하는 실시간 처리와 구분한다.
배치는 반드시 야간에만 수행하는 것도, 반드시 수동으로 시작하는 것도 아니다. 정해진 시각, 파일 도착, 선행 작업 완료, 관리자의 요청 등을 계기로 시작할 수 있다.
| 요구 특성 | 의미 |
|---|---|
| 대용량 처리 | 많은 자료를 처리할 수 있어야 함 |
| 자동화 | 실행과 반복 처리를 수작업에 과도하게 의존하지 않음 |
| 견고성 | 잘못된 입력이나 오류를 적절히 처리함 |
| 안정성 | 다른 서비스나 시스템에 미치는 영향을 통제함 |
| 신뢰성 | 정확한 결과와 일관된 처리 상태를 유지함 |
| 성능 | 허용된 시간 안에 필요한 처리량을 확보함 |
배치 프로그램의 기본 구조
전형적인 흐름은 다음과 같다.
입력 확인 → 대상 데이터 읽기 → 검증·가공 → 결과 저장 → 처리 결과 기록
작업(Job)은 전체 업무 단위이고, 단계(Step)는 그 작업을 구성하는 처리 단계이다. 예를 들어 매출 집계 작업은 파일 읽기, 유효성 검사, 금액 합계, 결과 저장의 단계로 나눌 수 있다. 특정 제품에서의 클래스 이름이나 내부 저장 테이블을 알아야만 이 관계를 이해할 수 있는 것은 아니다.
작업을 너무 크게 묶으면 오류가 발생했을 때 다시 처리할 범위가 커질 수 있다. 반대로 지나치게 작게 나누면 실행·입출력 관리 부담이 커질 수 있다. 데이터 규모, 처리 시간, 복구 단위를 함께 고려한다.
스케줄러와 실행 시점
스케줄러는 언제 어떤 작업을 실행할지 결정한다. 실제 계산·자료 변환은 배치 프로그램이 담당한다. 스케줄러와 업무 처리 코드는 같은 기능이 아니다.
대표적으로 cron은 주기적인 작업 실행에 사용되고, at은 지정한 시각의 일회성 작업 실행에 사용된다. Quartz는 작업 실행 일정을 관리하는 데 쓰이며 Spring Batch는 배치 작업의 단계·처리·복구 등을 지원한다. 이름보다 실행 시점 관리와 배치 처리 지원의 차이를 구분한다.
일반적인 사용자 crontab의 다섯 시간 필드는 분 시 일 월 요일 순서이다. 명령이 0 2 * * * ... 뒤에 있으면 매일 02:00 실행을 뜻하고, */10 * * * * ...이면 매시 0·10·20·30·40·50분에 실행한다. 운영체제나 도구에 따라 추가 필드가 있는 형식도 있으므로 문제에서 제시한 형식을 우선한다.
오류 후 재처리와 중복 방지
재시도는 실패한 처리를 다시 시도하는 것이고, 재시작은 저장한 진행 상태를 바탕으로 중단한 작업을 이어 가는 것이다. 체크포인트는 복구를 위해 보관한 처리 진행 지점이다.
예를 들어 1,000건 중 600건까지 결과 저장과 완료 표시가 확정되고 601번째부터 실패했다면, 그 상태를 신뢰할 수 있다는 조건에서 601번째부터 다시 시작할 수 있다. 처리 위치만 기록하고 실제 결과가 저장되지 않았다면 자료가 누락될 수 있으므로 완료 표시와 실제 처리 결과가 일치해야 한다.
이미 반영한 주문을 다시 합산하면 총액이 증가한다. 따라서 재처리가 가능한 작업은 처리 여부나 업무 식별자를 확인하여 같은 자료가 중복 반영되지 않게 해야 한다. 같은 요청을 여러 번 적용해도 최종 효과가 한 번 적용한 것과 같은 성질을 멱등성이라고 한다.
형식 자체가 잘못된 입력은 같은 조건으로 재시도해도 계속 실패할 수 있다. 일시적인 장애와 입력 오류를 구분하고, 실패한 자료를 기록하거나 작업을 중단하는 등 정해진 정책을 적용한다. 무한 반복이 복구를 보장하지는 않는다.