Projects

증명사진 키오스크 시스템

Unity 기반. 하드웨어 네이티브 통합, 셰이더 이미지 프로세싱, CI/CD 환경 구축.

2025.06 ~ 현재|1인 설계 · 구현 · 배포 · 운영
  • Unity
  • C#
  • C++
  • P/Invoke
  • HLSL
  • OpenCV
증명사진 키오스크 시스템

증명사진/배경사진 촬영-보정-결제-인쇄 키오스크. Unity 6 기반 Windows Standalone.

  • 개발 형태: 1인 설계 / 구현 / 배포 / 운영
  • 기간: 2025.06~ (진행 중)

배경

회사에서 운영 중이던 키오스크는 외주 업체가 Unity로 개발한 것이었다. 핵심 로직 — 카메라 SDK, 프린터 SDK, 이미지 프로세싱 — 은 C++ 네이티브 DLL로 구현되어 있었고, 소스코드는 제공되지 않았다. UI는 Unity, 코어 로직은 블랙박스 DLL이라는 구조.

C++로 코어를 만든 이유 자체는 합리적이었다. SDK가 C/C++이고, COM/STA 스레드 처리는 네이티브가 자연스럽다. 하지만 소스 없이 바이너리만 넘긴 구조는 유지보수를 포기한 것과 같았다.

기존 문제

  • 아키텍처 부재: 하나를 고치면 다른 곳이 깨지는 구조. 변경 영향 범위 예측 불가
  • 로깅 부재: 현장 장애 시 원인 파악에 3~7일 소요. 복구 가능 여부조차 답할 수 없었음
  • CS 과중: 결제 후 사진 미출력 반복. 개발자가 직접 현장을 봐야 하는 구조
  • 컬러 파이프라인 부재: 소프트웨어 단의 이미지 보정이 전무. 현장 직원이 카메라 세팅과 프린터 드라이버를 직접 조정하는 방식이라 촬영 품질이 기기·환경마다 달랐고, 일관된 출력 퀄리티를 보장할 수 없었음

해결

키오스크 소프트웨어 전체를 새로 설계하고 구현. 블랙박스 DLL에 의존하던 기존 구조를 걷어내고, 촬영부터 인쇄까지 모든 핵심 로직을 직접 작성. 13개 런타임 시스템, 6종 하드웨어 네이티브 SDK 통합, GPU 이미지 파이프라인, 빌드·배포 인프라까지 1인 풀스택으로 구축.

Systems Facade. 13개 런타임 시스템을 단일 접근점으로 통합. SystemManager가 초기화 순서와 생명주기를 제어하고, null-checked 프로퍼티로 안전한 접근을 보장.

하드웨어 통합. 6종 하드웨어의 네이티브 SDK를 C++ Wrapper DLL, P/Invoke, 동적 DLL 로더(Reflection.Emit)로 단일 프로세스에 통합. SDK마다 다른 통신 방식과 스레딩 모델을 각 구현체에서 흡수하고, 상위 코드에는 공통 인터페이스만 노출.

GPU 이미지 보정. CommandBuffer 기반 4-pass 셰이더 파이프라인 직접 구현. Color Correction, Bilateral Blur, Unsharp Mask를 GPU에서 처리. 게임 엔진의 렌더링 인프라를 사진 보정 전용으로 전환.

비즈니스 임팩트

  • CS 건수 60% 감소
  • 버그 수정 사이클: 기존 3~5일 소요 → 당일 배포
  • 하드웨어 교체 시 구현체 하나 추가 + 등록 한 줄. 나머지 코드 변경 없음

기술 스택

영역기술
시스템 아키텍처C# / Unity 6, UniTask
네이티브 통합C++, P/Invoke, COM Interop, RS-232
이미지 처리HLSL / ShaderLab
얼굴 감지Python, OpenCV (YuNet ONNX)
인프라Supabase, Addressables

문서 구성

문서내용
01-아키텍처-설계Systems Facade, 디바이스 추상화, 3단계 초기화, Config 자동 생성
02-이미지-처리GPU 셰이더 파이프라인, 인쇄 합성 엔진, Texture 메모리 관리, 얼굴 감지
03-네이티브-통합C++ Wrapper DLL, 동적 DLL 로더, COM/STA 스레딩, 결제 단말 통합
04-배포-인프라에셋/코드 분리 배포, 온프레미스 Supabase, 빌드 파이프라인, 오류 보고
05-프로덕션-안정성인쇄 검증 큐, MCU 타이밍
아키텍처 설계