00. About
모델이 아니라, 모델이 딛고 설 바닥을 만듭니다.
AI가 일하려면 먼저 바탕이 있어야 합니다. 학습할 데이터, 안전하게 행동할 수 있는 도구, 읽을 수 없던 것을 읽는 경로. 저는 그 바탕을 만듭니다. 만드는 동안 늘 같은 질문을 합니다 — 편한 길 대신 이 길을 택한 이유를 댈 수 있는가. 아래 세 프로젝트는 그 질문에 답한 기록입니다.
모델이 아니라, 모델이 딛고 설 바닥을 만듭니다.
AI가 일하려면 먼저 바탕이 있어야 합니다. 학습할 데이터, 안전하게 행동할 수 있는 도구, 읽을 수 없던 것을 읽는 경로. 저는 그 바탕을 만듭니다. 만드는 동안 늘 같은 질문을 합니다 — 편한 길 대신 이 길을 택한 이유를 댈 수 있는가. 아래 세 프로젝트는 그 질문에 답한 기록입니다.
㈜코그콤 · 고객사 ㈜젠스타메이트
AI가 학습할 데이터를 공급하는 바탕. 전면 Selenium이라는 편한 길 대신 페이지 유형을 나눠 비용을 통제했습니다.
httpx로 받아 BeautifulSoup으로 파싱하고 동적 페이지만 Selenium으로 보냈습니다.구축한 파이프라인이 젠스타메이트 서비스의 핵심 인프라로 투입되어 실제 매출로 이어졌습니다.
업무 자동화 솔루션 리컬럼과 연결되는 API 서버를 구축해 수집 데이터를 서비스에 직접 공급했습니다.
개인 프로젝트 · FronyBrowser (공개) · FronyShopping (비공개)
에이전트가 안전하게 행동할 수 있는 바탕. 임의 JS 실행 같은 편한 기능을 넣지 않은 대가로 개인정보가 새는 길을 닫았습니다.
fill(ref, "{{vault:card.number}}")처럼 키 이름만 보냅니다.
치환하는 함수는 코드 전체에서 하나뿐입니다. 그 반환값은 호출자에게 돌아가지 않고 CDP 키스트로크로 페이지에만 들어갑니다.
원본은 Windows DPAPI로 암호화한 단일 블롭에 있고 메모리 해제는 TTL로 자동입니다.
응답에 남는 건 { filledFrom, len } — 키 이름과 길이뿐입니다.
value는 어떤 경로로도 읽지 않고 checked 같은 불리언 상태만 내보냅니다.
스크린샷은 스크러버가 청소할 수 없으므로 결제 iframe 안쪽까지 내려가 입력 필드를 이미지 단계에서 마스킹합니다.
임의 JS 실행과 HTML 덤프도 넣지 않았습니다 — 스크러버가 평문 일치로 동작하니 btoa(value) 한 줄이면 통째로 무력화되기 때문입니다.
편의 기능 대신 핸들러 폴더 자체를 기능 화이트리스트로 삼았습니다.
컬리와 교보문고에서 로그인부터 결제·주문내역 확인까지 실제 결제로 완주했고 보안 키패드를 통한 PIN 입력 경로까지 실측했습니다. 지금도 직접 쓰고 있습니다.
반복 구매를 기억·지도·판정 세 축으로 묶었습니다. 구매 이력과 플랫폼별 조작 노하우를 쌓아두고 품목마다 허용 가격 범위·재구매 주기·수량 상한을 걸어 품목만 말하면 결제까지 이어집니다.
현업 실무자와 함께 진행한 협업 프로젝트 · project-kisevent
읽을 수 없던 것을 에이전트가 읽는 바탕. 정교한 전사 설계 대신, 재어 보고 크롭 한 장으로 줄였습니다.
ImageContent로 크롭을 그대로 실어
이미 구독 중인 Claude · GPT Desktop의 비전을 재사용합니다.
공고는 매달 갱신되고 창구에서 상시 조회되므로 호출당 과금되는 API였다면 비용이 계속 쌓입니다.
구독 안에서 해결하면 추가 비용이 0이고 사내 PC에 API 키를 두지 않아도 됩니다.
httpx + BeautifulSoup으로 파싱합니다. 배너는 URL이나 sha256이 바뀔 때만 다시 받아 이전 행을 superseded로 넘깁니다.
크롤은 스레드 락 하나와 60초 디바운스로 묶어 중복 실행을 막고 요약 작업은 30분 claim을 걸어 동시 호출이 같은 배너를 집지 않게 했습니다.
공고를 하나씩 열어 눈으로 읽던 일이 질문 한 번으로 끝납니다. 진행 중 33건과 종료 20건, 총 53건 전부에서 크롭 범위를 벗어나 정보를 놓친 사례가 없었습니다.
도구 설명문과 응답의 다음 지시로 호출 순서를 잡아주고 검증 실패는 사유를 돌려줘 스스로 고치게 했습니다. 판정 기준도 탭에서 배너로 옮겨 오분류 11건을 바로잡았습니다.