Spooling으로 느린 주변장치와 CPU 작업을 분리하는 방법

Spooling의 디스크 기반 버퍼링 구조와 작업 큐, 스풀러 역할을 정리하고 Buffering과의 차이 및 운영 시 고려할 점을 설명합니다.

2026-08-14 · 최초 발행 2026-01-02

CPU와 주변장치 사이에 디스크 큐를 두는 이유

프린터처럼 처리 속도가 느린 주변장치에 CPU가 직접 맞춰 동작하면, 장치가 끝날 때까지 CPU가 대기하게 된다. Spooling은 보조기억장치인 디스크를 중간 저장소로 두고 이 대기 구간을 분리하는 기법이다.

SPOOL은 Simultaneous Peripheral Operations On-Line의 약자다. 입력 또는 출력 데이터를 먼저 디스크의 스풀 영역에 저장한 뒤, CPU는 디스크와 데이터를 주고받고, 주변장치는 준비된 작업을 자신의 속도로 처리한다. 여러 요청은 작업 큐에서 관리되므로 하나의 장치를 여러 사용자나 프로세스가 공유할 수 있다.

입력장치(키보드, 스캐너)디스크(Spool 영역)중앙처리장치(CPU)디스크(Spool 영역)출력장치(프린터, 플로터)고속 I/O저속 I/O

입력과 출력을 분리해 처리하는 흐름

입력 스풀링에서는 입력장치가 보낸 데이터를 스풀 디렉토리의 임시 파일에 저장한다. CPU는 필요할 때 디스크에서 해당 데이터를 읽으므로 느린 입력장치와 직접 묶이지 않는다. 입력이 끝나기 전에도 CPU 작업을 시작할 수 있어 배치 처리에 적합하다.

출력 스풀링은 CPU가 생성한 결과를 디스크의 스풀 파일에 기록하면서 시작된다. 스풀러 데몬이 작업 큐를 관리하다가 프린터가 준비되면 파일을 읽어 출력한다. CPU는 프린터 완료를 기다리지 않고 다음 작업으로 돌아갈 수 있으며, 여러 출력 요청을 큐에 쌓고 우선순위를 적용할 수도 있다.

스풀러는 파일의 생성과 삭제, 큐 유지, FIFO 또는 우선순위에 따른 순서 결정을 맡는다. 동시에 여러 프로세스가 접근하는 환경에서는 상호배제를 보장하고 데드락을 피해야 한다. 장치 상태를 확인하고 오류 처리와 재시도도 수행한다.

완료 삭제애플리케이션(인쇄 요청)스풀러(Spooler)스풀 파일생성디스크(Spool 디렉토리)작업관리우선순위정렬스풀러(출력 데몬)프린터준비 확인프린터출력

Buffering과 Spooling이 다루는 범위

Buffering은 장치 간 속도 차이를 완충하기 위해 RAM에 데이터를 짧게 저장하는 방식이다. 일반적으로 단일 작업의 데이터 흐름을 원활하게 만드는 데 초점이 있다.

Spooling은 디스크에 작업을 저장하고 큐를 관리한다. 더 긴 시간 동안 데이터를 보관할 수 있고, 여러 작업을 대기열에 넣어 장치를 공유하게 만든다는 점에서 Buffering과 구분된다.

항목 Buffering Spooling
저장 위치 RAM 디스크
저장 시간 짧음
용량 작음
작업 수 단일 다수 (큐)
주 목적 속도 조절 장치 공유, CPU 효율
사용 예 파일 I/O 프린터, 플로터

프린터·메일·배치 작업에서의 스풀 사용

Windows Print Spooler에서는 인쇄 명령을 받은 문서를 C:\Windows\System32\spool\PRINTERS에 스풀 파일로 저장한다. 애플리케이션은 즉시 종료할 수 있고, 문서는 백그라운드에서 프린터로 전송된다.

UNIX/Linux의 lpd(Line Printer Daemon)는 lpr 명령으로 받은 인쇄 요청을 /var/spool/lpd에 저장하고, lpd 데몬이 큐를 관리하며 순차적으로 인쇄한다. 이런 구조에서는 여러 사용자가 장치를 함께 쓰고, 작업의 우선순위를 설정하거나 취소·재시작할 수 있다.

메일 서버도 발신 또는 수신 대기 메일을 큐에 보관한다. SMTP 서버는 이 큐를 처리하며, 네트워크 장애가 발생했을 때 재전송하고 대량 메일을 순차 발송하며 서버 부하를 분산한다.

배치 작업에서는 디스크에 저장한 작업을 지정 시간이나 조건이 충족될 때 실행한다. UNIX/Linux의 cron, Windows의 Task Scheduler, 백업 작업과 보고서 생성이 이에 해당한다. CAD 도면처럼 대용량 파일을 플로터로 출력할 때도 스풀을 사용하면 설계자가 출력 완료를 기다리지 않고 다른 작업을 계속할 수 있다.

스풀 시스템을 구성하는 요소

스풀 디렉토리는 작업별 파일, 작업 정보와 우선순위를 담은 메타데이터 파일, 스풀러 명령을 위한 제어 파일을 보관한다. 대표적인 위치는 Windows의 C:\Windows\System32\spool\, Linux의 /var/spool/이다.

작업 큐는 단순한 FIFO 방식으로 공정성을 확보할 수 있다. 중요 작업이나 관리자 권한 작업을 먼저 처리해야 한다면 우선순위 큐를 사용한다. 여러 우선순위 레벨과 큐를 두는 다단계 큐는 더 복잡한 정책을 적용할 수 있다.

스풀러 데몬 또는 서비스는 시스템 부팅 시 자동으로 시작해 큐를 계속 감시하고, 장치가 준비되면 작업을 전송한다. 작업 수신과 저장, 큐 관리, 장치 상태 확인, 오류 처리와 로깅이 이 프로세스에 모인다.

운영에서 확인할 제약과 관리 항목

Spooling은 CPU가 느린 장치를 기다리지 않게 하고, 여러 사용자의 장치 공유와 우선순위 관리를 가능하게 한다. 작업 취소·수정, 재시도, 예약 실행도 지원하며, 전원 차단 뒤에도 스풀 파일을 보존해 재부팅 후 작업을 재개할 수 있다.

대신 스풀 파일이 쌓이면 디스크 공간이 부족해질 수 있다. 완료된 작업 파일을 정리하고 오래된 파일을 자동으로 제거해야 하며, 필요하면 스풀 전용 디스크 파티션으로 시스템 디스크와 분리한다.

디스크 I/O 오버헤드와 큐 대기 시간은 실시간 처리에 맞지 않을 수 있다. 압축을 적용할 때는 디스크 공간과 네트워크 전송 시간의 이점뿐 아니라 CPU 오버헤드도 고려한다. 다중 프린터 환경에서는 작업을 분산해 로드 밸런싱과 처리량 증가를 기대할 수 있다.

스풀 파일에 민감 정보가 저장될 수 있다는 점도 운영상 중요하다. 접근 제어가 필요하며, 삭제가 불완전하면 정보가 유출될 가능성이 있다.

스풀링운영체제입출력작업 큐스풀러