Barcode Scanner Emulator
바코드 스캐너의 작동 원리
바코드 스캔은 즉시 일어나는 것처럼 보이지만, 물리적인 바코드와 애플리케이션에 들어오는 문자 사이에는 네 단계가 있습니다. 각 단계를 이해하면 스캐너 관련 버그를 진단하기가 훨씬 쉬워집니다.
바코드 스캔의 네 단계
1. 조명과 이미지 캡처
레이저 스캐너는 빔을 바코드 위로 훑으며 반사광의 세기를 측정합니다. 이미저 방식 스캐너(최신 핸드헬드와 휴대폰 카메라 스캐너의 대부분)는 작은 CMOS 센서로 바코드의 2D 이미지를 캡처합니다. 저해상도 카메라와 비슷한 방식입니다.
2. 디코딩
내장 펌웨어가 바의 너비(QR이나 Data Matrix는 2D 이미지)를 분석하고, 해당 심볼로지 알고리즘으로 원래의 디지털 데이터를 복원합니다. Code 128, Code 39, EAN-13, QR 등이 여기에 해당합니다. 이 과정은 전부 스캐너 안에서 끝나며, 어떤 데이터도 컴퓨터에 닿기 전에 완료됩니다.
3. 통신
디코딩된 데이터는 호스트 컴퓨터로 전송됩니다. 전송 경로는 보통 USB이며, 일반용과 산업용 스캐너의 대부분은 사용자 지정 USB 클래스가 아니라 USB HID 키보드 장치로 OS에 나타납니다. USB 시리얼(COM 포트 에뮬레이션)이나 Bluetooth HID 같은 다른 모드를 지원하는 스캐너도 있지만, 오늘날 판매되는 거의 모든 스캐너의 기본값은 키보드 에뮬레이션 모드입니다.
4. 애플리케이션 입력
스캐너가 키보드 역할을 하므로, 운영 체제는 현재 키보드 포커스를 가진 애플리케이션에 키 이벤트 순서로 데이터를 전달합니다. 애플리케이션은 스캐너와 직접 통신하지 않습니다. 누군가 매우 빠르게 입력한 것과 똑같은 키 입력을 받을 뿐입니다.
대부분의 스캐너가 키보드처럼 동작하는 이유
HID 키보드 모드는 거의 모든 상용 바코드 스캐너의 기본 구성입니다. 드라이버를 설치할 필요가 없기 때문입니다. USB 키보드를 지원하는 OS라면 스캐너도 바로 사용할 수 있습니다.
USB 키보드 에뮬레이션은 스캐너 펌웨어가 디코딩된 각 문자를 키보드가 그 문자에 대해 보낼 USB HID 키코드에 대응시킨 뒤, USB 인터럽트 엔드포인트로 표준 HID 키보드 리포트를 보내는 방식입니다.
테스트에서 중요한 이유: 애플리케이션 계층에서는 스캐너와 키보드를 구분할 수 없으므로, 포커스된 필드에 빠르게 입력하거나 키보드 이벤트를 검사하는 브라우저 도구를 사용하는 것만으로 스캐너가 일으키는 동작의 상당 부분을 테스트할 수 있습니다(아래 도구 참고).
ENTER와 TAB 접미사
대부분의 스캐너는 디코딩된 데이터 뒤에 접미사 키 입력을 붙이도록 설정되어 있습니다. 가장 흔한 것은 ENTER(캐리지 리턴, 0x0D)이고, 때로는 TAB(0x09)이나 사용자 지정 시퀀스입니다. 수신 애플리케이션이 타임아웃 없이 스캔 값이 어디서 끝나는지 알 수 있게 하기 위해서입니다. 접미사는 텍스트 필드에 입력한 뒤 Enter를 누르는 것과 같은 제출 신호 역할을 합니다.
스캐너 타이밍
스캐너는 바코드 데이터 전체를 1초보다 훨씬 짧게 보내며, 문자 사이 간격은 몇 밀리초인 경우가 많습니다. 사람이 같은 문자열을 치면 키 사이 간격은 보통 100–300ms 이상입니다. 이 시간 차이가 많은 POS와 재고 애플리케이션의 "스캐너 감지" 논리의 기초입니다. 비정상적으로 빠른 입력 묶음 바로 뒤에 접미사 키가 오는지 감시합니다.
애플리케이션에서 스캐너 입력과 수동 입력을 구분하려면 특별한 플래그를 찾지 말고 키 입력 사이 시간을 측정해야 합니다. 표준 브라우저 키보드 이벤트에는 입력 출처를 나타내는 정보가 없습니다.
직접 시험하기
바코드 입력 테스터로 실제 바코드를 스캔하고, 캡처된 값, 타이밍, 접미사 감지를 실시간으로 확인하세요. 키보드 웨지 동작을 더 자세히 보려면 HID 키보드 웨지 설명으로 이어가면 됩니다.