Production System · 전국 무인 보관함 배포

무인 보관함
키오스크 소프트웨어

무인 보관함의 보관·찾기·결제·원격 제어를 담당하는 키오스크 소프트웨어를 설계하고 개발했습니다. 비동기 I/O와 이벤트 기반 구조, MQTT·TCP 통신으로 화면이 멈추지 않게 만들었습니다.
키오스크 앱과 관제 웹을 잇는 원격 제어 프로토콜을 직접 설계·구현했고, 이 코드는 다른 현장용 키오스크를 찍어내는 엔진으로도 씁니다.

무인 보관함 프로그램 소스 코드는 공개하지 않습니다. 현장 키오스크, 결제 중계, 관제 웹, 매출 적재, DB가 어떻게 붙는지 역할만 적었습니다.

AI를 적극 활용해서 프로그램 설계 및 구조를 직접 설계하고 코드를 작성하였습니다.

Program Flow

프로그램 흐름도

프로그램 사이 통신만 그렸습니다. 박스를 누르면 그 프로그램이 무엇을 하는지 나옵니다.

프로그램을 눌러 보세요

소스 코드는 공개하지 않습니다. 현장 키오스크, 결제 중계, 관제 웹, 매출 적재, DB가 어떻게 붙는지 역할만 적었습니다.

locker-app은 이 흐름 밖에 있습니다. 보관함을 지도에서 찾는 소비자용 웹이고, 지금은 검색·상세·리뷰까지 동작하며 예약·결제는 개발 중입니다.

User Manual

사용자 매뉴얼 미리보기

매뉴얼 표지 및 목차 페이지
System Architecture

시스템 아키텍처 구성

UI 프레임워크

CUI_Page 상속 기반 모듈화된 UI 시스템. GDI+ 더블 버퍼링, 프레임 캐싱, 동적 레이아웃(1080×1920) 지원. 저자세 모드 시 자동 좌표 변환.

CUI_PageGDI+LayoutUtilCBufferDC

결제 통합 엔진

CPaymentManager 단일 진입점으로 카드·현금·카카오페이 통합. 비동기 콜백 패턴과 Transaction-per-Connection TCP 설계.

CPaymentManagerCUbiAnyCardHandlerTCP/IPWinsock

서버 통신 모듈

MQTT 프로토콜 기반 실시간 관제. 오프라인 DB 큐 재전송, 자동 재연결, 초기 핸드셰이크(0101) 동기화.

CCommRunMQTTCProtocolManagerDB Queue

하드웨어 통합 제어

RS-232 시리얼 통신으로 보관함 보드·지폐기·동전기 정밀 제어. 자동 복구, 재시도, 상태 머신 기반 안정성 확보.

CSUB16_BD_ControlBillAcceptorCoinAcceptorSerialPort

접근성 시스템

고대비·저자세·돋보기·음성 안내 4종 접근성 기능. 레이어드 렌더링 오버레이 방식으로 모든 페이지에서 일관 동작.

고대비 모드저자세 모드돋보기TTS

런타임 스케줄러

TaskManager가 결제 프로세스 감시(5초), 일일 작업(60초), 새벽 자동 재부팅을 관리. 이벤트 기반 즉시 종료 지원. 하드웨어 연결 끊김 감지 등

TaskManagerWaitForSingleObject뮤텍스 감시
Remote Control Protocol

원격 제어 프로토콜 · 관제 웹

키오스크 앱과 관제 웹(UExpress) 사이에 쓰는 원격 제어 프로토콜을 직접 설계하고, 양쪽 구현을 맞췄습니다. MQTT 토픽 NC{KID}0203 전문을 주고받고, cmd 21~29로 공지·배너·카드고장·함 크기·레이아웃·함 이동·요금 조회를 나눕니다. 관제 ASP가 명령을 발행하면 현장 키오스크가 받아 INI에 저장하고, 이용 중일 때는 첫화면을 강제로 빼앗지 않습니다.

21 공지 22 상태조회 23 카드고장 24 배너 25·26 함사이즈 27 레이아웃 28 함이동 29 요금조회
관제 웹 공지·카드고장·배너 설정
공지 두 줄, 카드고장 시 현금만 받기, 첫화면 배너 교체. cmd 21·23·24를 한 화면에서 보냅니다.
함 사이즈와 커스텀 레이아웃 편집
함 치수(mm)와 열별 커스텀 레이아웃. 함 개수를 바꾸면 기존 대여 번호가 밀려서, 개수는 잠가 뒀습니다.
키오스크 원격 조회 상태
현장 기기 한 대를 다시 조회한 화면. 공지·카드고장·배너 파일명·함 사이즈가 MQTT로 채워집니다.
함 레이아웃 원문과 요금·연체료 조회
레이아웃 원문과 요금·연체료 조회(cmd 29). 요금표는 관제 DB가 아니라 키오스크 INI에 있어서, 기기에 물어봅니다.

공지 · 배너 · 고장모드

첫화면 공지 단건·일괄 발행, 배너 이미지 HTTP 배포와 기본 배너 복귀, 카드리더 고장 시 현금만 받기와 연체 면제상한.

MQTT 0203cmd 21~24KioskState

함 설정 · 원격 열기

함 치수와 커스텀 레이아웃을 관제에서 고치고, 원격 열기·함 보관정보 이동·재부팅도 같은 프로토콜로 처리합니다.

cmd 25~28원격 열기함 이동

운영 DB · 서버 관리

관제 ASP가 MSSQL의 키오스크 상태·명령 로그·함 상태를 읽고 씁니다. 운영 PC의 서비스 중계 프로그램이 매출을 SQL Server와 코레일 Oracle에 넣고, 결제 누락은 재전송으로 메웁니다.

MSSQLMqtt_Cmd_Log결제누락 복구
Data Flow

카드 결제 데이터 흐름

CUI_CardPay
사용자 터치
CPaymentManager
RequestPayment()
CUbiAnyCardHandler
비동기 TCP 요청
TCP 127.0.0.1
ACK(3s) → 응답(60s)
↑ 콜백
CSUB16_BD_Control
TryOpenLocker()
HandleSuccess
관제 통보 + 문 열기
CCommRun::Send
0501/0204 MQTT
Thread Model

멀티스레드 아키텍처

CCommRun (4 스레드)

송신 루프 연결 감시 초기 연결 재연결

SerialPort (2 스레드)

BillAcceptor 워커 CoinAcceptor 워커

기타 (2+ 스레드)

TaskManager 워커 CTouchThread (UI)
Code Statistics

프로젝트 정량 분석

모듈별 코드 분포

기술 스택 복잡도

통신 프로토콜

파일 구성 비율

Technical Competence

핵심 기술 역량

시스템 프로그래밍

C++ / Modern C++95%
MFC / Win32 API90%
멀티스레드 / 동기화90%
메모리 관리 / RAII88%

통신 / 네트워크

TCP/IP (Winsock)92%
MQTT 프로토콜88%
시리얼 통신 (RS-232)90%
프로토콜 설계/파싱85%
관제 ASP / MSSQL 운영82%

UI / UX 엔지니어링

GDI+ 렌더링90%
접근성 (Accessibility)85%
터치 인터페이스88%
Deployment Automation

현장 배포 자동화

Unattended Silent Deployment

키오스크 현장 설치 시 필요한 17개 설치 단계를 사용자 입력 없이 원클릭으로 일괄 자동 실행하는 배포 자동화 시스템을 설계·구현했습니다.

파티션 생성, OS 환경 설정, 런타임 설치, DB 구성, 드라이버 설치, 키오스크 프로그램 배포까지 — 모든 과정이 Silent Install 방식으로 자동 진행되어, 현장 엔지니어의 수작업을 최소화하고 설치 품질의 일관성을 보장합니다.

PowerShell Batch Script JSON Config Silent Install Unattended
설치 단계 17
사용자 입력 0
설정 파일 1
Install_Launcher 실행 화면
▲ Install_Launcher.bat 실행 시 설치 설정 요약 및 단계 미리보기
1

Prepare_Package.bat

배포 패키지 구성 (개발PC에서 실행)

기존 설치 자료 폴더에서 필요한 파일을 자동으로 수집하여 USB 배포용 패키지 구조로 구성합니다.

  • VC++ Redistributable 일괄 복사
  • MySQL Server/Workbench 설치 파일
  • ODBC 드라이버, 하드웨어 드라이버
  • 키오스크 프로그램 + UbiAnyCard
  • AutoStart 서비스 파일
2

Install_Launcher.bat

현장 자동 설치 (키오스크에서 실행)

config.json 설정을 읽어 17개 단계를 순차적으로 자동 실행합니다. 모든 설치는 사일런트 모드로 진행됩니다.

  • D드라이브 파티션 자동 생성
  • 절전모드/UAC/Windows Update 비활성화
  • VC++ → MySQL → ODBC → DB 자동 구성
  • 레지스트리·드라이버·서비스 등록
  • 키오스크 프로그램 배포 + 자동시작 설정
Prepare_Package 실행 화면
▲ Prepare_Package.bat — 배포 패키지 자동 구성 완료 화면

자동화 패키지 준비

Prepare_Package.bat을 실행하면 기존 설치 자료 폴더에서 VC++ Redistributable, MySQL, ODBC 드라이버, 하드웨어 드라이버, 키오스크 프로그램 등 필요한 모든 파일을 자동으로 수집하여 배포용 패키지 구조(8단계)로 구성합니다.

준비가 완료된 패키지 폴더를 USB에 복사하고 config.json만 현장 환경에 맞게 수정하면 현장 설치 준비가 완료됩니다.

config.json — 현장 설치 설정 설정 파일 하나로 전체 설치 옵션 제어
{
  // === 키오스크 자동 설치 설정 파일 ===
  // 현장마다 이 파일의 값만 수정해서 사용하세요

  "kiosk": {
    "kiosk_id": "0",
    "kiosk_addr": "현장명",
    "server_ip": "관제서버 도메인",
    "server_port": "****",
    "install_drive": "D",
    "install_folder": "Locker_Kiosk_V2"
  },

  "mysql": { "root_password": "****", "db_name": "****", "port": "3306" },
  "partition": { "drive_letter": "D", "size_gb": 10, "label": "DATA" },

  "options": {
    // --- 사전 환경설정 (STEP 0) ---
    "create_partition": true,
    "disable_sleep": true,
    "disable_uac": true,
    "remove_default_apps": true,
    "disable_windows_update": true,
    // --- 키오스크 설치 ---
    "install_vcredist": true,
    "install_mysql": true,
    "install_odbc_driver": true,
    "setup_odbc_dsn": true,
    "setup_database": true,
    "apply_registry": true,
    "copy_kiosk_files": true,
    "install_intel_hdmi": true,
    "install_j1900_drivers": true
    // ... 총 17개 옵션 개별 ON/OFF 가능
  }
}

원격 업데이트 (OTA)

USB 설치와 별도로, 관제에서 키오스크 ID를 찍어 원격 업데이트를 예약합니다. 현장 Updaterversion.json과 MD5를 확인한 뒤 EXE·이미지·INI·UbiAnyCard를 갈아끼우고, 실패하면 백업본으로 되돌립니다. AutoStart는 키오스크를 감시하다가 업데이트 중에는 중간에 다시 띄우지 않습니다.

Updater AutoStart pending 큐 MD5 / 롤백 standard · 10i

현장 감시와 재시작

AutoStart가 부팅 시 Updater를 먼저 돌리고 키오스크를 띄웁니다. 프로세스가 죽으면 약 10초 뒤 다시 살리고, 관제에서 레이아웃을 적용해 앱이 내려가도 감시 프로그램이 다시 올립니다.

자동 설치 실행 영상

※ 설치 전체 과정은 약 15~20분 소요되며, 해당 영상은 초반 설치 과정 일부분만 촬영한 것입니다. 설치 프로그램(MySQL 등)의 설치 시간이 길어 전체 녹화가 어려운 관계로, 자동 설치 시작 ~ 사전 환경설정 구간까지의 동작을 확인할 수 있습니다.
Key Achievements

핵심 성과 & 설계 결정

01
키오스크 엔진과 운영
키오스크 엔진을 설계·구현하고, 관제 웹·OTA·매출 적재까지 운영에 붙였습니다. 모듈로 나눠 두어 현장별로 가져가기 쉽게 했습니다.
02
비동기 결제 엔진
카드·현금·카카오페이를 단일 진입점으로 통합. UI 프리징 없는 비동기 콜백 패턴과 Transaction-per-Connection 설계.
03
관제 MQTT와 재전송
MQTT로 실시간 통신하고, 끊기면 로컬 DB 큐에 쌓아 다시 보냅니다. 매출이 빠지면 재전송·복구로 메웁니다.
04
원격 제어 프로토콜
키오스크와 관제 웹 사이의 MQTT 0203 cmd 21~29를 직접 설계하고, 공지·배너·함 설정·요금 조회를 양쪽에서 맞춰 구현했습니다.
05
하드웨어 자동 복구
보관함 보드 리셋/헬스체크/재시도 메커니즘으로 무인 환경에서의 장시간 안정 운영 지원.
06
접근성 기능 지원
고대비·저자세·돋보기·음성 안내 4종 접근성 기능을 코드 레벨에서 일관되게 구현.
07
우수한 확장성 및 유지보수
모듈로 나눈 구조라 기능을 넣고 빼기 쉽습니다. 새 현장이 생겨도 이 엔진을 가져다 쓰면 개발 기간이 줄고 안정성도 검증된 상태로 시작합니다.
Development Scope

개발 영역 & 역할

Architecture

시스템 아키텍처 설계

전체 시스템의 모듈 구조, 스레드 모델, 메시지 기반 비동기 패턴을 설계하고 CUI_Page 기반의 확장 가능한 UI 프레임워크를 구축했습니다.

Payment

결제·하드웨어 연동

카드는 로컬 결제 중계 프로그램(TCP), 현금은 시리얼, 카카오페이는 관제 중계로 CPaymentManager에 모았습니다. 보관함 보드와 지폐/동전 투입기도 시리얼로 제어합니다.

Communication

서버 통신 모듈 리디자인

CCommRun의 송신 이벤트 루프, 연결 감시, 초기/재연결 스레드, DB 큐 동기화를 모두 재설계하여 무중단 통신을 구현했습니다.

UX & Accessibility

접근성 & 인터랙션

Layered Window 기반 터치 이펙트, 독립 UI 스레드, 4종 접근성 기능, 동적 레이아웃 시스템을 구현했습니다.

Operations

운영 안정화 & 스케줄링

TaskManager로 결제 프로세스 감시, 자동 재부팅, 로그 정리를 돌리고, 관제 MSSQL과 서비스 중계 프로그램으로 매출·함 상태를 맞춥니다.

Remote Protocol

원격 제어 프로토콜 설계

키오스크 C++와 관제 ASP가 같은 cmd 표를 쓰도록 MQTT 0203 서브커맨드를 설계하고, 공지 일괄 발행부터 함 이동·요금 조회까지 운영 화면에 붙였습니다.

Additional Projects

추가 개발 프로젝트

UbiAnyCard_V2

카드 결제 중계 프로그램

키오스크와 카드 단말기(ED-785/ED-721) 사이를 잇는 로컬 결제 중계 프로그램입니다. 같은 PC에서 localhost TCP로 결제/취소/핑을 받고, 시리얼로 단말기와 주고받아 승인 결과를 돌려줍니다. 티머니·캐시비·레일플러스 파싱과 최종거래조회(LASTTX)도 여기서 합니다. 관제 서버가 아닙니다.

2,475
Lines of Code
15
Source Files
3
통신 레이어
TcpServer ED785Worker ProtocolAdapter Winsock TCP Serial RS-232
위키 문서 보기 →

Locker_10Inch

가로형 10인치 · 17인치 키오스크
10인치 키오스크 첫화면

코레일 21인치(세로)와 같은 코어를 쓰는 가로형 키오스크입니다. 10인치와 17인치 모드를 같이 유지하고, 원격 공지·장기보관·웹결제도 코레일과 맞춰 갑니다. 저자세·고대비·돋보기와 일부 TTS가 있습니다.

90
Source Files
10인치
Target Display
병행
코레일과 동기
10인치 해상도 대응 가로형 10·17인치 코어 모듈 공유 장기보관 · 원격공지
사용자 문서 보기 →
기반 엔진: Locker_Kiosk_Korail_Ver2 핵심 모듈 재사용

ServiceServerDlg

키오스크 서비스 중계 · 매출 적재

운영 PC에서 키오스크 MQTT 이용·매출 전문을 받아 SQL Server와 코레일 Oracle에 넣는 프로그램입니다. 이름에 Server가 있어도 브로커에 붙는 클라이언트입니다.

MQTT 0204/0501 SQL Server Oracle POS 매출 유실 복구

locker-app

보관함 찾기 PWA 개발 진행 중

전국 보관함을 지도에서 찾는 모바일 웹(PWA)입니다. Next.js와 NestJS로 장소 검색, 가까운 함, 상세·요금, 리뷰, 4개 국어까지 동작합니다. 예약과 결제는 아직 자리만 있는 상태입니다.

개발 중
Status
PWA
Client
NestJS
API
Next.js PostgreSQL + PostGIS Naver Maps 예약·결제 미완