HRDK KIOSK (CBT 출결관리)
CBT 시험장 수험생용 얼굴 인식 출결관리 및 좌석 안내 키오스크

사례 요약
고객사
한국산업인력공단
분야
공공, 국가 자격시험 운영
기간
2024년 12월 ~ 2025년 3월 (약 4개월)
고민
시험 시작 직전 짧은 시간에 감독관이 신분 확인과 출결, 좌석 안내를 모두 처리해야 했습니다
활용 기능
얼굴 인식 신분 확인, 출결 자동 기록, 좌석 안내, 예외 처리 흐름, 자동 업데이트·전원 제어
성과
출결 절차를 수험생 셀프 처리로 전환, 감독관은 예외 상황에만 대응
1. 고객사 소개
- 이름: 한국산업인력공단
- 분야: 국가 자격시험 시행 및 운영
- 대상 환경: CBT(컴퓨터 기반 시험) 시험장
- 과제: 시험 시작 직전에 몰리는 본인 확인·출결 절차를 정확도를 유지하면서 처리
당사는 시험장에 설치하는 데스크톱 키오스크 애플리케이션 개발을 담당했습니다.
2. 도입 배경
CBT(컴퓨터 기반 시험) 시험장에서 가장 붐비는 시간은 시험 시작 직전입니다. 수험생이 몰리는 짧은 시간 안에 신분증을 확인하고, 출결을 기록하고, 좌석을 안내해야 합니다. 감독관이 일일이 처리하면 줄이 길어지고, 확인이 급해지면 본인 확인의 정확도가 떨어집니다.
본인 확인은 공정성의 문제다
정확도가 떨어진다는 것은 단순한 불편이 아닙니다. 국가 자격시험에서 본인 확인은 시험의 공정성을 지탱하는 절차입니다. 대리 응시를 막지 못하면 그 시험의 결과 전체가 의심받습니다. 그런데 현장에서는 이 절차가 가장 바쁜 시간에, 가장 서둘러 진행됩니다. 절차의 중요도와 수행 환경이 어긋나 있는 셈입니다.
수험생이 직접 처리하게 하기
한국산업인력공단과 함께 2024년 12월부터 2025년 3월까지 이 과정을 키오스크로 옮겼습니다. 수험생이 직접 키오스크 앞에 서면 얼굴 인식으로 본인을 확인하고, 출결이 기록되고, 배정된 좌석이 화면에 표시됩니다. 감독관은 모든 수험생을 확인하는 대신 예외 상황만 처리합니다.
시험장 장비라는 점도 설계에 영향을 미쳤습니다. 시험장은 상시 운영되는 공간이 아닙니다. 시험이 있는 날에만 열리고, 담당자가 상주하지 않습니다. 장비를 켜고 끄는 일, 소프트웨어를 최신 상태로 유지하는 일, 문제가 생겼을 때 기록을 확인하는 일이 모두 원격에서 가능해야 했습니다.
한 줄 요약 자동화의 목표는 사람을 없애는 것이 아니라, 사람이 필요한 지점을 좁히는 것입니다.
3. 활용 기능
시험장에 설치하는 데스크톱 키오스크 애플리케이션을 구축했습니다. 인식 장비 제어부터 화면 흐름, 관리자 기능, 무인 운영 기능까지 하나의 애플리케이션에 담았습니다.
화면 흐름
수험생 동선은 한 방향으로 단순하게 설계했습니다. 대기 화면에서 시작해 안내를 거쳐 신분 확인으로 들어가고, 인식 결과를 확인한 뒤 성공 또는 실패 화면으로 갈라집니다. 성공하면 좌석 정보를 안내하고 대기 화면으로 돌아가며, 실패하면 재시도하거나 감독관 확인 절차로 넘어갑니다.
각 화면은 하나의 역할만 맡습니다. 신분 확인 화면에서는 인식만, 결과 화면에서는 확인만 합니다. 수험생은 시험 직전이라 긴장한 상태이고, 이때 선택지가 여러 개 있으면 오히려 오조작이 늘어납니다.
인식 장비 연동
얼굴 인식은 전용 장비가 담당합니다. 장비 제조사가 제공하는 라이브러리를 애플리케이션에서 직접 호출하는 방식으로 연동했습니다. 중간 계층을 두지 않기 때문에 장비가 제공하는 기능을 그대로 사용할 수 있고, 인식 속도에도 유리합니다.
장비 연동 코드는 화면 로직과 분리했습니다. 인식 장비는 시험장 환경이나 조달 상황에 따라 교체될 수 있으므로, 장비가 바뀌어도 화면 흐름을 다시 만들지 않도록 경계를 나눴습니다.
시험장 환경에 맞춘 설계
일반 키오스크와 시험장 키오스크는 운영 조건이 다릅니다. 카페 키오스크는 하루 종일 조금씩 쓰이지만, 시험장 키오스크는 특정 시간대에 수십 명이 연달아 사용합니다. 평소에는 아예 꺼져 있다가 시험 당일에만 동작합니다.
이런 사용 패턴에서는 평균 처리 속도보다 최악의 경우가 중요합니다. 한 명이 오래 걸리면 뒤가 전부 밀리기 때문입니다. 그래서 정상 흐름을 최대한 짧게 만들고, 시간이 걸리는 상황은 아예 다른 경로로 빼는 방향으로 설계했습니다. 실패 화면과 감독관 확인 경로를 따로 둔 이유입니다.
관리자 기능
관리자 화면은 비밀번호로 잠가 두었습니다. 일반 수험생이 실수로 진입할 수 없어야 하고, 동시에 시험장 담당자는 비밀번호만으로 바로 들어갈 수 있어야 합니다. 관리자 화면에서는 장비 설정과 상태를 확인합니다.
무인 운영 기능
장비의 전원 제어, 자동 업데이트, 로컬 설정 저장, 동작 로그 기록을 애플리케이션에 포함했습니다. 시험 일정에 맞춰 장비를 켜고 끄는 작업과 소프트웨어 갱신을 원격에서 처리하기 위한 기능입니다.
로그는 파일로 남깁니다. 시험장에서 문제가 발생하면 그 자리에서 재현할 수 없고, 나중에 확인할 수 있는 것은 기록뿐입니다. 어느 단계에서 멈췄는지, 인식이 실패했는지 통신이 실패했는지를 구분할 수 있도록 기록 항목을 정했습니다.
감독관의 역할 변화
키오스크를 도입한다고 감독관이 필요 없어지지는 않습니다. 달라지는 것은 하는 일입니다. 모든 수험생을 한 명씩 확인하던 일에서, 확인이 안 되는 사람만 응대하는 일로 바뀝니다.
이 변화를 전제로 화면을 설계했습니다. 인식에 실패하면 수험생이 스스로 해결하려고 붙잡고 있는 대신, 감독관을 부르는 경로로 빠르게 넘어가도록 했습니다. 자동화의 목표를 "사람을 없애는 것"이 아니라 "사람이 필요한 지점을 좁히는 것"으로 잡으면 설계가 달라집니다.
진행 방식
4개월 동안 인식 장비 연동을 먼저 확인하고, 그 위에 화면과 운영 기능을 얹는 순서로 진행했습니다. 하드웨어와 붙는 프로젝트는 연동 가능 여부가 일정의 가장 큰 변수입니다. 장비 라이브러리 호출이 안정적으로 동작하는 것을 확인한 뒤에야 나머지 일정을 확정할 수 있었습니다.
화면은 실제 시험장 운영 흐름에 맞춰 여러 차례 조정했습니다. 실제 수험생 동선은 현장을 아는 담당자의 의견에 크게 의존합니다.
화면 구성
화면은 열 개 남짓입니다. 대기, 안내, 신분 확인, 인식 진행, 결과 확인, 성공, 실패, 입력, 관리자 진입, 관리자 화면으로 나뉩니다. 여기에 공통 헤더와 모달, 키패드 컴포넌트를 두어 여러 화면에서 재사용합니다.
키패드를 별도 컴포넌트로 만든 이유는 터치 환경에서 문자 입력이 필요한 경우가 있기 때문입니다. 시험장 키오스크는 키보드 없이 운영되므로, 수동 확인 절차에서 정보를 입력해야 할 때 화면 키패드가 필요합니다.
화면 전환 깊이도 관리합니다. 현재 어느 단계에 있는지를 추적해, 뒤로 가기나 처음으로 돌아가기가 항상 예측 가능하게 동작하도록 했습니다. 단계가 얽히면 사용자는 자기가 어디 있는지 모르게 되고, 무인 장비에서는 그 상태를 풀어 줄 사람이 없습니다.
주요 기능
얼굴 인식 신분 확인
키오스크 카메라로 촬영한 얼굴을 등록 정보와 대조해 본인을 확인합니다. 인식 장비 제어는 네이티브 라이브러리를 직접 호출하는 방식으로 연결해, 장비 SDK의 기능을 그대로 사용합니다.
출결 기록
수험생이 스스로 처리한다는 점이 이 방식의 핵심입니다. 감독관이 한 명씩 확인하는 구조에서는 처리 속도가 감독관 수에 묶이지만, 키오스크는 장비 수만큼 동시에 처리됩니다. 시험장 규모가 커져도 장비를 늘려 대응할 수 있습니다.
본인 확인이 끝나면 출결이 자동으로 기록됩니다. 감독관이 명단을 대조하고 표시하는 과정이 사라지고, 기록은 즉시 시스템에 남습니다. 수기 명단에서 발생하던 누락과 중복 표기 문제도 함께 줄었습니다.
좌석 안내
시험장 좌석은 무작위로 배정되는 경우가 많아, 수험생이 미리 알 수 없습니다. 확인 절차의 마지막에 좌석을 안내하면 수험생은 한 번의 이동으로 자리를 찾아갑니다.
배정된 좌석 정보를 화면에 표시합니다. 수험생은 좌석을 확인하고 바로 이동하므로, 감독관에게 좌석을 묻는 일이 줄어듭니다. 시험 시작 직전의 문의 대부분이 좌석 확인이라는 점을 반영한 기능입니다.
예외 처리 흐름
인식 실패, 미등록, 정보 불일치 상황을 별도 화면으로 분리했습니다. 실패 화면에서 재시도하거나 수동 확인 절차로 넘어가도록 해, 한 명의 예외가 전체 줄을 멈추지 않게 했습니다. 예외 상황은 별도로 기록해 나중에 원인을 확인할 수 있습니다.
감독관 호출
인식이 반복해서 실패하면 감독관 호출로 이어집니다. 수험생이 혼자 해결하려다 시간을 보내지 않도록, 일정 횟수 이후에는 다음 단계를 먼저 제안합니다. 시험 직전이라는 상황에서는 스스로 해결하는 것보다 빨리 다음 절차로 넘어가는 편이 낫습니다.
단계별 안내 화면
대기 화면과 안내 화면을 나눠 배치했습니다. 수험생이 처음 보는 장비이므로, 어떤 순서로 진행되는지 먼저 알려 준 뒤 절차를 시작합니다. 안내를 건너뛰고 바로 인식으로 들어가는 경로도 함께 제공합니다.
관리자 모드
비밀번호로 진입하는 관리자 화면에서 장비 설정과 상태를 확인합니다. 시험장 담당자가 장비를 점검하거나 설정을 바꿀 때 사용합니다. 수험생 화면에서는 접근 경로가 드러나지 않습니다.
자동 업데이트
애플리케이션이 스스로 최신 버전을 확인하고 갱신합니다. 시험장마다 담당자가 수동으로 설치하는 방식은 버전이 갈라지기 쉽고, 갈라지면 어느 장비에서 문제가 생겼는지 추적하기 어려워집니다.
전원 제어
시험 일정에 맞춰 장비를 종료하거나 재시작하는 명령을 애플리케이션에서 실행합니다. 운영 인력이 상주하지 않는 환경에서 장비가 계속 켜져 있으면 관리 부담과 전력 소모가 함께 늘어납니다.
외부 시스템 연동
시험 정보와 수험생 명단은 외부 시스템에서 관리됩니다. 소켓 통신으로 연동해 필요한 정보를 주고받고, 출결 결과를 전달합니다. 장비가 독립적으로 판단하는 것이 아니라 기존 시험 운영 체계 안에서 동작하도록 맞췄습니다.
로컬 설정 저장
장비별 설정을 로컬에 보관합니다. 시험장 주소나 장비 번호처럼 한 번 정하면 잘 바뀌지 않는 값들이 여기에 들어갑니다. 시험장마다 다른 값이 필요하고, 네트워크가 불안정한 순간에도 설정을 읽을 수 있어야 하기 때문입니다.
동작 로그
주요 동작과 오류를 파일로 기록합니다. 기록은 장비 안에 쌓이며 필요할 때 확인합니다. 시험장은 문제 재현이 어려운 환경이라, 기록이 사실상 유일한 단서입니다. 기록 항목을 단계별로 구분해 남겼습니다.
수동 입력 절차
인식으로 확인되지 않는 수험생을 위해 정보를 직접 입력하는 경로를 두었습니다. 키보드가 없는 환경이므로 화면 키패드로 입력받습니다. 자동화한 절차에도 사람이 개입할 수 있는 경로를 남겨 두지 않으면, 예외가 발생한 순간 시스템 전체가 멈춥니다.
단계 추적
현재 진행 단계를 추적해 화면 이동을 관리합니다. 어느 지점에서 뒤로 가더라도 예상한 화면으로 돌아가고, 처음으로 돌아가는 경로도 항상 동일하게 동작합니다. 수험생이 혼란스러운 상태에 빠지지 않도록 하는 장치입니다.
핵심 설계 붐비는 시간대에는 평균 처리 속도보다 최악의 경우가 중요합니다. 예외 처리를 정상 흐름 밖으로 뺀 이유입니다.
4. 성과
시험장 출결 절차를 감독관 수작업에서 수험생 셀프 처리로 전환했습니다. 신분 확인, 출결 기록, 좌석 안내가 키오스크 한 대에서 한 번에 끝나면서, 감독관은 예외 상황 처리에 집중할 수 있게 되었습니다.
얼굴 인식으로 본인 확인을 자동화하면서 확인 기준이 일정해졌습니다. 사람이 급하게 처리할 때 생기는 편차가 사라지고, 확인 결과가 기록으로 남습니다. 국가 자격시험에서 요구되는 공정성 측면에서 의미 있는 변화입니다.
전원 제어와 자동 업데이트를 애플리케이션에 포함해, 시험장마다 담당자가 장비를 개별 관리하지 않아도 되는 구조를 만들었습니다. 상시 인력이 없는 시험장 운영 조건에 맞춘 선택입니다.
인식 장비 연동을 화면 로직과 분리해 두었기 때문에, 장비가 교체되더라도 화면 흐름을 다시 만들 필요가 없습니다. 하드웨어와 붙는 시스템에서 이 경계는 이후 유지보수 비용을 좌우합니다.
예외 처리 경로를 정상 흐름과 분리한 설계도 현장에서 효과를 냈습니다. 인식이 안 되는 수험생이 나와도 줄 전체가 멈추지 않고, 그 한 명만 다른 경로로 빠집니다. 붐비는 시간대에 처리량을 유지하려면 평균보다 최악의 경우를 먼저 다뤄야 한다는 판단이 설계 전반에 반영되었습니다.
기록을 남기는 기능을 초기부터 넣은 것도 도움이 되었습니다. 시험장은 문제를 재현할 수 없는 환경이라, 사후에 확인할 수 있는 것은 로그뿐입니다. 어느 단계에서 무엇이 실패했는지 구분해 남기면서, 현장 방문 없이도 원인을 좁힐 수 있었습니다.
2024년 12월부터 2025년 3월까지 약 4개월간 개발했습니다. 인식 장비 연동을 먼저 확정하고 화면과 운영 기능을 순서대로 얹는 방식으로 일정을 관리했습니다.
5. 기술 구성
Desktop App
Electron 기반 데스크톱 애플리케이션입니다. 화면은 React와 TypeScript로 작성하고 Vite로 빌드하며, 스타일은 Tailwind CSS를 사용합니다. 화면 이동은 React Router로 구성했습니다.
웹 기술로 화면을 만들되 데스크톱 애플리케이션으로 배포하는 구성을 택한 이유는 두 가지입니다. 하나는 화면 수정이 빠르다는 점이고, 다른 하나는 장비 제어와 자동 업데이트, 전원 관리 같은 운영 기능을 같은 애플리케이션에서 다룰 수 있다는 점입니다.
하드웨어 연동
FFI(Foreign Function Interface)로 네이티브 라이브러리를 직접 호출해 인식 장비를 제어합니다. 장비 제조사가 제공하는 기능을 중간 계층 없이 사용합니다. 외부 시스템과는 소켓 통신으로 연동합니다.
운영 기능
자동 업데이트, 로컬 설정 저장소, 로그 파일 기록, 시스템 전원 제어 명령을 포함합니다. 네 가지 모두 사람이 현장에 가지 않아도 되도록 만들기 위한 기능입니다.
프로세스 구조
Electron의 메인 프로세스와 화면 프로세스를 분리하고, 그 사이의 통신 경로를 명시적으로 정의했습니다. 장비 제어와 파일 접근처럼 시스템 권한이 필요한 작업은 메인 프로세스에서만 수행하고, 화면은 정해진 경로로만 요청합니다. 키오스크는 불특정 다수가 만지는 장비이므로 권한 경계를 느슨하게 두면 위험합니다.
테스트
단위 테스트와 E2E 테스트 환경을 함께 구성했습니다. 인식 장비가 있어야만 확인 가능한 부분을 제외하고, 화면 흐름과 상태 전환은 장비 없이도 검증할 수 있게 했습니다. 시험장에 갈 때마다 확인하는 방식으로는 일정을 맞출 수 없습니다.
기술 선택의 기준
이 프로젝트에서 가장 중요한 조건은 "현장에 사람이 없어도 운영된다"였습니다. 기술 선택도 여기에 맞췄습니다. 자동 업데이트, 전원 제어, 로그 기록을 애플리케이션 안에 넣은 것은 이들을 외부 도구로 처리하면 장비마다 설정이 갈라지기 때문입니다.
인식 장비를 직접 호출하는 방식을 택한 것도 같은 맥락입니다. 중간 서비스를 두면 관리할 대상이 하나 늘고, 그 서비스가 멈추면 인식 전체가 멈춥니다. 대신 장비 연동 코드를 분리해, 장비가 바뀔 때의 영향 범위를 좁혔습니다.
구현하면서 다룬 문제
인식 실패의 처리. 얼굴 인식은 조명과 각도, 마스크 착용 여부에 영향을 받습니다. 실패를 예외가 아니라 정상 흐름의 한 갈래로 보고, 재시도와 수동 확인 경로를 처음부터 설계에 넣었습니다.
줄의 흐름. 한 명이 막히면 뒤가 전부 멈춥니다. 실패 화면을 분리하고 감독관 확인으로 빠지는 경로를 만든 것은, 예외 처리를 줄 밖으로 빼기 위해서였습니다.
장비 버전 관리. 시험장마다 버전이 다르면 문제 발생 시 원인 파악이 어렵습니다. 자동 업데이트를 넣어 버전을 맞추고, 로그에 버전 정보를 함께 남겼습니다.
권한 경계. 불특정 다수가 만지는 장비에서 시스템 권한이 화면 쪽에 열려 있으면 위험합니다. 권한이 필요한 작업을 메인 프로세스로 모으고 통신 경로를 제한했습니다.
개인정보 취급. 얼굴 정보는 민감한 개인정보입니다. 확인 절차에 필요한 범위를 넘어서 장비에 남기지 않도록 처리 경로를 정리하고, 관리자 기능 접근을 비밀번호로 제한했습니다.
시험 일정과의 동기화. 장비는 시험이 있는 날에만 동작해야 합니다. 전원 제어를 애플리케이션에서 다루면서, 일정에 맞춰 장비 상태를 맞추는 작업을 원격에서 처리할 수 있게 했습니다.
원격 확인. 현장에 갈 수 없는 상황을 전제로, 로그와 상태 확인 수단을 먼저 갖췄습니다. 기능보다 먼저 만들어야 하는 것이 관찰 수단이라는 판단이었습니다.
배포와 운영
빌드와 패키징, 자동 업데이트 배포를 하나의 흐름으로 구성했습니다. 새 버전을 만들면 장비가 스스로 확인하고 갱신하므로, 시험장 담당자가 할 일은 없습니다. 설정 파일과 로그는 장비 로컬에 보관하고, 필요할 때 확인합니다.
운영 기간에 반복되는 작업은 시험 일정에 맞춘 장비 기동과 상태 확인입니다. 이 두 가지를 애플리케이션이 처리하도록 만들면, 시험장 수가 늘어도 운영 인력이 비례해 늘지 않습니다.
6. 프로젝트 정보
| 항목 | 내용 |
|---|---|
| 사업명 | CBT 신분확인 KIOSK (얼굴인식) 개발 |
| 담당 범위 | 키오스크 애플리케이션 개발 |
| 적용 기술 | Electron, React, TypeScript, Vite, FFI 네이티브 연동, 소켓 통신 |
비슷한 프로젝트를 준비 중이신가요?
요구사항과 일정만 알려주시면 적합한 구성과 예상 범위를 정리해 드립니다.
댓글 0
첫 번째 댓글을 남겨보세요.