문제를 발견하고,
흐름을 만들고,
운영을 지키는
엔지니어 김현호입니다.
- 01문제를 이해하고
- 02제품으로 구현하고
- 03운영에서 검증하고
- 04다시 개선합니다
Occount
학교 매점의 주문·결제를
완전 무인으로
키오스크 주문·결제부터 VAN 연동, 기기 운영과 장애 대응까지 직접 연결했습니다.
- 역할
- 프론트엔드 · 결제 흐름 구현
- 팀
- 5명
- 운영
- 약 6개월 실제 운영
- 기술
- Spring Boot · MSA · Kafka · SSE
01
실제 화면이
운영을 증명합니다.
학생 인증부터 카드 결제, 키오스크 앱 배포와 기기 상태 확인까지 하나의 운영 흐름으로 구성했습니다.


02
매점을 완전 무인으로 전환해
운영의 초점을 바꿨습니다.
03
연속 스캔에서 발생한 중복 요청을
상태 기반 제어로 막았습니다.
if (lastBarcode === barcode || requestInFlight) {
return;
}
lastBarcode = barcode;
requestInFlight = true;
await requestProduct(barcode);배운 점외부 결제 서비스 연동에서는 기능뿐 아니라 예외 상태와 중복 입력을 함께 설계해야 제품의 안정성을 지킬 수 있습니다.
BUSAN MATHEMATICAL CULTURE CENTER · EXHIBITION
Media
Art
부산수학문화관을 위한
인터랙티브 전시물
카메라가 본 몸을 숫자와 빛으로
부산수학문화관 전시물 제작 프로젝트로, 웹캠으로 포착한 사람의 실루엣을 AI와 픽셀 연산으로 해석해 관객이 직접 바꿔보는 경험으로 만들었습니다.
- 역할
- 기획 · 인터랙션 · 렌더링 구현
- 형태
- Electron 기반 설치 작품
- 입력
- 웹캠 영상 · 사용자 조작
- 기술
- JavaScript · Canvas · MediaPipe · GitHub Actions
01
컴퓨터가 보는
내 모습
카메라가 인식한 사람 영역만 남기고, 픽셀의 밝기 데이터를 서로 다른 규칙으로 변환합니다. 관객은 같은 움직임이 숫자와 형태로 달라지는 과정을 바로 확인할 수 있습니다.

02
움직임이 데이터가 되고,
데이터가 다시 장면이 됩니다.
복잡한 영상을 그대로 보여주는 대신, 인식·계산·표현의 단계를 분리해 관객이 이미지 처리의 원리를 읽을 수 있도록 구성했습니다.
웹캠에서 실시간 프레임을 받습니다.
AI가 사람과 배경을 픽셀 단위로 나눕니다.
L = 0.299R + 0.587G + 0.114B로 밝기를 계산합니다.
밝기값을 0·1, 흑백, 숫자 패턴으로 바꿉니다.
03
같은 몸,
네 가지 해석
모드를 바꾸면 픽셀을 읽는 규칙이 바뀝니다. 결과를 선택하는 경험 자체가 이미지 처리 실험이 되도록 설계했습니다.
원본
Cyberpunk silhouette사이안 글로우와 0·1 표현으로 미래적인 분위기를 만듭니다.
흑백
Minimal silhouette텍스트를 걷어내고 사람의 윤곽만 선명하게 남깁니다.
바이너리
0 / 1 matrix밝기 기준으로 각 지점을 0 또는 1로 양자화합니다.
숫자
0 — 9 grayscale밝기를 10단계로 나누어 숫자의 밀도로 표현합니다.
04
업데이트가 필요한 순간에도
전시를 멈추지 않도록.
GitHub Release에 새 버전을 올리면 설치된 Windows 앱이 업데이트를 확인하고, 앱 안에서 다운로드 상태와 재시작 시점을 안내합니다.
- 감지
- 패키징된 Windows 앱이 실행 5초 후 새 릴리즈 확인
- 안내
- 다운로드 중 · 다운로드 완료 상태를 전시 화면에 표시
- 적용
- ‘지금 재시작’ 선택 시 업데이트 설치 후 앱 재실행

05
전시장에서 계속 반응하도록
렌더링 구조를 다듬었습니다.
화면은 30fps를 목표로 갱신하고, 사람 인식은 12fps로 조절해 반응성과 계산량의 균형을 맞췄습니다.
인터랙티브 레이더 센서를 통한 제어를 전제로 모드 선택 흐름을 설계했습니다.
외부 서버에 영상을 보내지 않고 로컬에서 인식과 Canvas 렌더링을 수행하도록 구성했습니다.
작품으로 배운 점인터랙티브한 결과는 시각 효과만으로 완성되지 않습니다. 입력을 안정적으로 받고, 계산 단계를 설명하며, 관객의 선택이 지연 없이 결과에 닿도록 전체 흐름을 설계해야 합니다.
PERSONAL INFRASTRUCTURE
Home
Server
서비스를 직접 배포하고
운영하는 나만의 인프라
개발한 서비스가 실제로 동작하는 환경까지 이해하기 위해 가상화, 네트워크, 스토리지를 직접 설계하고 운영했습니다.
- 유형
- 개인 인프라 프로젝트
- 기간
- 2025.12 — 진행 중
- 구성
- 가상화 · 라우팅 · 스토리지
- 기술
- Proxmox · Docker · Nginx Proxy Manager · TrueNAS
01
코드 밖의 운영 환경까지
직접 구축했습니다.
하나의 물리 서버 위에 서비스별 실행 환경을 분리하고, 외부 요청과 데이터 저장 흐름을 연결했습니다.



02
한 대의 서버를
여러 서비스의 운영 기반으로.
공인 IP로 들어온 요청을 Reverse Proxy에서 판별하고, Proxmox 내부의 독립된 실행 환경으로 전달하도록 구성했습니다.
- 01서비스 간 영향 범위 축소
실행 환경을 분리해 배포와 재시작을 독립적으로 수행했습니다.
- 02하나의 진입점으로 통합
여러 도메인의 요청을 한 서버에서 목적지에 맞게 분기했습니다.
- 03운영 영역까지 확장
컴퓨팅, 네트워크, 저장소의 연결 구조를 직접 다뤘습니다.
03
접속 실패를 요청 경로를 따라
단계별로 추적했습니다.
배운 점서비스 운영에서는 애플리케이션 코드뿐 아니라 요청이 서버에 도달하고 데이터가 보존되는 전체 경로를 함께 이해해야 합니다.
G-STAR 2025 · AI VISUAL NOVEL
while
선택과 감정에 반응하는
나만의 연애 시뮬레이션
고정된 대본을 따라가는 대신, 플레이어의 선택·표정·취향을 바탕으로 다음 장면을 만드는 AI 미연시를 구현했습니다.
- 역할
- 프론트엔드 · API v2 마이그레이션 · 안정성 개선
- 형태
- G-STAR 2025 시연 프로젝트
- 경험
- 선택 · 감정 · 플레이 시간에 따라 달라지는 진행
- 기술
- React · TypeScript · FastAPI · Gemini · face-api.js
01
플레이어가 남긴 반응이
다음 장면의 재료가 됩니다.
성격과 장르를 고르는 시작 단계부터 대화의 선택지, 웹캠으로 읽은 감정 상태까지 게임의 진행 데이터로 연결했습니다.


02
한 번의 선택이 끝이 아니라,
다음 장면을 만드는 입력이 되도록.
게임 생성부터 장면 진행까지 API v2 흐름으로 정리해, 프론트엔드가 현재 장면·선택·감정 데이터와 플레이 시간을 일관되게 전달하도록 구성했습니다.
성격, 장르, 플레이 시간을 받아 게임과 첫 세션을 만듭니다.
대화 또는 선택 장면에 맞춰 다음 요청을 보냅니다.
웹캠 감정 값과 일시정지를 제외한 경과 시간을 함께 기록합니다.
AI가 상황과 인물을 유지한 새 장면·배경을 반환합니다.
03
시연에서 끊기지 않도록,
흐름과 예외를 함께 다듬었습니다.
UI를 구현하는 데서 끝나지 않고 인증, 이미지 생성, 시연 환경처럼 실제 체험을 멈출 수 있는 지점들을 정리했습니다.
- 인증
- 인증 페이지·보호된 라우트와 토큰 갱신 흐름 구현
- 진행
- 엔터·스페이스 입력으로 대화 진행, 데모 타이머 조정
- 안정성
- 리프레시 토큰 동시성 문제와 배경 이미지 재생성 비용 개선

face-api.js 기반 훅과 상태 위젯으로 현재 인식값을 플레이 중에도 확인할 수 있게 했습니다.
장면 응답에 캐릭터 이미지 정보를 포함하고, 게임별 주요 캐릭터 선택 흐름을 보완했습니다.
시연 타이머와 설문, QR 진입 흐름을 조정해 현장 체험을 준비했습니다.
2026.09 — 2026.10
개인 프로젝트
Lab
오픈 소스에 기능을 더하고, 읽는 도구와 학습 교안을 직접 만들고 있습니다.
- 01
오픈 소스 기여
PokeTokenBar, prompt-engineering-is-game의 기능 추가 및 UX 개선
AI 커넥터 추가, 최신 정보 반영, 분석 버튼 UX 개선 - 02
exkore
영문 개발 문서 읽기 보조를 해주는 크롬 익스텐션
개발 중 - 03