프린터가 오프라인일 때 연결과 인쇄 대기열 확인하기
프린터가 오프라인이라고 나올 때 인쇄 버튼을 계속 누르면 같은 문서가 여러 번 출력될 수 있습니다. 프린터 전원·연결을 확인하고 Windows에서 정확한 프린터의 대기열을 먼저 열어 보세요.
남은 작업과 이미 나온 종이를 따로 확인합니다. 출력됐는지 모르거나 다른 사람의 작업이 있으면 다시 인쇄하거나 대기열을 지우지 않습니다. 이 글에서는 문서를 보존한 뒤 연결·작업 상태를 확인하고 다음 조치를 고르는 순서를 설명합니다.
먼저 인쇄 버튼을 누르지 않고 대기열 한 곳 읽기
- 편집 중인 문서를 저장하고 인쇄 창에서 대상 프린터 이름·쪽 범위·매수를 적습니다. 이미 나온 종이가 있는지 모르면 새 인쇄를 보내지 않습니다. 문서명·계정과 출력물의 내용에 개인 정보가 있을 수 있으므로 화면이나 종이를 공개하지 않습니다.
- Windows 11의 설정 → Bluetooth 및 장치 → 프린터 및 스캐너에서 그 이름의 프린터를 선택하고 인쇄 대기열을 엽니다. Windows 10은 설정 → 장치 → 프린터 및 스캐너입니다. 대상 이름부터 대조합니다.
- ‘장치 전원 / 연결 방식 / Windows 상태 / 대기 작업 수·소유자 / 실제 출력 여부’를 메모합니다. 공유 작업의 소유자나 출력 여부가 불명확하면 취소·재개·재인쇄를 보류합니다.
기대 결과는 선택한 프린터의 대기 작업 목록 또는 ‘현재 이 대기열에 작업 없음’입니다. 설명용 입력 ‘대기열 0개 / 출력 여부 모름’은 ‘재인쇄 보류’로 기록합니다. 빈 대기열이 출력 성공을 증명하지 않습니다.
이번 과제는 읽고 기록하면 끝납니다. 변경하지 않았다면 대기열 창을 닫으면 됩니다. 이름이 다르거나 접근이 제한되면 멈추고 올바른 대상을 확인합니다. 회사 관리 정책을 모르면 담당자에게 확인하고 다른 사람의 작업은 그대로 둡니다. 문제 해결사·작업 취소·전체 재개·시험 출력은 뒤에서 조건을 확인한 뒤 별도로 검토합니다.
프린터에 보내기 전에 문서부터 보존하기
작업 중인 파일을 저장하고, 다시 열 수 있는 저장본인지 확인합니다. 인쇄 창의 대상 프린터 이름, 쪽 범위, 매수도 별도로 적습니다. 저장된 PDF가 있더라도 편집 원본과 같은 자료인지 확인하세요. 회사 프린터와 공유 대기열이면 다른 사람의 작업을 취소하지 않습니다.
인쇄 버튼을 여러 번 누르지 말고 지금 남아 있는 작업부터 읽습니다. 문서명·제출 시각·소유자를 알 수 있는 범위에서 기록하고, 공개 게시판에는 실제 문서명과 계정 이름을 가립니다. 이미 나온 종이가 있거나 출력 여부를 모르면 재인쇄를 보류합니다. 중복 출력을 막기 위한 이 글의 보존 기준이며 Windows가 자동으로 중복을 찾아 준다는 설명은 아닙니다.

실제 장치와 Windows 표시를 별도 칸에 적기
장치의 전원 표시와 오류 표시를 직접 읽고 연결 방식을 USB 직결, Wi-Fi, 공유 프린터로 구분합니다. USB라면 PC와 프린터 양끝의 케이블을 확인합니다. Wi-Fi라면 프린터 설명서의 연결 상태와 PC가 사용하는 네트워크를 확인합니다. 공유 프린터는 연결된 다른 PC나 조직의 인쇄 서버가 경로에 포함되므로 집의 Wi-Fi 직결 절차를 그대로 적용하지 않습니다. Microsoft 연결 점검 안내
전원 꺼짐·연결 미확인과 Windows의 ‘오프라인’을 따로 적습니다. 전원이 켜졌다는 관찰만으로 PC 연결을 확인했다고 표시하지 않습니다. 네트워크가 같아 보여도 인쇄할 수 있다는 결론은 아직 이릅니다. 공유 경로, 권한 또는 조직 정책을 모르겠다면 프린터 담당자에게 현재 상태를 전달하고 설정을 바꾸지 않습니다.
내 프린터의 대기열을 정확히 열기
Windows 11에서는 설정 → Bluetooth 및 장치 → 프린터 및 스캐너에서 대상 프린터를 선택한 뒤 인쇄 대기열 열기를 선택합니다. Windows 10에서는 설정 → 장치 → 프린터 및 스캐너에서 프린터를 선택하고 대기열 열기로 들어갑니다. 이름이 비슷한 프린터가 여러 개면 창에 표시된 대상 이름부터 대조합니다. Microsoft 대기열 보기
목록이 비어 있다는 것은 지금 보는 대기열에 대기 작업이 없다는 뜻입니다. 종이가 나왔다는 증거는 아닙니다. 반대로 작업이 두 개라고 반드시 장치가 두 번 고장 난 것도 아닙니다. 다음 네 칸을 섞지 마세요.
| 확인 칸 | 읽을 내용 | 아직 단정할 수 없는 것 |
|---|---|---|
| 실제 장치 | 전원·장치 오류·연결 방식 | Windows와 통신 성공 |
| Windows 상태 | 대상 이름·오프라인/준비 등 현재 문구 | 오프라인의 확정 원인 |
| 대기 작업 | 문서·소유자·제출 시각·개수 | 실제 출력 완료 여부 |
| 보존 조건 | 원본 저장·이미 나온 종이·취소 대상 | 재인쇄해도 중복이 없음 |
오프라인 상태와 한 작업 취소를 구별하기
Windows 11의 현재 공식 오프라인 안내는 도움말 보기(Get Help)의 프린터 문제 해결사를 제시합니다. 이 문제 해결사는 자동 진단과 수정까지 시도할 수 있어 단순 조회가 아닙니다. 이 글의 전원·상태·대기열 기록을 마치는 데 필수로 실행할 필요는 없습니다. 실행 여부는 기록 뒤 별도로 판단합니다. Microsoft 오프라인 안내
실행을 선택하기 전 대상 프린터, 대기 작업·소유자, 실제 출력 여부, 일시 중지·오프라인 등 확인 가능한 원래 설정과 조직의 허용 범위를 적습니다. 자동 진단이 시작되면 안내를 읽는 동안에도 수정이 시도될 수 있으므로, 화면에 보일 때마다 승인 버튼이 있을 것이라고 가정하지 않습니다. 회사 관리 PC·공유 프린터라면 담당자가 허용한 절차를 확인하고, 변경 범위를 알 수 없거나 권한·정책 확인이 필요하면 실행을 보류합니다. 삭제·서비스 재설정·장치 제거를 요구하는 화면이 나오면 이 글만 보고 진행하지 않습니다. 지원에 보내는 기록·화면에는 문서 내용, 실제 문서명, 계정 이름과 개인 정보가 노출되지 않도록 가리고 필요한 범위만 전달합니다.
진단을 이미 시작해 어떤 변경이 있었는지 확인되지 않는다면 원래 상태로 돌아왔다고 기록하지 않습니다. 바뀐 항목과 작업의 현재 상태를 공식 지원이나 프린터 담당자에게 확인한 뒤, 확인된 설정만 변경 전 기록에 맞춰 복원합니다. 삭제·출력된 작업에는 설정 복원만으로 되돌릴 수 없는 결과가 있을 수 있습니다.
Windows 10의 해당 문서에는 대기열의 Printer 메뉴에서 Pause Printing과 Use Printer Offline 선택을 해제하는 경로가 있습니다. 해제는 대상 프린터의 대기열 전체가 다시 진행하게 만들 수 있어, 이미 남아 있는 내 작업과 타인 작업이 출력될 수 있습니다. 먼저 대상 프린터·모든 대기 작업의 소유자·이미 나온 종이·미확인 출력과 전체 작업을 재개할 의도를 확인합니다. 공유 프린터나 소유자·출력 여부가 불명확한 작업은 담당자 확인 전 해제를 보류합니다. 의도적으로 중지한 이유가 있거나 남은 작업을 지금 출력하면 안 되는 경우에도 해제하지 않습니다.
Microsoft의 SetPrinter 설명은 프린터 일시 중지가 현재 출력 중인 작업을 제외한 모든 작업의 예약을 중지하며, 재개 후 다시 예약될 수 있음을 설명합니다. 이는 개별 문서 취소와 프린터 전체 재개를 구분하는 근거입니다. 이 글은 해당 API를 호출하지 않습니다. Microsoft 프린터 일시 중지·재개 범위
재개 조건을 확인한 경우에만 원래 선택 상태를 적고 필요한 항목 하나를 바꾼 뒤, 새 재출력이나 시험 페이지 요청 없이 대기열과 실제 나온 종이를 다시 관찰합니다. 기존 작업이 진행되는지·새 종이가 나오는지·오류가 남는지를 확인한 다음에 다른 조치를 판단합니다. 이를 Windows 11의 모든 대기열 창에 똑같이 있는 메뉴로 설명하지 않습니다. 기본 프린터는 이 점검을 위해 바꾸지 않아도 됩니다.
연결을 확인했는데 내 시험 작업 하나가 계속 남아 있다면, 저장본과 취소 대상을 먼저 확인합니다. 현재 Microsoft 안내의 개별 동작은 대기열에서 작업을 오른쪽 클릭해 Cancel을 선택하는 것입니다. 내 작업 하나만 구별할 수 있고 취소가 필요한 경우에만 사용하고, 사라진 것을 확인하기 전에는 다시 보내지 않습니다. 취소한 인쇄 작업에 일반적인 되돌리기 버튼이 있다고 가정하지 않습니다. 다시 인쇄하려면 저장본, 쪽 범위와 이미 나온 종이를 대조해야 합니다. Microsoft 멈춘 작업 안내
이 글은 대기열 전체 취소, spool 폴더 삭제, 서비스 재설정, 프린터 제거·재설치를 기본 해법으로 삼지 않습니다. 취소 대상의 소유자가 불명확하거나 복구할 원본이 없으면 취소 단계에서 멈춥니다.
연결 확인 뒤 한 번만 비교할 시험 출력
대기열이 비고 프린터 사용이 가능한 때에만 시험합니다. Windows 11의 프린터 및 스캐너 → 대상 프린터 → 프린터 속성 → 일반 → 테스트 페이지 인쇄 경로를 쓸 수 있습니다. Windows 10은 대상 프린터 → 관리 → 프린터 속성 → 일반 경로입니다. 테스트 페이지도 실제 종이와 잉크를 사용하는 인쇄 요청입니다. 다른 사람이 사용하는 공유 프린터에는 담당자와 먼저 확인합니다. Microsoft 시험 페이지와 앱별 인쇄 구분
테스트 페이지 대신 저장한 한 페이지 가상 문서를 한 부만 보낼 수도 있습니다. 문구는 ‘인쇄 연결 확인용 가상 문서’처럼 실제 업무 자료와 구분합니다. 대상 이름·용지·쪽 범위를 기록하고 종이가 나온 시각과 대기열 결과를 따로 확인합니다. 테스트 페이지가 나오는데 업무 앱의 파일만 실패하면 연결 점검과 앱·파일 인쇄 설정 점검을 분리합니다. 한 번 나온 페이지는 이후 모든 인쇄가 정상이라는 보장이 아닙니다.
실패를 전달하고 원래 상태로 돌아갈 기록
아래 빈 양식을 복사해 자신의 관찰을 적습니다. 취소·진단 실행 등 실제 조치와 원래 선택 상태를 별도 기록하면, 상태가 달라져도 무엇을 보존해야 하는지 설명할 수 있습니다.
확인 시각 / Windows 버전·에디션:
대상 프린터 / 연결 경로 / 전원·장치 오류:
Windows 표시 / 대기 작업·소유자:
저장본을 다시 연 결과 / 쪽 범위·매수:
이미 나온 종이 / 출력 여부 미확인 사항:
바꾼 항목과 원래 값 / 취소한 내 작업:
다시 확인한 대기열 / 시험 종이 / 남은 오류:
원복한 선택 항목 / 원본에서 재인쇄할 조건 / 지원 담당자:
문제 해결을 위해 바꾼 일시 중지·오프라인 선택이 있었다면 변경 전 기록과 운영 의도를 대조합니다. 재개 후 기존 작업이 이미 출력됐다면 다시 선택해도 나온 종이와 인쇄가 되돌려지지 않습니다. Microsoft 설명상 일시 중지도 이미 출력 중인 한 작업을 즉시 중단한다고 보장하지 않습니다. 잘못 재개한 경우 새 인쇄 요청을 더 보내지 말고 실제 출력과 남은 작업을 확인해 담당자에게 알립니다. 의도적으로 중지해 두었던 선택을 복원할 필요가 있다면 대상과 담당자의 운영 의도를 확인해 해당 항목만 복원하고 결과를 관찰합니다. 취소한 작업은 설정 원복만으로 되살아나지 않으므로 저장본에서 필요한 분량만 다시 요청해야 합니다. 재인쇄 후보 판정만 보고 취소나 출력을 수행한 것으로 기록하지 않습니다.
인쇄 범위의 숫자가 헷갈리면 매수와 쪽 범위를 따로 읽는 실습을 참고할 수 있습니다. 그 글은 문장 검산이고 이 글은 실제 장치·대기열의 관찰과 작업 보존을 결정하는 순서입니다.
OS 지원 조건과 실제 검증 범위
설정 → 시스템 → 정보에서 실제 버전·에디션을 확인합니다. 메뉴와 제공 항목은 Windows 버전·표시 언어·드라이버·조직 관리에 따라 달라질 수 있습니다. Microsoft 장치 정보 확인
Windows 10 일반 22H2 지원은 2025-10-14에 종료됐습니다. ESU 등록 기기의 보안 업데이트와 LTSC 에디션의 수명주기는 별도 조건이며, 이 문서에 Windows 10 메뉴가 있다는 이유로 일반 지원이 계속된다고 해석하지 않습니다. Windows 11도 버전과 Home/Pro·Enterprise/Education의 지원 열을 구분해 확인합니다. Microsoft 지원 버전 표, ESU 공식 안내
합성 코드 검증 시각은 2026-10-04T04:39:38+00:00입니다. Linux의 Python 3.12.14에서 네 기대 판정, CLI 출력, 중복 번호 거부, 보존 사본 복구와 보류 조건을 포함한 총 20개 검사를 현재 다시 실행해 통과했습니다. 입력 파일 바이트는 실행 전후 같았습니다. 검증한 것은 이 글에서 정한 가상 기록 규칙입니다. 실제 Windows 메뉴, 출력, 대기열 취소·재개·원복, 자동 문제 해결사 또는 수리 성공은 직접 검증하지 않았습니다.
선택 부록 가상 입력을 코드로 검산하기
첫 점검과 빈 기록표 작성은 Python 없이 할 수 있습니다. 아래 코드는 합성 기록을 분류할 뿐 프린터 상태를 조회하거나 설정을 변경하지 않습니다. Python이 이미 설치되어 있고 기본 실행 방법을 아는 경우에만 선택해서 실행하세요. 설치된 실행 이름은 python --version 또는 py --version 등으로 확인합니다. 실행 이름을 찾지 못하면 표를 수동 대조하면 되며 새 설치·PATH·보안 설정 변경은 필요하지 않습니다.
네 가상 상태로 재인쇄 보류 조건 검산하기
아래 A~D는 직접 만든 독립 가상 상태입니다. 실제 프린터, 작업 번호나 사용자 계정에서 가져온 기록이 아닙니다. 코드는 Windows 상태를 읽지도 바꾸지도 않습니다.
| 상태 | 전원·연결·Windows | 대기열과 저장본 | 기대 판정 |
|---|---|---|---|
| A | 꺼짐·미확인·오프라인 | 내 J1 남음, 저장됨 | 전원 확인, 재인쇄 보류 |
| B | 켜짐·Wi-Fi 확인·오프라인 | 내 J2와 타인 J3, 출력 여부 모름 | J3 보존, 재인쇄 보류 |
| C | 켜짐·USB 확인·준비 | 빈 대기열, 저장됨, 출력 없음 확인 | 한 부 재인쇄 검토 후보 |
| D | C와 같은 표시 | 빈 대기열, 저장본 없음 | 재인쇄 보류 |

C의 ‘검토 후보’는 인쇄를 자동 실행하라는 승인이 아닙니다. 이 예제에 적은 보존 조건이 충족됐다는 결과만 나타냅니다. 실제 대기열이 변하거나 종이가 뒤늦게 나오면 다시 관찰해야 합니다.
다음 입력을 빈 연습 폴더의 synthetic_input.json으로 저장합니다. self/other는 가상 소유 구분, paper의 none은 출력 없음 확인, unknown은 출력 여부 미확인입니다. saved와 requested에는 문자열 대신 JSON의 true/false를 씁니다.
[
{
"id": "A",
"power": "off",
"path": "usb",
"connection": "unknown",
"windows": "offline",
"queue": [
{
"id": "J1",
"owner": "self"
}
],
"target": {
"id": "J1",
"owner": "self",
"saved": true,
"paper": "none",
"requested": true
}
},
{
"id": "B",
"power": "on",
"path": "wifi",
"connection": "confirmed",
"windows": "offline",
"queue": [
{
"id": "J2",
"owner": "self"
},
{
"id": "J3",
"owner": "other"
}
],
"target": {
"id": "J2",
"owner": "self",
"saved": true,
"paper": "unknown",
"requested": true
}
},
{
"id": "C",
"power": "on",
"path": "usb",
"connection": "confirmed",
"windows": "ready",
"queue": [],
"target": {
"id": "J4",
"owner": "self",
"saved": true,
"paper": "none",
"requested": true
}
},
{
"id": "D",
"power": "on",
"path": "usb",
"connection": "confirmed",
"windows": "ready",
"queue": [],
"target": {
"id": "J5",
"owner": "self",
"saved": false,
"paper": "none",
"requested": true
}
}
]
같은 폴더의 analyze.py에 아래 전체 코드를 저장합니다. 표준 라이브러리만 사용하며 입력 JSON을 읽고 결과를 화면에 출력합니다. 프린터 API·외부 연결·취소 명령은 없습니다.
"""Read synthetic records only. Never controls Windows or a printer."""
import json
import sys
from pathlib import Path
def classify(rows):
if not isinstance(rows, list):
raise ValueError('records must be a list')
result, seen = [], set()
for r in rows:
if not isinstance(r, dict) or set(r) != {'id', 'power', 'path', 'connection', 'windows', 'queue', 'target'}:
raise ValueError('invalid record fields')
if not isinstance(r['id'], str) or not r['id'].strip() or r['id'] in seen:
raise ValueError('invalid or duplicate record id')
seen.add(r['id'])
for key, choices in [('power', {'on', 'off', 'unknown'}), ('path', {'usb', 'wifi', 'shared', 'unknown'}), ('connection', {'confirmed', 'not_confirmed', 'unknown'}), ('windows', {'ready', 'offline', 'unknown'})]:
if not isinstance(r[key], str) or r[key] not in choices:
raise ValueError('invalid ' + key)
if not isinstance(r['queue'], list):
raise ValueError('queue must be a list')
job_ids, preserve = set(), []
for job in r['queue']:
if not isinstance(job, dict) or set(job) != {'id', 'owner'}:
raise ValueError('invalid queue fields')
if not isinstance(job['id'], str) or not job['id'].strip():
raise ValueError('invalid queue id')
if job['id'] in job_ids:
raise ValueError('duplicate queue id')
job_ids.add(job['id'])
if job['owner'] not in ['self', 'other', 'unknown']:
raise ValueError('invalid queue owner')
if job['owner'] != 'self':
preserve.append(job['id'])
t = r['target']
if not isinstance(t, dict) or set(t) != {'id', 'owner', 'saved', 'paper', 'requested'}:
raise ValueError('invalid target fields')
if not isinstance(t['id'], str) or not t['id'].strip() or t['owner'] not in ['self', 'other', 'unknown']:
raise ValueError('invalid target identity')
if type(t['saved']) is not bool or type(t['requested']) is not bool or t['paper'] not in ['none', 'some', 'unknown']:
raise ValueError('invalid preservation values')
physical = 'check_power' if r['power'] != 'on' else 'check_connection'
if r['power'] == 'on' and r['connection'] == 'confirmed' and r['path'] != 'unknown':
physical = 'connection_recorded'
candidate = (physical == 'connection_recorded' and r['windows'] == 'ready' and not r['queue'] and t['owner'] == 'self' and t['saved'] and t['paper'] == 'none' and t['requested'])
result.append({'id': r['id'], 'physical': physical, 'windows': r['windows'], 'pending_jobs': len(r['queue']), 'preserve_jobs': preserve, 'reprint': 'consider_one_copy' if candidate else 'hold'})
return result
if __name__ == '__main__':
try:
if len(sys.argv) != 2:
raise ValueError('usage: python analyze.py INPUT.json')
print(json.dumps(classify(json.loads(Path(sys.argv[1]).read_text(encoding='utf-8'))), ensure_ascii=False, indent=2))
except (ValueError, OSError, TypeError) as exc:
print('INPUT_ERROR: ' + str(exc), file=sys.stderr)
sys.exit(1)
Python 3 환경에서 python analyze.py synthetic_input.json을 실행합니다. C만 reprint가 consider_one_copy이고 A·B·D는 hold여야 합니다. pending_jobs는 차례대로 1·2·0·0이며 B의 preserve_jobs는 J3 하나입니다. Python이 없으면 위 표를 수동으로 대조할 수 있으며 설치가 프린터 복구의 전제는 아닙니다.
잘못된 작업 번호를 복구해 다시 확인하기
합성 입력의 사본에서 A의 queue에 J1을 또 추가하면 duplicate queue id 오류로 중단해야 합니다. 중복 번호를 지운다고 실제 인쇄 작업을 취소하는 것이 아닙니다. 보존한 합성 원본에서 작업 목록을 다시 복사해 다른 이름 synthetic_recovered.json으로 저장하고 python analyze.py synthetic_recovered.json으로 원래 네 판정이 돌아오는지 확인합니다. 실제 기록에서는 어떤 작업을 잘못 옮겼는지 확인한 뒤 정정 이유를 남깁니다.
출력 여부를 unknown으로 바꾸거나 저장 여부를 false로 바꾸면 C도 hold입니다. ‘모름’을 ‘출력 없음’으로 고쳐 판정을 통과시키지 않습니다. 작업 소유자와 인쇄 대상이 바뀌면 이전 기록을 새 작업에 재사용하지 마세요.