4인 팀에서 「Solar for Bid」의 기획과 AI 파이프라인을 맡았습니다.
Portfolio
Introduction
소개
정운
문서를 다루는 일을 에이전트로 돌리고 그 결과가 정말 맞는지 재는 하네스를 만듭니다.
결과를 내기 전에 맞고 틀림을 가릴 방법부터 마련합니다. 코드는 주로 Claude Code가 쓰고 저는 무엇을 잴지 정한 다음 나온 결과를 다시 셉니다.
PMS
대표작 01 · 프로젝트 관리 시스템Featured 01 · 아키텍처 설계 · v0.6 – v0.40 · 2026.09.28 – 10.13

「PMS」는 여러 조직이 계정과 권한을 나눠 함께 쓰도록 만든 프로젝트 관리 웹 시스템입니다. 인터넷 연결 없이 Node.js만으로 띄우는 것을 조건으로 에이전트와 만들고 있습니다.
일정(WBS와 간트)과 진척, 요구사항, 산출물, 이슈와 위험, 테스트와 결함, 게시판과 채팅을 한 곳에서 다룹니다. 아키텍처는 제가 설계했고 개발은 Codex와 Claude Code가 했습니다.
판을 낼 때마다 자동 검사를 다시 돌립니다. 몇 판은 고친 범위만 돌렸습니다. 전체 검사는 v0.7의 57건에서 v0.40의 1,217건이 됐습니다. 그 사이 두 번은 Claude에게 평가를 따로 맡겼고, 나온 결함은 일부를 빼고 뒤 판에서 고쳤습니다.
Screens
PMS 화면PMS v0.40 · 가상 자료 · 2026.10.13 캡처


화면은 흑백을 기본으로 하고 색은 뜻이 있는 곳과 그래프에만 씁니다. 실패와 지연은 빨강, 보류는 주황, 성공은 초록이고 그래프는 계획이 회색, 실적이 파랑입니다. v0.40에서 스타일 파일 31개의 꾸밈 색 1,483곳을 같은 밝기의 무채색으로 옮겼습니다. 이 페이지에는 색을 빼고 실어서 그 구분이 보이지 않습니다.
테스트 관리는 v0.39에서 넣었습니다. 테스트 계획, 시나리오와 케이스, 차수별 수행, 결함 조치를 계정 하나로 이어서 처리합니다. 상용 도구를 붙이지 않고 직접 만드는 쪽을 골랐습니다.
Checks
PMS 검사와 평가전체 검사 기록 2026.09.28 – 10.13 · 평가 두 번(v0.9 · v0.37)
전체 실행 수치가 있는 판 가운데 열두 행만 실었습니다. v0.21과 v0.24 – v0.26은 고친 범위의 검사만 돌려 전체 수치가 없습니다. v0.23, v0.27, v0.34는 전체 실행 뒤에 마지막 수정이 있었고 그 뒤에는 관련 검사만 돌렸습니다(v0.23 3 / 3 · v0.27 1 / 1과 4 / 4 · v0.34 104 / 104). v0.28 뒤로는 v0.34와 v0.37 – v0.40의 전체 실행 값만 옮겼고, v0.37 – v0.40은 최종 빌드 값입니다. 검사 수는 테스트 러너가 센 항목 수이고 상위 묶음도 한 항목으로 셉니다. 모두 Windows에서 돌린 개발 중 자동 검사이며 사용 기록이 아닙니다.
v0.9는 Claude 평가 워크플로우에 따로 맡겼습니다. Claude가 역할별 계정 6개로 한 주 분량의 업무 시나리오를 API로 실행하고, 평가하면서 만든 기능 점검표 45항목과 대조했습니다. 필수 21건 가운데 충족은 1건(부분 충족 15 · 없음 5)이었고 작성자가 자기 산출물을 승인할 수 있었습니다. v0.12에서는 로그인 비밀번호 검증 조건을 지워도 검사 183개가 전부 통과했습니다. 그 뒤 v0.13에 틀린 비밀번호를 401로 거부하는 검사가, v0.14에 자기 승인 금지와 변경 전후 기록이 들어갔습니다. v0.27을 같은 점검표로 다시 평가하지는 않았습니다.
v0.37은 2026.10.12에 Claude에게 다시 평가를 맡겼습니다. 릴리스 ZIP을 임시 폴더에 풀어 실행하고 전체 검사 868건을 다시 돌려 같은 값을 얻었습니다. 회원 200명, 업무 2,000건, 프로그램 1,500본을 넣고 부하를 재 보니 그 PC에서는 100명까지가 한계였고 200명은 포화였습니다. 평가에서 나온 결함은 기존 결정대로 둔 몇 가지(로그인 잠금 정책 등)를 빼고 같은 날 v0.38에서 고쳤고, 수정에 참여하지 않은 검증에서 회귀가 없었습니다. 실제 운영 환경에는 아직 올려 보지 않았습니다.
인터넷 없이 돌아야 한다는 조건이라 실행본은 ZIP 하나입니다. 풀어서 Node.js 24.18 이상으로 실행하면 패키지 설치나 CDN 접속 없이 뜹니다. 같은 서버 코드가 Worker 형식(D1)과 Node.js(내장 SQLite) 두 실행 환경에서 돌고, 자동 검사도 두 DB에서 돌립니다. 설치본은 v0.6을 PC 한 대에 한 번 풀어 실행 파일과 DB 파일이 생긴 것까지 확인한 것이 전부이고, 그 뒤 갱신하지 않았습니다.
아키텍처 설계는 제가 했고 개발은 v0.37까지 Codex가, v0.38부터 Claude Code가 했습니다. 코드 작성, 검사 실행, 패키징과 배포가 개발에 들어갑니다. 모든 역할이 자기가 올린 것을 스스로 승인하지 못하게 한 것, 대시보드 진척은 주마다 저장한 WBS 파일 한 판을 기준으로 삼는 것, 기존 자료를 지우지 않고 새 프로젝트는 빈 상태로 여는 것을 제가 골랐습니다. v0.38에서는 승인할 수 없는 사람의 범위를 현재 담당자와 마지막 승인 뒤 내용을 고친 사람까지 넓히고, 공식 진척 값을 말단 작업의 단순 평균으로 통일하기로 했습니다.
Featured
대표작 02
quote-review
이 화면에서는 인용 793칸이 원본 PDF에 실제로 있는지 사람이 한 칸씩 확인합니다. 인용은 문서 AI가 공공기관 채용공고에서 뽑았습니다. 대조 격자 여덟 칸과 그 줄의 자리를 나란히 놓고 칸마다 원문에 있는지, 없는지, 판단할 수 없는지 가운데 하나를 고릅니다.
무작위 스무 칸 중 넷이 격자와 어긋났는데 그중 둘은 격자가 잡을 수 없는 종류였습니다.
스무 칸은 표본일 뿐이고 793칸의 사람 판정은 아직 0입니다.
공공기관 채용공고 20건으로 Upstage Studio를 시험해 봤습니다. 제 에이전트 19개는 노드 14종 가운데 4종을 썼습니다. 같은 문서를 두 번 넣었더니 값이 달라졌습니다.
같은 PDF를 읽기 순서만 바꿔 읽었습니다. 채용공고 104건 중 94건(90.4%)에서 글자는 같은데 순서만 달라졌습니다. 처음엔 121건으로 발표했지만 사본 17건이 섞여 있어 바로잡았습니다.
PDF에서 0.25em 이상 벌어진 자리에 공백이 안 들어가는 비율은 Type 3 글꼴이 79.0%, Type 0이 1.5%입니다. 재는 단위를 잘못 잡아 나온 99.9%를 첫 발표 뒤에 고쳤습니다.
Harnesses
검증 하네스집계 대조(건수 + 금액 합계) 단계까지만 보면 일곱 종이 잡히지 않습니다.
결함 열한 종을 심은 합성 원장으로 이행 검증을 네 겹으로 나눠 쟀습니다. 건수와 금액 합계만 맞춰 보고 끝내면 열한 종 중 일곱 종이 그대로 빠져나갑니다.
설계·측정 정운 · 구현 Claude Code1.000은 라벨이 도구의 오탐 둘을 덮은 값이었습니다. 그 둘을 틀린 것으로 세면 97/99 = 0.980입니다.
옵시디언 위키링크가 실제로 어디로 가는지 따져서 안 가는 것만 사유를 붙여 보고합니다. 발표한 정밀도 1.00은 도구의 오탐 둘이 라벨에 묻힌 숫자여서 0.980으로 정정했습니다. 재현율은 재지 않았습니다.
설계·측정 정운 · 구현 Claude Code
도로교통법 조문 10건을 사람과 파이프라인이 따로 분류하고 요약했습니다. 본문을 한정하는 단서 4건 중 요약에 살린 것은 사람 0건, LLM 0~1건이었습니다. 기계 스캔을 붙이자 4건이 모두 잡혔습니다.
설계·측정 정운 · 구현 Claude Code짙은 띠가 무작위 추측의 95% 구간입니다. 어떤 방법도 이 띠를 넘지 못했습니다.
자동차 리뷰 댓글의 감정을 가르는 분류기를 골든셋 198건과 부트스트랩 95% 구간으로 평가했습니다. 가장 나은 SBERT도 macro F1이 0.376으로 무작위 추측(0.329)과 구분되지 않습니다.
설계·측정 정운 · 구현 Claude CodeVault
지식 온톨로지Obsidian 볼트 · 2026.07.30부터 · 2026.10.14에 잰 값
허브 41편이 주제별 입구입니다. 위키링크 14,925개 중 99.6%가 실제 노트나 파일로 이어집니다.
공부와 프로젝트에서 쌓은 기록 990편을 Obsidian 볼트 하나에 모았습니다. 노트마다 종류와 상태를 붙이고 노트 사이의 관계를 링크로 적어, 흩어진 메모를 서로 이어지는 지식 그래프로 만들었습니다.
노트에는 종류(type) 34가지와 상태(status) 32가지 중 하나씩을 붙입니다. 자료, 분석, 학습, 결정, 허브처럼 무엇인지를 종류로 나누고, 초안에서 확정까지 어디쯤인지를 상태로 적습니다. 관계는 위키링크와 related, source 필드로 남깁니다. 위키링크 14,925개 중 14,872개(99.6%)가 실제 노트나 파일로 이어지고, 어떤 링크도 주고받지 않는 노트는 12편입니다.
이 규칙은 볼트 맨 위와 폴더 14곳의 지침 파일에 적어 두었습니다. Claude Code와 Codex는 노트를 쓰기 전에 그 지침을 읽고 같은 종류와 상태를 씁니다. 에이전트가 쓴 초안은 seed 상태로 남겨 제가 검토하기 전임을 표시합니다. 바뀐 내용은 5분마다 git에 자동으로 커밋되고, 2026.07.30부터 커밋 1,349개가 쌓였습니다.
링크가 실제로 어디로 가는지 따지는 도구는 wikilink-audit로 따로 만들어 공개했습니다.
Shipped
배포와 도구
나라장터 용역 입찰공고 메타데이터를 매일 05:00(KST)에 예약 수집합니다. 수집이 불완전하면 파일을 만들지 않고 실패합니다. 2026.08.31–09.28, 29일 중 25일을 저장했습니다.
설계·측정 정운 · 구현 Claude Code
점성술 공부 사이트입니다. 출생 차트 휠을 지도처럼 끌고 확대하며 해설을 읽을 수 있습니다. 행성 위치를 Swiss Ephemeris 기준값과 대조해 최대 차이 0.004°를 README에 적었습니다.
설계·측정 정운 · 구현 Claude Code문서 작업에는 코드처럼 빨간 줄을 띄워 줄 판정자가 없어서 하나 만들어 넣었습니다.
장문 문서 작업을 에이전트에 맡길 때 틀린 결과가 조용히 넘어가지 않게 판정 루프를 짰습니다. 여기 규칙은 미리 설계해 둔 것 하나 없이 전부 무언가를 틀린 다음에 생겼습니다.
설계·측정 정운 · 구현 Claude Code이미 끝낸 편집 넷을 다시 돌리자 결과가 0건으로 모이지 않고 세 종류로 나뉘었습니다. 파일 이름은 가렸습니다.
일괄 텍스트 편집에 영수증을 붙입니다. 시킨 건수와 바뀐 건수가 다르면 아무 파일도 쓰지 않습니다. 기대 건수의 기본값은 「1 이상」이 아니라 정확히 1입니다.
설계·측정 정운 · 구현 Claude Code마크다운 노트의 문항을 터미널에서 간격 반복으로 풉니다. 진도를 노트 옆 마크다운 표에 써서 기기 사이에 따라가게 합니다.
Public star-cards생년월일로 9:16 별자리 카드 일곱 장을 만들어 저장·공유하는 정적 사이트입니다. star-voyage의 계산 엔진을 그대로 씁니다.
Live이 파이프라인은 아이디어 한 줄을 기획·판단·설계·구현·검증·배포로 끌고 갑니다. 단계마다 사람 게이트가 섭니다.
Private엑셀 WBS 진척관리를 웹으로 옮겼습니다. 주차 스냅샷을 쌓아 지난주 대비 변화를 먼저 보여 줍니다.
Private폐쇄망 운영을 위한 프로젝트 관리 시스템입니다. 계정·권한, 대시보드, 채팅·게시판, CSV·XLSX WBS 분석을 담았습니다.
PrivateMABC 결선작 「다시, 한 걸음」과 그 고도화 판입니다. 청년정책 탐색과 필요서류·신청 준비를 돕습니다.
Private야구 커리어 게임
브라우저 게임개인 프로젝트 · 2026.10.01부터 · 엔진 0.31.0 · 배포판 캡처 2026.10.14




고3부터 은퇴까지 야구 선수 한 명의 삶을 한 달씩 이어가는 브라우저 게임입니다. 훈련과 경기뿐 아니라 계약, 부상, 인간관계, 생활 속 선택이 커리어를 만듭니다.
플레이할 수 있는 사건 1,500개, 공개 특성 300개, 칭호 41개가 들어 있습니다. 국내 리그는 가상의 10개 구단이 팀당 144경기와 포스트시즌을 치르고, 드래프트에서는 후보 176명 가운데 110명을 11라운드에 걸쳐 지명합니다.
숫자는 시뮬레이션으로 잽니다. 10개 세계를 5년씩 돌려 타율, 출루율, 장타율, 경기당 득점, 평균자책점 같은 지표가 정해 둔 범위를 벗어나면 검사가 실패합니다. 한 세계를 30년 동안 돌려 세대교체 뒤에도 리그가 안정적인지도 확인합니다.
게임 기획은 제가 했고 개발은 Claude Code와 Codex가 했습니다. 게임 이름은 아직 정하지 않아 작업명으로 부릅니다.
Experience
대회개인으로 참가해 결선에 올랐고 결선작 「다시, 한 걸음」을 기획했습니다. Hermes 안의 Solar Pro 4에 구현을 지시하고 검증해 포스터 세션에서 발표했습니다.
one-step-beta.vercel.app5인 팀의 데이터·배치 담당으로 대시보드 집계 쿼리를 썼습니다. 합성 로그와 숫자 대조 스크립트를 고쳐 검증한 뒤 9월 20일에 제출했습니다.
파인튜닝이 금지된 고정 LLM으로 공고 한 건의 검토 항목 24개를 판정하는 파이프라인을 만들었습니다.
Solar for Bid
입찰 문서 에이전트JunctionX Korea 2026 · Upstage 트랙 · 2026.08.21 – 08.23

회사 서류를 한 번 올려 두면, 고른 입찰 공고마다 참가 자격 판정과 요구사항 체크리스트, 제출 서류 점검표를 근거 쪽과 함께 내는 문서 에이전트입니다.
입찰은 서류 하나가 빠져도 탈락할 수 있습니다. 그래서 그럴듯한 답보다 틀렸을 때의 처리가 더 중요했습니다. 모델의 답은 최종으로 받지 않고 백엔드가 한 번 더 셉니다.
Deck
Solar for Bid 화면 시안JunctionX Korea 2026 · Upstage 트랙 · 발표 자료 25장 중 12 · 14 · 15쪽



JunctionX Korea 2026 발표 자료 25장 가운데 화면 시안이 든 12 · 14 · 15쪽입니다. 슬라이드와 화면 디자인은 팀 디자이너가 했습니다. 화면에 들어간 판정 규칙은 제가 쓴 기획 문서에서 왔습니다.
화면은 디자인 시안이고, 실행 화면은 싣지 않았습니다. 가상 회사 이름과 데모 공고 한 건의 이름·번호, 요구사항 ID, 일부 서류 이름 같은 글자는 회색 막대로 가리거나 지웠습니다.
14·15쪽의 영어 설명은 발표 자료 문구 그대로입니다. WBS와 제출 점검표는 Studio가 아니라 백엔드가 부르는 Solar가 만들었습니다.
Pipeline
Solar for Bid 파이프라인JunctionX Korea 2026 · Upstage 트랙 · 공고 한 건이 지나가는 길
발표 자료 16쪽의 파이프라인을 우리말로 줄여 옮겨 그렸습니다. 「사람이 결정」 표시가 붙은 곳은 04 추천과 07 제출 준비 두 군데입니다.
캐시를 쓰면 공고 한 건에 약 4분이 걸렸습니다(한 번 잰 값).
읽기는 Studio 에이전트가, 판정은 백엔드가 부르는 Solar가 맡습니다. 저희 계정의 Studio 판정 노드가 작업 4건 모두 입력과 무관하게 같은 64자 샘플을 돌려줘, 프롬프트는 두고 실행 위치만 백엔드로 옮겼습니다.
저는 기획서와 판정 규칙을 썼습니다. 피해야 할 표현 세 곳을 일부러 넣은 가상 문서로 시험하자 모델은 0곳을 돌려줬고, 백엔드에 쪽마다 같은 표현 목록을 찾는 검사를 더하자 세 곳이 모두 잡혔습니다.
미리창구
시니어 금융 연습원티드 AI Championship 2026 · 데이터·배치 · 2026.09.06 – 09.20




「미리창구」는 시니어가 실제 돈이 오가지 않는 연습 화면에서 송금·공과금 납부·자동이체를 연습하는 웹 서비스입니다. 어디서 왜 막혔는지는 익명 집계로 금융회사 담당자에게 보여 줍니다.
화면은 AI가 만들지 않고 매번 같은 고정 화면을 씁니다. 그래야 어느 단계에서 이탈했는지 비교할 수 있습니다. 심사 전에는 실사용자가 없어, 팀 하네스의 합성 데이터 생성기가 대시보드를 채웠습니다.
Screens
미리창구 담당자 대시보드원티드 AI Championship 2026 · 배포판 캡처 · 2026.10.01

화면 설계와 구현은 다른 팀원들(디자인 · 풀스택 · 실시간 LLM 담당)이 했고, 팀 동의를 받아 실었습니다. 제가 맡은 쪽은 이 화면에 나오는 숫자와 AI 제안 문장입니다.
Data
미리창구 데이터·배치원티드 AI Championship 2026 · 합성 데이터가 대시보드에 닿기까지
모두 합성 데이터이며 실제 시니어의 사용 기록이 아닙니다. 생성기 뼈대는 팀 하네스에서 왔고, 저는 앱 규칙에 맞게 고치고 적재 SQL·대조를 맡았습니다.
저는 데이터·배치를 맡아 팀 하네스의 집계 쿼리 초안 4종을 8종으로 늘렸습니다. 넘겨받은 합성 데이터 생성기에서는 앱이 낼 수 없는 숫자(한 단계 힌트 2회, 확인 화면 오류)를 찾아 그 칸만 고쳤습니다.
같은 숫자를 원본 이벤트·집계 CSV·정적 CSV·대시보드 캡처 네 곳에서 맞춰 봤고, 디자인 병합 전 운영 대조에서는 API와 배포 CSV 216칸이 기대값과 모두 일치했습니다. 실행은 상당 부분 Claude Code가 했고, 방향 결정과 결과 확인은 제가 했습니다.

넘겨받은 합성 데이터를 앱 규칙에 맞게 고쳐 적재 SQL로 만들었고(운영 DB 적용은 풀스택 담당), 9월 14일에 화면 뒤 API 값을 기대값과 한 칸씩 대조했습니다.
My
Education
학력가운데 결과는 검증 없이 그대로 넘어갔습니다.
부트스트랩 10,000회 · macro F1 0.376 (0.307 – 0.443)
산업인공지능학과와 ICT융합학부를 복수전공하고 2026년 8월에 졸업했습니다.
4인 팀 「Slack을 이용한 데이터 리포팅」에서 댓글 수집과 Superset 대시보드, 파이프라인의 양 끝단을 맡았습니다. 감정분석은 그때 맞는지 따져 보지 않았고 2026년에 youtube-sentiment-pipeline으로 다시 만들었습니다.
Contact
연락처정운
문서를 다루는 일을 에이전트로 돌리고 그 결과가 정말 맞는지 재는 하네스를 만듭니다.

