김태진 · KIM TAE JIN
기획, 디자인, 개발을 오롯이 혼자서

27년 동안, 모든 코드를
한 줄 한 줄 손으로 썼다.
지금은 AI가 코드를 쓴다. 그리고 나는
그 코드와 결과를 의심하고 판단한다.

필기엔진 하나를 10년 동안 만들었고,
그 엔진으로 만든 앱은 애플 앱스토어 올해의 아이패드 앱이 되었다.
서버를 만들지 못한다는 게 아쉬워 개발서적 13권을 들고 두 달간 잠적했고,
돌아올 때는 서버부터 모바일까지 혼자 만들 수 있는 풀스택 개발자가 되어 있었다.
회사에서는 사용자용·관리자용 모바일 앱 네 개를 혼자 맡았고,
지금은 AI와 함께 그 모든 일을 더 빠르게 한다.

생성은 맡긴다.
하지만 무엇을 만들지, 결과가 맞는지, 무엇을 믿어야 하는지는
여전히 내가 결정한다.

획 하나를 어떻게 그릴 것인가 — 필기엔진 밑그림
필기엔진을 만들며 직접 유도한 삼각함수 수식
왼쪽 — 획 하나를 어떻게 그릴 것인가, 생각을 그대로 옮긴 밑그림.
오른쪽 — 거기에 필요한 각을 구하려 직접 유도한 삼각함수.
덧셈정리가 기억나지 않아 그 자리에서 다시 유도했고, sin으로 풀리지 않자 tan으로 우회한 흔적도 남아 있다.
필요한 공식을 라이브러리에서 찾기보다, 왜 그렇게 되는지부터 다시 손으로 풀던 시절이었다.
1983 · 시작

아버지가 조립해 준 애플 II

아버지는 전파사를 하셨다.
청계천에 부품을 사러 갈 때면 종종 나를 데리고 다니셨고,
그곳을 다니며 산 부품으로 애플 II를 만들어 주셨다.
지금 생각해보면 이미 완성된 기판과 파워서플라이 정도를 조립해주신 것이었겠지만,
어린 눈에는 트랜지스터 하나하나를 납땜해 컴퓨터를 통째로 만들어 주신 줄 알았다.
기성 앰프의 저음이 마음에 들지 않는다며 직접 진공관 앰프를 만들어 쓰셨던 분이기에.

마음에 드는 물건이 없으면 직접 만든다.
아마 그 태도를 가장 먼저 배운 곳이 아버지의 작업대였을 것이다.

저항의 색띠(흑갈적주…)를 외우고, 납땜을 배우고, 라디오 키트를 수십 개 조립했다.
컴퓨터도, 전자기기도
내게는 사서 쓰는 물건이기 전에 뜯어보고 만들어보는 물건이었다.

애플 II 컴퓨터
청계천 부품으로 아버지가 조립해 준 애플 II.
진공관 앰프
기성품이 마음에 안 들면 직접 — 아버지의 진공관 앰프.

이미지(실물 아닌 예시): Marcin Wichary · Nenad Stojkovic, Wikimedia Commons, CC BY 2.0

그 컴퓨터로 친구들과 함께 게임만 하다가
아버지가 동네 컴퓨터학원을 등록해 주셔서 프로그래밍을 배우기 시작했다.
그 시절 처음 배우는 언어는 BASIC.
영어 단어조차 제대로 모르던, 국민학교 4학년이었다.
IF ELSE, FOR NEXT도 흥미로웠지만, 가장 마음에 들었던 명령어는 ON GOTO.
입력값에 따라 프로그램의 흐름이 달라진다는 게 재미있었다.
몇 달 뒤 처음 만든 프로그램은 과목을 고르면 문제를 내주는 퀴즈 프로그램이었다.
12 + 25 = ? 낙동강 주변 평야 이름은?
지금 보면 별것 아니지만, 친구들과 아버지에게 보여줄 때는 꽤 뿌듯했다.

1999~2004 · 미리온시스템

화면을 녹화하고, 칠판을 네트워크에 띄우다

군대를 마치고 복학을 기다리던 때,
비트컴퓨터라는 학원에 들어갔다.
시험을 치러야 들어갈 수 있어 ‘컴퓨터사관학교’라 불리던 곳이었다.
거기서 만난 사람들과 넷이서 회사를 차렸다.
그게 첫 직장이었다.

화면을 녹화하고 편집하는 교육용 저작도구 WinCAM을 만들었다.
개발팀장을 맡았고, 제품 코드의 절반 이상을 직접 작성했다.
원격강의용 화상칠판 WinBoard에는 손글씨 알고리즘을 만들어 넣었다.
이때 처음으로 화면 위의 펜 움직임을 코드로 다루기 시작했다.

WinCAM
WinCAM
— 화면 녹화·편집 저작툴. 온/오프라인 교육시장에서 쓰였다.
WinBoard
WinBoard
— 원격강의 화상칠판. 필기 알고리즘을 처음 넣어본 곳.

회사가 CES에 참가했을 때였다.
전시장을 걷다가 컴팩 iPAQ 앞에서 발이 멈췄다.
손바닥만 한 기계에 펜으로 글씨를 쓰고 있었다.
은색 알루미늄 바디의 매끈한 디자인에 푹 빠져
한국에 출시되자마자 확장팩까지 포함해 풀세트로 샀다.
가격은 150만 원. 당시에는 꽤 큰돈이었다.

그런데 막상 사용해보니 기본 앱들이 하나같이 아쉬웠다.
특히 필기 메모의 필기감이 마음에 들지 않았다.
이 좋은 기계에서 왜 글씨가 이렇게밖에 안 써질까.
아버지가 앰프를 만들 때 했을 법한 생각이 자연스럽게 떠올랐다.

내가 만들어도 이것보다는 잘 만들겠다.

컴팩 iPAQ 3630 포켓PC
컴팩 iPAQ — CES에서 반해, 풀세트 150만 원에 산 그 기계.
포켓PC 기본 필기 메모앱
포켓PC의 기본 필기메모
— 이 필기감이 아쉬워서, 모든 게 시작됐다.

이미지(실물 아님): iPAQ — Andreas Steinhoff, Wikimedia Commons (Attribution) · 메모앱 화면 — 인터넷 예시

그날부터 퇴근 후의 밤이 바빠졌다.
삼각함수와 arctan으로 펜의 방향과 굵기를 계산하고,
곡선을 한 줄씩 그리며 C++ 필기엔진을 처음부터 만들었다.
펜 끝의 움직임이라는 물리 현상을 실시간 수학으로 옮기는 일이었다.
이 엔진은 이후 10년 동안 나를 따라 회사를 옮겨 다녔고,
나중에는 엔진이 나를 회사로 데려가기도 했다.

10년 동안 이어진 필기엔진

R&D 01
R&D 02
R&D 03
R&D 04
R&D 05
R&D 06
곡선 하나를 자연스럽게 그리기 위해 수식을 풀고, 두 원과 픽셀로 그린 밑그림을 코드로 옮겼다.
결과만 보면 작은 선 하나지만, 그 뒤에는 수많은 실패와 계산과 구현이 쌓여 있었다.

두 원과 픽셀의 밑그림이 코드가 되기까지 — 필기엔진 연구 노트

이 엔진으로 만든 개인 제품이 포키패드다.
웹사이트에 신용카드 결제까지 직접 붙였고,
카피당 19,900원에 2,000카피 이상 판매했다.
2008년에는 PC, PocketPC, Windows Mobile, Nexio 등
7개 기종에서 동작했다.

파일 이름보다 문서의 내용을 먼저 보여주는 타이틀뷰도 만들었다.
이름이 아니라 내용을 중심으로 기록을 다룬다는 생각은
2025년의 monolog까지 이어지고 있다.

2008 포키패드 매뉴얼 — 직접 작성한 원본 보기

쓰고 싶은 것이 없으면 직접 만들었다

필기엔진만 만든 것은 아니었다.
내가 쓰려고 일기장과 영어 학습 플레이어, 일정관리 프로그램을 만들었다.
iPaqGuru.com이라는 아이팩 커뮤니티도 직접 운영하며 프로그램을 배포했다.
사용자들은 게시판에 버그를 남겼고,
스킨은 누구든 만들어 붙일 수 있도록 열어두었다.

GDiary
GDiary포켓PC용 일기장 · 2001컴팩 아이팩 경진대회 우수상.
GPlayer
GPlayer어학용 플레이어MP3와 스크립트를 자동으로 맞춰준다. 내 영어공부를 위해 만들었다.
InfoBox
InfoBox통합 PIMS주소록·일정·할일을 하나로. 정리하고 분류하는 성향이 그대로 들어간 프로그램이었다.
2004~2006 · 스마트윈드

개인적으로 만들던 프로그램이
회사의 제품이 되다

이직한 회사의 주력 제품은,
공교롭게도 내가 퇴근 후 만들던 것들과 비슷했다.
통합 일정관리 프로그램 InfoBox,
필기엔진을 탑재한 SmartMemo,
어학 플레이어 Moti-Player.
컨트롤과 UI를 다시 설계했고,
제품은 삼성 PDA를 비롯한 여러 업체의 기기에 번들로 공급됐다.

정작 원작자인 내게 별도 보상이 있었던 것은 아니다.
당시에는 조금 억울했다. ㅎㅎ
대신 중요한 사실을 배웠다.
내가 만든 것은 내가 소유할 수 있어야 한다.

InfoBox
InfoBox — 포켓PC 통합 PIMS(주소록·할일·일정). 모든 인터페이스를 직접 제작.
SmartMemo
SmartMemo필기 메모자체 필기엔진. 삼성 PDA 등 번들.
InfoBox
InfoBox일정·할일커스텀 컨트롤 일체 자체 제작.
Moti-Player
Moti-Player어학 플레이어내 개인작 GPlayer의 회사 제품판.
2006~2008 · 텔미정보통신

SNS 메신저와 UI 라이브러리

SNS 기반 메신저 클릭질을 개발했다.
친구지도, 채팅, 쪽지 같은 기능이 있었고,
스마트폰이 본격적으로 등장하기 전부터
위치와 관계를 결합한 소셜 기능을 다뤘다.

클라이언트의 대부분을 직접 만들었고,
버튼과 리스트 같은 기본 컨트롤부터
회사 공통 Win32 UI 라이브러리까지 구현했다.
제품 하나를 만드는 것을 넘어,
다른 개발자들이 제품을 만들 때 사용할 기반을 만들기 시작한 시기였다.

클릭질 메신저
클릭질 — SNS 기반 메신저(2006). ‘친구지도’ 같은 소셜 개념을, 스마트폰 이전에.
2008~2011 · 민트패스 → 아이리버

필기엔진이 실제 단말기가 되다

텔미정보통신에 다니던 어느 날, 영문 메일 한 통을 받았다.
포키패드를 사용해봤다는 회사였다.
필기 전용 단말기를 개발하고 있는데, 내 엔진을 사용하고 싶다고 했다.
메일을 보낸 사람은 나를 외국 개발자로 알고 있었던 모양이다.
“저 한국인인데요~”
그렇게 답장을 보냈다.

필기엔진은 매년 라이선스 비용을 받고 제공했다.
스마트윈드에서 배운 대로, 이번에는 내 이름으로 소유한 기술이었다.
약 1년 뒤에는 아예 회사에 합류해 직접 제품을 만들었다.
그 단말기가 민트패드다.
회사가 문을 닫은 뒤에는 나를 영입했던 부장님을 따라 아이리버로 옮겨,
UI 라이브러리와 전자사전용 메모 앱을 개발했다.

민트패드
민트패드 — 자체 필기엔진을 품은 필기 전용 단말기. 그 영문 메일이 여기까지 이어졌다.
민트패드 메모 시작 화면
메모 — 시작 화면
민트패드 사용자 필기 화면들
사용자들의 실사용 필기 (2008)
민트패드 펜 팔레트
펜 팔레트 — 연필·형광펜·컬러
2011 · 포키소프트

10년을 기다린 엔진이
아이패드를 만나다

2001년에 만든 필기엔진은 사라지지 않았다.
자신에게 맞는 하드웨어를 기다리고 있었을 뿐이다.
아이패드가 발표되었을 때 바로 알았다.
이거다.
몇 달 동안 엔진을 옮기고 제품을 만들어 UPAD를 출시했다.

출시 몇 달 만에 월 매출 2천만 원을 기록했고,
2011년 애플 앱스토어 ‘올해의 아이패드 앱’ 1위에 선정됐다.
다니던 아이리버를 나와 포키소프트를 설립했고,
이후 수년간 업데이트를 하면서 누적 다운로드는 수백만 건에 이르렀다.

앱스토어 생산성 유료 1위 — UPAD 3
앱스토어 생산성 유료 차트 1위 — UPAD 3. 아래로 GoodNotes, Notability.
필기 노트 — 손글씨·지도·색
플래너 — 캘린더 위 자유 필기
폴더·파일 관리 (UPAD 3)
드로잉 · 가져오기
수식 노트 — 손으로 푸는 공학 수학
UPAD — 노트·플래너·드로잉·파일 관리까지, 10년 C++ 필기엔진의 결정체

현실의 행동을 화면 안으로 옮기다

UPAD의 기능을 설계할 때는 모양보다 행동을 먼저 관찰했다.
종이에 직선을 그을 때 사람은
한 손으로 자를 누르고 다른 손으로 선을 긋는다.
UPAD에서도 같은 방식으로 만들었다.
왼손가락으로 자 버튼을 누른 채 펜을 움직이면 직선이 그어지고,
손가락을 떼면 다시 자유 필기로 돌아간다.
자의 모양을 화면에 그려 넣은 것이 아니라,
자를 사용하는 사람의 두 손을 멀티터치로 옮긴 것이다.

UPAD 자 버튼 실사용 — 왼손 버튼, 오른손 펜
왼손은 자 버튼을 누르고, 오른손은 펜으로 긋는다 — 실제 사용 장면.
UPAD 자·격자 버튼 UI
화면 왼쪽에 떠 있는 자·격자 버튼 — 누르는 동안만 도구가 된다.

이 방식은 이후 제품을 설계할 때도 계속 이어졌다.
기능을 먼저 생각하기보다,
사람이 현실에서 무엇을 하고 있는지를 먼저 본다.

2018 · 포키소프트

개발서적 13권을 들고
두 달간 사라지다

오랫동안 마음에 걸리는 한계가 있었다.
클라이언트 프로그램은 원하는 대로 얼마든지 만들 수 있었지만,
서버까지 포함한 서비스를 혼자 완성할 수는 없었다.
결국 개발서적 13권을 들고 치앙마이로 떠났다.
두 달 동안 연락을 끊고 가장 저렴한 방에 머물렀다.
잠자는 시간을 제외하면 대부분 책을 읽고 코드를 작성했다.
13권을, 두 번씩.

치앙마이 방
아이스박스 위에 올린 모니터 — 나를 다시 만든 두 달의 책상.

못 읽는 메뉴판에서 QR 주문 서비스를 떠올리다

어느 저녁 동네 식당에 들어갔다.
칠판에는 태국어 메뉴만 적혀 있었고, 사진은 한 장도 없었다.
무슨 음식인지 모른 채 손가락으로 아무거나 가리켰다.
나온 국수는 맛이 없었다.
몇 젓가락 먹다 말고 생각했다.
왜 사진 메뉴를 만들지 않았을까.

태국어 칠판 메뉴
칠판에 태국어뿐인 메뉴 — 여기서 뭘 고를 수 있을까.
먹다 만 국수
대충 가리켜 시킨 국수. 몇 젓가락 뜨다 말았다.

곧 이유가 떠올랐다.
메뉴가 바뀔 때마다 다시 인쇄하고
사진을 교체하는 일이 번거롭기 때문이다.
그날부터 식당을 다니며 메뉴판을 사진으로 모았다.
어디에서나 비슷한 문제가 보였다.

모은 메뉴판 ①
모은 메뉴판 ②
모은 메뉴판 ③

해법도 자연스럽게 그려졌다.
테이블마다 QR 코드를 붙인다.
손님이 스캔하면 사진 메뉴가 열리고, 주문하면 점주 앱으로 전달된다.
새 메뉴는 사진 한 장으로 등록한다.
마침 손에는 새로 배운 풀스택 기술이 있었다.

Sketch로 화면을 디자인하고,
React Native로 고객용 앱과 점주용 앱을 만들고,
GraphQL과 Node로 서버를 구축했다.
실기기 데모까지 돌렸다.
실제로 이런 서비스가 보편화된 건 그로부터 몇 년 후였다.

QR 메뉴 주문 서비스 — 실기기 데모(2018)

두 달 뒤 한국으로 돌아올 때는,
웹·서버·iOS·안드로이드를 연결해
제품 하나를 완성할 수 있는 풀스택 개발자가 되어 있었다.
책만 읽고 돌아온 것이 아니라,
실제로 동작하는 서비스를 하나 만든 뒤였다.

못 읽는 메뉴판 → QR 주문 서비스, 그 서사 전체 보기
2018~2019 · 포키소프트

풀스택의 첫 실전과
가장 정직한 실패

몇 년 전부터 다니던 골프 동호회가 있었다.
스크린골프와 필드 모임, 회식이 이어지는 지역 소모임이었지만,
당시에는 이런 모임에 적합한 앱이 마땅하지 않았다.
밴드는 규모가 너무 컸고,
소모임 앱은 게시판과 채팅방 정도만 제공했다.

모임 일정과 정원, 회비를 관리하고
참가자가 생기면 자동으로 그룹채팅이 열리는 앱을 구상했다.
8개월 동안 기획, 디자인, 서버, iOS, 안드로이드를 만들어
클러비를 출시했다.

클러비 — 클럽 찾기
지역·태그 클럽 찾기
클러비 — 모임
모임 · D-day · 회비 · 정원
클러비 — 피드
피드 · 자유게시판
클러비 — 그룹채팅
참가하면 자동 그룹채팅

소프트웨어는 제대로 동작했다.
하지만 서비스는 실패했다.
마케팅을 몰랐고,
누구에게 어떤 이유로 팔아야 하는지도 충분히 정하지 않았다.
1년 동안 서버비만 내다가 서비스를 종료했다.
그때 분명히 배웠다.
소프트웨어는 혼자 만들 수 있지만, 시장까지 혼자 만들기는 어렵다.

그래도 그 8개월이 사라진 것은 아니었다.
클러비를 만들며 정리해둔 재사용 코드 덕분에,
다음 직장인 지바이크에서는
모바일 앱을 4개월도 되지 않아 완성할 수 있었다.

제품은 사라졌지만,
코드는 다음 제품에서 계속 일했다.
2019 · 지바이크

회사에서도 네 개의 앱을
혼자 만들다

공유 스쿠터 서비스 지쿠터의
사용자 앱과 관리자 앱을 개발했다.
iOS와 안드로이드를 합쳐 네 개의 앱이었다.
서버팀은 1~2명에서 10명으로 늘어났지만,
모바일 개발은 3~4년 동안 나 혼자 담당했다.
대표가 업계 모임에서 모바일 개발자가 한 명이라고 말하면,
상대는 잘못 들은 줄 알았다고 한다.

지쿠터 사용자 앱 — 지도
지쿠터 · 사용자
지바이크 관리자 앱 — 배치 지도
관리자 · 배치
지바이크 관리자 앱 — 일괄 작업
관리자 · 일괄

문구와 화면 수정 요청이 잦아서,
화면을 데이터로 정의하고
서버의 응답에 따라 구성하는 프레임워크 NEO도 만들었다.
당시에는 이런 구조에 이름이 있다는 것을 몰랐다.
나중에야 SDUI, Server-Driven UI라는 개념이 이미 존재하고
여러 대형 서비스가 사용하고 있다는 것을 알게 됐다.

메인 앱은 세 번에 걸쳐 갈아엎었고,
마지막 버전은 NEO 위에 다시 지었다.
화면이 곧 스크립트라서, 국가마다, 언어마다,
다른 모양과 색, 다른 레이아웃과 내용을 구현할 수 있었다.

지쿠(GCOO) 3세대 메인 앱 — 홈
3세대 메인 앱 — 홈
지쿠 — 지도에서 찾고 QR로 대여
지도에서 찾고, QR로 빌린다
지쿠 — 탑승 화면 다크 모드
탑승 · 반납 — 다크 모드

화면 밖의 세계를 움직이기 시작하다

입사할 때 다섯 명이던 본사 인원은 7년 사이 100명 가까이 늘었고,
수거와 배치를 맡는 캠프 인원까지 더하면 300명이 넘는다.
연간 매출 1천억 원에 가까운, 국내 최대 공유 스쿠터 기업이 됐다.

그런데 스쿠터를 어디에 놓고 언제 거둘지는
여전히 현장의 감과 경험에 기대고 있었고,
수요를 잘 읽는 캠프와 그렇지 못한 캠프의 차이가 데이터에 보였다.

그래서 그동안 쌓인 탑승 데이터에
날씨와 기온, 요일, 일출·일몰 시간, 미세먼지, 지역 축제 일정 같은
외부 요인을 더해 학습시킨 배치추천 모델을 만들기 시작했다.
그것이 GROUND Sherpa다.

GROUND Sherpa 배차추천
GROUND Sherpa — 권역별 ‘배치 필요 / 수거 필요’를 추천하는 fleet 운영 ML. 예상 개선치까지 산출.
2025 · monolog

3년 동안 묵혀둔 아이디어를
LLM으로 완성하다

아이디어는 예고 없이 떠오른다.
노트 앱을 열고 제목을 뭐라고 붙일지 고민하는 사이,
정작 적으려던 생각이 사라지곤 했다.
그래서 제목도 형식도 없이,
나에게 채팅을 보내듯 적는 기록 앱을 구상했다.
그게 monolog다.

바라는 것은 둘이었다.
적어둔 말이 알아서 일정과 알림이 될 것.
기록이 10년 넘게 쌓여도, 언제든 쉽게 찾을 수 있을 것.

하지만 ‘이번 주 토요일’, ‘내일 저녁 7시’처럼
상대적인 시간을 이해하고 기록을 자동으로 분류하는 일은
문자열 파싱만으로 해결하기 어려웠다.
그래서 기획서까지 써 두고도,
아이디어를 그대로 묵혀두었다.

ChatGPT가 등장한 뒤 내가 가장 먼저 시험한 것은
‘이번 주 토요일’과 ‘내일 저녁 7시’를 제대로 이해할 수 있는가였다.
여러 언어에서도 가능하다는 것을 확인한 날부터, 다시 만들기 시작했다.

monolog — 나에게 채팅하듯 기록
제목 없이, 나에게 채팅하듯
monolog — 상대 시간이 일정이 된다
‘내일 저녁 7시’가 일정이 된다
monolog — 메모가 할 일과 알림이 된다
메모가 할 일과 알림이 된다
monolog — 한 단어로 과거 검색
‘여행’ 한 단어로 과거를 찾는다

내가 그린 이 서비스의 완성형은 모든 흐름이 연결되어 있어야 했다.
언제 어디서나 적고, 어디서든 꺼내 볼 수 있을 것.
출근길에 떠오른 생각은 폰에 적고,
회사에서는 PC와 웹으로 이어 보고,
웹 서핑 중에는 크롬 확장으로 끌어다 저장하고,
공용 PC에서는 QR 코드로 로그인해 확인한다.
서버, 모바일, 웹, 크롬 확장 — 그래서 모두 만들었고 끊김없이 연동된다.

모바일 — 혼잣말처럼 기록
데스크탑 — 한 기록, 모든 기기
웹 + QR 로그인
크롬 확장 — 웹에서 바로

다국어에도 욕심을 냈다.
나에게 채팅하듯 기록을 모으는 사람은 전 세계에 있을 테니,
기왕 LLM을 쓰는 김에 최대한 열어두기로 했다.
40여 개 언어를 번역해 적용했다.
그 언어들이 쓰이는 나라를 세면, 130여 개국이 넘는다.

번역만 한 것이 아니다. 41개 언어의 스토어 스크린샷도 모두 따로 제작했다.

← 마우스를 좌우로 움직여 보세요 (모바일: 손가락으로 쓸기) →

기술이 준비되지 않았을 때는 기다리고,
가능해지는 순간에는 제품으로 옮긴다.
UPAD가 아이패드를 기다렸듯,
monolog는 LLM을 기다린 셈이다.

로컬 퍼스트가 DB 엔진이 되기까지 — monolog 연구 노트
monolog.ing — 직접 써보기
사고법 · 일하는 방식

먼저 머릿속에서 작동시킨 뒤,
만든다

나는 기능을 하나씩 쌓으며 제품의 형태를 찾는 편이 아니다.
먼저 사용 장면을 생각한다.
사람이 어디에서 무엇을 누르고, 그다음 어떤 일이 일어나야 하는지
머릿속에서 여러 번 작동시켜 본다.
흐름이 선명해지면 그때 코드를 작성한다.
아이패드를 처음 본 뒤 몇 달 만에 UPAD를 만들 수 있었던 것도,
기술보다 먼저 완성된 사용 장면이 머릿속에 있었기 때문이다.

현상에서 원리를 거꾸로 추론한다

일상에서도 비슷하다.
식당에서 간짜장의 이름이 어디서 왔는지 생각하고,
자동차 번호판의 글자가 어떤 규칙으로 정해졌는지 추론한다.
표면에 보이는 현상에서 규칙을 찾고,
가설을 세운 뒤 반례를 대입한다.
간짜장·LA갈비·자동차 번호판 — 실제 추론 장면 보기

데이터를 다룰 때도 같은 방식으로 생각한다.
이 피처가 실제 원인을 설명하는가.
아니면 결과를 원인처럼 보이게 만드는가.
이 숫자는 정말 좋은 성능인가.
혹시 데이터가 미래를 미리 보고 있는 것은 아닌가.
연구 방법을 따로 배운 뒤 생긴 습관이라기보다,
오랫동안 세상을 바라보던 방식이 데이터에서도 그대로 작동한 것이다.

숫자를 보기 전에 대략적인 크기를 잡는다

어릴 때부터 계산하기 전에,
답이 대략 어느 정도여야 하는지를 먼저 생각하는 버릇이 있었다.
IQ 테스트에서 가장 자신있던 문제도
수열의 다음 숫자나 도형의 다음 배치를 맞히는 문제였다.

지금도 데이터를 보면 먼저 범위를 떠올린다.
MAE 1.03, 상관계수 0.956, 수익률 400%.
계산상 가능하더라도
예상 범위를 지나치게 벗어나면 일단 의심한다.
그 감각이 여러 번 오류를 찾아냈다.

지금 · 배차추천 ML (GROUND Sherpa)

데이터가 물리 세계에
개입할 때 필요한 검증

스쿠터를 어디에 배치하고 언제 수거할지
추천하는 머신러닝 시스템이다.
최근에 코드 작성은 AI에 맡긴다.
대신 어떤 데이터를 사용할지, 어떤 피처가 현실을 설명하는지,
결과를 어디까지 믿을지는 직접 판단한다.

MAE가 갑자기 1.03까지 낮아졌을 때는
좋은 결과라고 받아들이기보다 미래 정보 누수를 의심했다.
상관계수 0.956이 나왔을 때도 마찬가지였다.
데이터를 나누어 살펴보니 예측력이 아니라,
현장 작업이 늦게 반영되면서 생긴 착시에 가까웠다.
실험 결과가 계속 이상하게 나왔을 때
AI는 모델의 한계나 데이터의 불규칙성을 원인으로 제시했다.
하지만 데이터 생성 과정부터 다시 확인했고,
shift(24)가 24시간 전이 아니라
24개 레코드 전을 가리키고 있다는 버그를 찾았다.

현실의 데이터는 깔끔하지 않다.
교재나 경진대회의 정제된 샘플 데이터가 아니다.
희소하고, 늦게 도착하고, 사람의 작업과 운영 상황이 뒤섞여 있다.
그래서 모델의 정확도만 높이는 것으로는 충분하지 않았다.
KPI도 예측 정확도에서
‘스쿠터 한 대가 하루 동안 만드는 트립 수’로 바꾸었다.
모델의 목적은 정답을 잘 맞히는 것이 아니라,
실제 배치를 통해 운영 가치를 만드는 것이기 때문이다.

추천 하나에 트럭이 움직이고,
스쿠터 수백 대의 위치가 달라진다.
데이터가 물리 세계에 개입할 때 필요한 검증을,
실제 프로덕션 환경에서 하고 있다.

배차추천 ML 대시보드
권역(res9 셀)별 배치·수거 추천 + 예상 개선치. ‘예측 잘하기’가 아니라 ‘배치로 가치 만들기’로 KPI 자체를 다시 정의했다.
배치/수거 추천
운영 작업 로그
데이터를 의심하는 법 — 배차 ML 연구 노트
지금 · 주식 자동매매 (StockPattern)

손실이 가르쳐 준,
57개 피처의 의미

코로나 이후, 누구나 주식으로 돈을 벌던 시절이었다.
10년 된 연금저축의 수익률이 얼마 되지 않는 것을 확인하고,
해지한 돈을 아내와 반씩 나누어 각자 투자를 시작했다.
아내는 바로 삼성전자 같은 대형 우량주를 샀다.
나는 PER, PBR, 이동평균선, 장대양봉 같은 기초 용어도 모르면서 시작하는게 싫어서
큰돈을 들여 영상 강의를 듣고, 도서관에서 주식책을 빌려 용어부터 배웠다.

그러다 꽂힌 책이 “세력주/급등주 따라잡기”.
기업 가치나 재무제표 같은 투자 원칙은 뒤로한 채
차트와 보조지표만 보며 잡주에 투자했고,
오랫동안 손실도 보았다.
그 경험은 나중에 자동매매 엔진이 학습하는
57개 피처의 의미가 됐다.
보조지표를 단순히 가져다 쓰지 않고,
보조지표의 이동평균과 변화량을 다시 구성했다.

매매하면서 한 가지를 체감했다.
차트의 지표는 단순한 숫자가 아니라,
수많은 매매자의 심리가 압축된 흔적이라는 것이다.
그 잠재 패턴을 머신러닝이 찾아낼 수 있다고 생각했다.

첫 백테스트에서 연간 수익률이 400%를 넘었을 때도
좋아하기보다 먼저 코드를 확인했다.
결과적으로 미래의 값을 보고 매수하는 인덱스 버그가 있었다.
좋은 결과였지만, 폐기했다.
이후 모델을 여러 차례 다시 만들었고,
정보 누수 가능성을 전수 조사했다.
그 과정에서 알파의 82%가 사라졌다.
그래도 남은 결과를 선택했다.
높은 숫자보다, 실제로 재현 가능한 숫자가 중요하기 때문이다.

자동매매를 만들며 얻은 것은 매매 기술만이 아니었다.
손실을 통해 체득한 도메인 지식,
수치를 보기 전에 이상함을 감지하는 감각,
성과가 좋을수록 더 강하게 의심하는 습관이었다.

라이브 대시보드
매매엔진 스펙
차트뷰(일봉)
차트뷰(분봉)
직접매매(매수)
직접매매(매도)
손실이 만든 피처 — 주식 자동매매 연구 노트
다음 · 피지컬 AI

열일곱살에 반한 문장을,
30여 년 만에 다시 만나다

고등학교 2학년 때,
친구의 형이 다니던 학과를 알게 됐다.
학과 소개에는 이런 내용이 있었다.

“프로그래밍을 배우고, 기계공학을 바탕으로
공장자동화와 로봇 시스템을 설계하고 구현한다.”

그 문장에 반해버렸다.
선생님은 서울대를 권했지만,
나는 인하대학교 자동화공학과를 선택해 수석으로 입학했다.
그리고 오랫동안, 그 문장을 잊고 지냈다.

요즘은 피지컬 AI 회사들의 소개와 채용 공고를 읽는다.
프로그래밍, 기계공학, 자동화, 로봇.
열일곱살의 나를 설레게 했던 문장들이,
30여 년 만에 다시 눈앞에 있다.

이론은 나보다 잘 아는 사람이 많다.
지금의 내가 가져갈 수 있는 것은
직접 만들어보고, 실패하고, 손실을 보고,
그 과정에서 생긴 의심을 시스템으로 바꾸어온 경험이다.

내가 하려는 일은
연구된 모델이 현실의 데이터와 운영 속에서
실제로 작동하게 만드는 것이다.
예측이 행동이 되고,
행동의 결과가 다시 데이터로 돌아오는 회로.
그 회로를 스쿠터와 주식에서 이미 만들어 보았다.

Windows CE에서 iOS로,
클라이언트 개발자에서 풀스택 개발자로.
이미 두 번의 큰 전환을 건넜다.
지금, 세 번째 전환을 준비하고 있다.

증거

27년간 검증 가능한 기록

  • 2011애플 앱스토어 ‘올해의 아이패드 앱’ 1위 — UPAD
  • 2006HP 애플리케이션 공모전 수상 — 포키패드
  • 2003제1회 네스팟 스윙 포켓PC 컨테스트 수상 — InfoBox
  • 2001제1회 컴팩 아이팩 포켓PC 경진대회 우수상 — GDiary

혼자 만든 앱들은 App Store에서만 373만 건 다운로드됐다.
UPAD Lite 한 개의 다운로드만 215만 건이고,
유료 앱인 UPAD for iCloud도 56만 카피가 팔렸다.
2001년부터 10여 년 동안 새로운 제품을 만들 때마다 외부의 평가를 받았고,
그 기록은 지금도 확인할 수 있다.

App Store Connect 판매 대시보드 — 누적 373만 건
App Store Connect 판매 대시보드
— 2010.3 ~ 2026.7 누적 3.73M. UPAD Lite 2.15M, iColoringBook Lite 837K, UPAD for iCloud 562K…
kimtaejin@gmail.com
010-3788-4288
김태진 · 포키소프트 — 기획 · 디자인 · 풀스택 개발 · AI 레버리지