화면과 그림을 붙인 열아홉 장짜리 포트폴리오는 serenwoon.github.io/portfolio에 있습니다. 바로 열어 볼 수 있는 것은 quote-review, g2b-daily, star-voyage, star-cards, 다시, 한 걸음, 야구 커리어 게임 여섯입니다.
「PMS」는 여러 조직이 계정과 권한을 나눠 함께 쓰도록 만든 프로젝트 관리 웹 시스템입니다. 인터넷 연결 없이 Node.js만으로 띄우는 것을 조건으로 에이전트와 만들고 있습니다.
일정(WBS와 간트)과 진척, 요구사항, 산출물, 이슈와 위험, 테스트와 결함, 게시판과 채팅을 한 곳에서 다룹니다. 아키텍처는 제가 설계했고 개발은 Codex와 Claude Code가 했습니다.
판을 낼 때마다 자동 검사를 다시 돌립니다. 몇 판은 고친 범위만 돌렸습니다. 전체 검사는 v0.7의 57건에서 v0.40의 1,217건이 됐습니다. 그 사이 두 번은 Claude에게 평가를 따로 맡겼고, 나온 결함은 일부를 빼고 뒤 판에서 고쳤습니다.
그림은 v0.40의 대시보드이고 가상 예시 프로젝트의 자료입니다. 2026.10.13에 캡처했고 흑백으로 바꿔 실었습니다. 저장소는 비공개입니다. 다른 화면과 검사 기록, 평가는 포트폴리오의 PMS 세 장에 있습니다.
quote-review · 화면 열기
인용 793칸이 원본 PDF에 실제로 있는지 사람이 한 칸씩 확인하는 화면입니다. 인용은 문서 AI가 공공기관 채용공고에서 뽑았습니다. 화면은 인용마다 PDF에서 읽은 글자와 기계로 맞춰 본 결과를 여덟 칸 격자로 보여 줍니다. 무작위 스무 칸 중 넷이 격자와 어긋났는데 그중 둘은 격자가 잡을 수 없는 종류였습니다. 스무 칸은 표본일 뿐이고 793칸의 사람 판정은 아직 0입니다.
아래 셋은 같은 코퍼스에서 먼저 잰 것입니다.
hiring-traps
공공기관 채용공고 20건으로 Upstage Studio를 시험해 봤습니다. 제 에이전트 19개는 노드 14종 가운데 4종을 썼습니다. 같은 문서를 두 번 넣었더니 값이 달라졌습니다.
pdf-read-order
같은 PDF를 읽기 순서만 바꿔 읽었습니다. 채용공고 104건 중 94건(90.4%)에서 글자는 같은데 순서만 달라졌습니다. 처음엔 121건으로 발표했지만 사본 17건이 섞여 있어 바로잡았습니다.
pdf-space-guess
PDF에서 0.25em 이상 벌어진 자리에 공백이 안 들어가는 비율은 Type 3 글꼴이 79.0%, Type 0이 1.5%입니다. 재는 단위를 잘못 잡아 나온 99.9%를 첫 발표 뒤에 고쳤습니다.
2026년 8월에 비공개 파이프라인 stage-gate로 실전 여덟 건을 돌렸고 배포까지 간 것은 하나입니다. 여섯 건은 코드를 한 줄도 안 썼고 그중 다섯은 판단 게이트에서 죽었습니다.
에이전트에게 "잘 해줘"라고 하지 않습니다. 무엇을 하지 말라고 적고, 결과를 다시 셉니다.
ledger-reconcile
결함 열한 종을 심은 합성 원장으로 이행(마이그레이션) 검증을 네 겹으로 나눠 쟀습니다. 건수와 금액 합계만 맞춰 보고 끝내면 열한 종 중 일곱 종이 그대로 빠져나갑니다.
wikilink-audit
옵시디언 위키링크가 실제로 어디로 가는지 따져서 안 가는 것만 사유를 붙여 보고합니다. 첫 실측 정밀도는 0.190이었고, 분모 정의를 바꾼 뒤 0.469, 해석기를 고친 뒤 1.00이 나왔습니다. 발표한 정밀도 1.00은 도구의 오탐 둘이 라벨에 묻힌 숫자여서 0.980으로 정정했습니다. 재현율은 재지 않았습니다.
extraction-benchmark
도로교통법 조문 10건을 사람과 파이프라인이 따로 분류하고 요약했습니다. 본문을 한정하는 단서 4건 중 요약에 살린 것은 사람 0건, LLM 0~1건이었습니다. 기계 스캔을 붙이자 4건이 모두 잡혔습니다.
youtube-sentiment-pipeline
자동차 리뷰 댓글의 감정을 가르는 분류기를 골든셋 198건과 부트스트랩 95% 구간으로 평가했습니다. 가장 나은 SBERT도 macro F1이 0.376으로 무작위 추측(0.329)과 구분되지 않습니다.
전부 실패를 지우지 않고 README에 남겨뒀습니다. 숫자가 나빠진 것도요.
g2b-daily · 대시보드 열기
나라장터 용역 입찰공고 메타데이터를 매일 05:00(KST)에 예약 수집합니다. 수집이 불완전하면 파일을 만들지 않고 실패합니다. 2026.08.31–09.28, 29일 중 25일을 저장했습니다.
star-voyage · 사이트 열기
점성술 공부 사이트입니다. 출생 차트 휠을 지도처럼 끌고 확대하며 해설을 읽을 수 있습니다. 행성 위치를 Swiss Ephemeris 기준값과 대조해 최대 차이 0.004°를 README에 적었습니다.
agent-workflow
장문 문서 작업을 에이전트에 맡길 때 틀린 결과가 조용히 넘어가지 않게 판정 루프를 짰습니다. 여기 규칙은 미리 설계해 둔 것 하나 없이 전부 무언가를 틀린 다음에 생겼습니다.
edit-receipt
일괄 텍스트 편집에 영수증을 붙입니다. 시킨 건수와 바뀐 건수가 다르면 아무 파일도 쓰지 않습니다. 기대 건수의 기본값은 「1 이상」이 아니라 정확히 1입니다. 이 도구로 edit-receipt의 README 여덟 군데를 고치다 한 군데가 0건으로 걸렸습니다.
spaced-quiz
마크다운 노트의 문항을 터미널에서 간격 반복으로 풉니다. 진도를 노트 옆 마크다운 표에 써서 기기 사이에 따라가게 합니다. 제 노트의 문항 수는 세는 방법마다 723, 781, 722, 712로 달랐습니다.
star-cards · 사이트 열기
생년월일로 9:16 별자리 카드 일곱 장을 만들어 저장·공유하는 정적 사이트입니다. star-voyage의 계산 엔진을 그대로 씁니다.
| 위 저장소 | 파이썬 | 테스트 함수 | 파이썬 테스트를 둔 곳 |
|---|---|---|---|
| 14개 | 13,823줄 | 400개 | 14개 중 8개 |
2026-10-08에 위 공개 저장소 열넷을 다시 센 값입니다. 원격 기본 브랜치에 올라간 *.py의 줄 수와 def test_ 수이고, TypeScript로 쓴 테스트(star-voyage · star-cards · quote-review)는 들어 있지 않습니다. TypeScript 테스트까지 치면 테스트를 둔 저장소는 14개 중 10개입니다.
08-26에는 비공개 셋을 낀 열세 저장소로 15,972줄 · 616개라고 적었고, 그 하루 전에는 한 저장소의 워크트리 사본 두 벌과 파이프라인 실행 폴더 runs/에 든 다른 저장소 코드를 안 빼고 세서 21,257줄 · 826개로 적었습니다.
아래 작업은 저장소가 비공개라 저장소 링크를 걸지 않았습니다.
stage-gate
이 파이프라인은 아이디어 한 줄을 기획·판단·설계·구현·검증·배포로 끌고 갑니다. 단계마다 사람 게이트가 섭니다.
wbs-weekly
엑셀 WBS 진척관리를 웹으로 옮겼습니다. 주차 스냅샷을 쌓아 지난주 대비 변화를 먼저 보여 줍니다.
policy · one-step-apply
MABC 결선작 「다시, 한 걸음」과 그 고도화 판입니다. 청년정책 탐색과 필요서류·신청 준비를 돕습니다.
게임 열기
고3부터 은퇴까지 야구 선수 한 명의 삶을 한 달씩 이어가는 브라우저 게임입니다. 훈련과 경기뿐 아니라 계약, 부상, 인간관계, 생활 속 선택이 커리어를 만듭니다.
플레이할 수 있는 사건 1,500개, 공개 특성 300개, 칭호 41개가 들어 있습니다. 국내 리그는 가상의 10개 구단이 팀당 144경기와 포스트시즌을 치르고, 드래프트에서는 후보 176명 가운데 110명을 11라운드에 걸쳐 지명합니다.
숫자는 시뮬레이션으로 잽니다. 10개 세계를 5년씩 돌려 타율, 출루율, 장타율, 경기당 득점, 평균자책점 같은 지표가 정해 둔 범위를 벗어나면 검사가 실패합니다. 한 세계를 30년 동안 돌려 세대교체 뒤에도 리그가 안정적인지도 확인합니다.
게임 기획은 제가 했고 개발은 Claude Code와 Codex가 했습니다. 게임 이름은 아직 정하지 않아 작업명으로 부릅니다.
배포판을 2026.10.14에 로그인 없이 새로 시작해 캡처했습니다. 왼쪽부터 첫 화면, 후보 카드 다섯 장, 고3 봄의 사건, 지명의 밤입니다. 선수와 구단 이름은 모두 가상이고 그림은 흑백으로 바꿔 실었습니다. 저장소는 비공개입니다.
JunctionX Korea 2026 · Upstage 트랙 2026.08.21 – 08.23
4인 팀에서 「Solar for Bid」의 기획과 AI 파이프라인을 맡았습니다.
MABC 2026 2026.08.26 – 09.19
개인으로 참가해 결선에 올랐고 결선작 「다시, 한 걸음」을 기획했습니다. Hermes Agent 안의 Solar Pro 4에 구현을 지시하고 검증해 포스터 세션에서 발표했습니다.
원티드 AI Championship 2026 2026.09.06 – 09.20
5인 팀의 데이터·배치 담당으로 대시보드 집계 쿼리를 썼습니다. 합성 로그와 숫자 대조 스크립트를 고쳐 검증한 뒤 9월 20일에 제출했습니다.
DACON 나라장터 법령 위반 모니터링 AI 경진대회 2026.08 – 09
파인튜닝이 금지된 고정 LLM으로 공고 한 건의 검토 항목 24개를 판정하는 파이프라인을 만들었습니다.
JunctionX Korea 2026 · Upstage 트랙 · 4인 팀(기획·AI 파이프라인은 저, 개발 2, 디자인 1)
회사 서류를 한 번 올려 두면, 고른 입찰 공고마다 참가 자격 판정과 요구사항 체크리스트, 제출 서류 점검표를 근거 쪽과 함께 내는 문서 에이전트입니다. 저는 제품 기획서와 판정 규칙을 쓰고 Studio 에이전트를 설정했습니다.
공고 한 건은 Studio 작업 6회(Parse → Classify → Extract)로 읽고 Solar 호출 6회(자격 1 · 계획 3 · 제출 2)로 판정합니다. 백엔드가 그 판정을 다시 세어 체크리스트와 작업 분해, 임계경로, 제출 점검표를 냅니다. 다시 셀 때 근거 쪽이 없는 「제외」는 「추천」으로 돌립니다.
입찰은 서류 한 장이 빠져도 탈락할 수 있어서 "아마 맞을 겁니다"는 값이 0입니다. 그래서 판정마다 근거 문서와 쪽을 달게 했고, 못 읽은 칸은 0으로 채우지 않게 했습니다.
그 칸은 미확인으로 남긴 뒤 사람이 넣습니다. 기간이 문서에 없으면 비워두지 않고 「미 명시」로 적습니다. 원가는 M/M까지만 내고 투찰가는 만들지 않습니다.
피해야 할 표현 세 곳을 일부러 넣은 가상 문서로 시험하자 모델은 0곳을 돌려줬고, 백엔드에 쪽마다 같은 표현 목록을 찾는 검사를 더하자 세 곳이 모두 잡혔습니다. 캐시를 쓰면 공고 한 건에 약 4분이 걸렸습니다(한 번 잰 값).
08.23 12:00 마감에 최종 제출했고 배포는 없습니다. 슬라이드와 화면 디자인은 팀 디자이너가 했고, 화면 시안과 일곱 단계 파이프라인은 포트폴리오의 Solar for Bid 세 장에 있습니다.
한양대학교 ERICA 2020.03 – 2026.08
산업인공지능학과와 ICT융합학부를 복수전공하고 2026년 8월에 졸업했습니다.
LINC 3.0 기업연계 캡스톤 2023
4인 팀 「Slack을 이용한 데이터 리포팅」에서 댓글 수집과 Superset 대시보드, 파이프라인의 양 끝단을 맡았습니다. 감정분석은 그때 맞는지 따져 보지 않았고 2026년에 youtube-sentiment-pipeline으로 다시 만들었습니다.





