내가 훔치고 싶은 첫 번째 OpenClaw 워크플로우: 주 2회 채용 공고를 확인하며 자동 지원은 하지 않는 구직 에이전트
요약
OpenClaw를 활용하여 채용 공고 검색부터 이력서 맞춤화까지 수행하되, 최종 제출은 인간이 검토하는 '감독형 구직 에이전트' 워크플로우를 소개합니다. 무분별한 자동 지원 대신 인간을 루프에 포함하여 신뢰성과 효율성을 동시에 확보하는 전략을 강조합니다.
핵심 포인트
- OpenClaw를 이용한 주 2회 채용 공고 자동 검색 및 분석
- 상위 매칭 항목 선정 및 이력서/자기소개서 맞춤형 초안 작성
- 최종 제출 단계에 인간을 개입시켜 신뢰성 확보(Human-in-the-loop)
- 자율성보다 정보의 최신성을 확보하여 채용 기회 선점
저는 정말 놀라워 보이는 에이전트 데모를 많이 봐왔지만, 한 가지 지루한 질문을 던지는 순간 그 환상은 깨지곤 합니다.
“정말로 중요한 일을 이 에이전트에게 믿고 맡길 수 있을까?”
보통 대답은 '아니오'입니다.
점심을 주문하는 에이전트는 귀엽습니다. 항공권을 예약하는 에이전트는 괜찮습니다. 하지만 “당신의 삶을 운영하는” 에이전트는 데모가 얼마나 빨리 터무니없는 방향으로 흘러갈 수 있는지를 보여주는 벤치마크에 불과합니다.
하지만 OpenClaw의 사용 사례를 파헤치던 중, 저는 즉시 현실적으로 느껴지는 워크플로우(workflow) 하나를 발견했습니다.
r/openclaw의 한 사용자가 공유한 감독형(supervised) 구직 에이전트 설정은 103개의 추천(upvotes)을 받았는데, 그 이유는 AI가 모든 것을 대신 해줘야 한다고 허세 부리지 않으면서 실제 문제를 해결했기 때문입니다:
- 주 2회 구직 검색 실행
- 새로운 채용 공고 찾기
- 상위 5개 매칭 항목 순위 매기기
- 각 역할에 맞춰 이력서(resume) 맞춤화
- 자기소개서(cover letters) 초안 작성
- 최종 제출 단계는 수동으로 유지
마지막 항목이 핵심입니다.
최고의 구직 에이전트는 자동 지원(auto-apply) 대포가 아닙니다.
시장을 관찰하고, 반복적인 작업을 수행하며, 인간에게 검토할 가치가 있는 요약 목록(shortlist)을 전달하는 선택적 파이프라인(pipeline)입니다.
Reddit의 설정은 가장 좋은 의미에서 지루했습니다
원 게시자는 자신이 전직 데이터 사이언티스트(data scientist)이며, 해당 분야에서 10년 동안 일한 후 약 1년 동안 실직 상태였다고 밝혔습니다. 그는 Mac mini에서 OpenClaw를 실행하며 다음을 제공했습니다:
- 이력서 (resume)
- GitHub 프로필
- 실제로 원하는 역할을 설명하는 마크다운(markdown) 파일
그 후 OpenClaw는 주 2회 검색을 수행하고, 상위 5개 매칭 항목을 선정하며, 이력서를 맞춤화하고, 기본 자기소개서 초안을 작성했습니다.
그리고 결정적으로: 자동으로 제출하지 않았습니다.
그 점이 바로 신뢰를 만들었습니다.
많은 구직 자동화는 양(volume)을 최적화합니다. 더 많은 탭, 더 많은 지원, 더 많은 브라우저 세션, 그리고 “이것 봐, 얼마나 자율적인지”를 보여주는 데 집중합니다.
채용 담당자 입장이 되어보기 전까지는 그것이 좋아 보일 수 있습니다.
하지만 채용 담당자는 무차별적으로 뿌려지는(spray-and-pray) 지원서의 냄새를 즉각적으로 맡을 수 있습니다.
이 OpenClaw 워크플로우는 정반대로 움직였습니다:
- 타겟을 좁힘
- 적합도에 따라 순위 매기기
- 가능성 있는 역할에 대해서만 다시 작성
- 되돌릴 수 없는 일이 일어나기 전에 인간을 루프에 포함(keep a human in the loop)
이것은 덜 정교한 것이 아닙니다.
그것이 더 정교한 것입니다.
진정한 이점은 자율성이 아니라 최신성입니다
항상 켜져 있는(always-on) 채용 에이전트의 가장 유용한 부분은 버튼을 클릭할 수 있다는 점이 아닙니다.
좋은 직무를 조기에 발견할 수 있다는 점입니다.
이는 사람들이 인정하는 것보다 훨씬 더 중요합니다.
진지하게 구직 활동을 해본 적이 있다면, 공고가 올라온 후 첫 며칠이 종종 가장 좋은 기회의 창이라는 것을 알 것입니다. Reddit 게시자는 결국 해당 직무를 공고 게시 1일 만에 발견했으며, 그 과정은 약 1개월 만에 채용 제안(offer)으로 이어졌다고 말했습니다.
이는 타당한 이야기입니다.
인간은 지속적인 경계(sustained vigilance)에 취약합니다.
우리는 다음을 잘합니다:
- 인터뷰 (interviews)
- 판단 (judgment)
- 해당 직무가 적절한지 결정하기
우리는 다음을 못합니다:
- 매일 아침 14개의 채용 소스를 확인하기
- 6주 동안 일관성을 유지하기
- 정신줄을 놓지 않고 같은 자료를 계속해서 다시 쓰기
그것이 바로 에이전트가 도움이 되는 지점입니다.
구직 활동이 훌륭한 에이전트 활용 사례인 이유
이것은 다음과 같은 특성을 가진 작업이기 때문에 가장 깔끔한 실세계 에이전트 워크플로우(agent workflows) 중 하나입니다:
- 반복적임 (repetitive)
- 시간에 민감함 (time-sensitive)
- 개방형임 (open-ended)
- 주로 텍스트 기반임 (mostly text-based)
- 감독하기 쉬움 (easy to supervise)
훌륭한 구직 에이전트는 다음과 같은 일을 할 수 있습니다:
- 정해진 일정에 따라 타겟 채용 게시판을 모니터링
- 사용자의 기준에 따라 새로운 직무의 점수를 매김 (score)
- 해당 직무가 왜 적합하거나 부적합한지 요약
- 직무 기술서 (job description)에 맞춰 이력서 항목 (resume bullets)을 맞춤화
- 초안 수준의 자기소개서 (cover letter) 작성
- 엉망진창인 상태 대신 검토 대기열 (review queue) 생성
이것은 공상 과학이 아닙니다.
이것은 행정 업무 (admin work)입니다.
그리고 화려한 브라우저 에이전트 (browser-agent) 데모들과 달리, 이것은 CSS 선택자 (CSS selector) 하나가 바뀐다고 해서 바로 망가지지 않습니다.
가장 유용한 부분에는 아마도 브라우저 자동화가 필요하지 않을 것입니다
이 부분은 더 많은 개발자가 주목해야 한다고 생각하는 지점입니다.
실용적인 구직 에이전트는 LinkedIn 스크래핑 (scraping)이나 헤드리스 브라우저 (headless browser) 곡예로 시작할 필요가 없습니다.
가장 큰 가치는 파이프라인 (pipeline)의 더 앞 단계인 발견 (discovery), 필터링 (filtering), 순위 지정 (ranking), 그리고 초안 작성 (drafting)에서 나옵니다.
이를 위해서는 취약한 UI 자동화보다 구조화된 API (structured APIs)가 훨씬 낫습니다.
Greenhouse와 Lever부터 시작하세요
만약 제가 이것을 만든다면, 즉시 Greenhouse와 Lever부터 시작할 것입니다.
Greenhouse Job Board API
Greenhouse는 공개 채용 목록을 JSON으로 노출하며, 공식 엔드포인트(endpoint)를 통해 지원을 지원합니다.
예시:
GET https://boards-api.greenhouse.io/v1/boards/{board_token}/jobs?content=true
POST https://boards-api.greenhouse.io/v1/boards/{board_token}/jobs/{id}
Lever Postings API
Lever 또한 REST API를 통해 게시된 채용 공고를 노출하며, 목록을 중심으로 한 프로그래밍 방식의 워크플로우 (programmatic workflows)를 지원합니다.
이는 여러분의 아키텍처 (architecture)가 불안정한 브라우저 봇 (browser bot)보다는 일반적인 데이터 파이프라인 (data pipeline)에 더 가깝게 구성될 수 있음을 의미합니다.
| 옵션 | 장점 |
|---|---|
| Greenhouse Job Board API | 공개 JSON 목록, 공식 지원 엔드포인트, 모니터링 및 초안 작성을 위한 안정적인 소스 |
| ... |
이것이 바로 제가 이 워크플로우의 승리하는 버전은 Selenium을 이용한 영웅적 행보가 아니라, Greenhouse와 Lever에서 시작해야 한다고 생각하는 이유입니다.
제가 실제로 구축할 간단한 아키텍처
여기에 제가 몇 주 동안 실행할 수 있을 만큼 신뢰할 수 있는 버전이 있습니다.
scheduler
-> Greenhouse + Lever에서 채용 목록 가져오기 (fetch job listings)
-> 공고 정규화 (normalize postings)
...
이것을 빠르게 프로토타입 (prototype)으로 만들고 싶다면, 스택 (stack)은 꽤 지루할 정도로 단순합니다:
- 에이전트 워크플로우 (agent workflow)를 위한 OpenClaw
- 스케줄링 (scheduling)을 위한 cron 또는 GitHub Actions
- 가져오기/정규화/점수 산정 (fetch/normalize/scoring) 결합을 위한 Python 또는 TypeScript
- 중복 제거 (dedupe) 및 이력을 위한 SQLite 또는 Postgres
- 순위 산정 (ranking) 및 초안 작성을 위한 Claude, GPT-5 또는 둘 다
- 검토 전달를 위한 email, Slack 또는 Telegram
이것이 진짜 시스템입니다. 컨퍼런스 데모가 아닙니다.
예시: Python으로 Greenhouse 채용 공고 가져오기
기본적인 수집기 (collector)를 만드는 것은 사소한 일입니다.
import requests
BOARD_TOKEN = "your-company"
...
해당 출력을 자체 스키마 (schema)로 정규화하고 후보자 프로필 (candidate profile)에 따라 점수를 매기세요.
마크다운 형식의 예시 후보자 프로필
이 부분은 대부분의 사람들이 건너뛰는 부분이며, 그들의 에이전트가 쓰레기 같은 결과물을 내놓는 이유입니다.
시스템에 제약 조건이 있는 프로필을 제공하세요.
# 대상 역할 프로필 (Target Role Profile)
## 역할 목표 (Role targets)
...
이 파일 하나가 대부분의 프롬프트 수정 (prompt tweaking)보다 더 나은 결과를 가져다줄 것입니다.
제가 최종 지원을 완전히 자동화하지 않는 이유
그 지점이 바로 "자율적 (autonomous)"인 것이 "무모한 (reckless)" 것으로 변하는 지점이기 때문입니다.
원문 작성자는 최종 제출을 수동으로 유지함으로써 올바른 결정을 내렸습니다.
저 역시 다음 세 가지 이유로 똑같이 할 것입니다.
1. 채용 지원은 사회적 신호 (social signals)입니다
이력서가 기술적으로는 일치할지라도 여전히 잘못된 느낌을 줄 수 있습니다.
자기소개서(cover letter)가 모든 키워드를 언급하더라도 여전히 AI가 생성한 쓰레기(AI sludge)처럼 읽힐 수 있습니다.
이것이 바로 인간이 잡아내는 부분입니다:
- 이상한 어조 (weird tone)
- 키워드에 대한 과적합 (overfitting to keywords)
- 잘못된 주장 (incorrect claims)
- 해당 회사가 실제로 왜 중요한지에 대한 맥락 누락 (missing context)
2. 브라우저 자동 지원 (Browser auto-apply)은 취약합니다
만약 당신의 워크플로우가 LinkedIn, Indeed, 그리고 무작위 ATS(채용 관리 시스템) 페이지 전반에 걸쳐 동적인 UI 흐름을 클릭하는 것에 의존한다면, 당신은 다음과 같은 상황을 예약하는 것과 같습니다:
- 깨진 셀렉터 (broken selectors)
- CAPTCHA와의 싸움
- 안티 봇 (anti-bot) 시스템
- 계정 제한
- 지속적인 유지보수
어떤 경우에는 그럴만한 가치가 있을 수도 있지만, 그것이 당신의 시작점이 되어서는 안 됩니다.
3. 마지막 클릭은 가장 저렴한 인간의 단계입니다
이것이 핵심적인 트레이드오프 (tradeoff)입니다.
비싼 부분은 "제출 (Submit)"을 클릭하는 것이 아닙니다.
비싼 부분은 다음과 같습니다:
- 관련 직무를 지속적으로 찾는 것
- 직무 내용을 읽는 것
- 자신의 배경과 비교하는 것
- 이력서의 불렛 포인트 (resume bullets)를 다시 쓰는 것
- 맞춤형 자료를 초안 작성하는 것
에이전트가 그 일을 하게 하세요.
되돌릴 수 없는 마지막 행동은 인간의 몫으로 남겨두세요.
숨겨진 악당은 토큰 불안 (token anxiety)입니다
이 지점에서 많은 에이전트 워크플로우가 조용히 비실용적으로 변합니다.
감독형 구직 에이전트 (supervised job-search agent)는 실제 루프를 계산하기 전까지는 저렴하게 들립니다:
- 새로운 직무 기술서 (job descriptions) 읽기
- 각 역할을 이력서, GitHub, 그리고 직무 기준과 비교하기
- 후보자 점수 매기기 및 순위 지정하기
- 상위 일치 항목에 대해 이력서 불렛 포인트 다시 쓰기
- 자기소개서 초안 작성하기
- 몇 주 또는 몇 달 동안 반복하기
이 과정은 토큰을 빠르게 소모합니다.
특히 작성 품질을 위해 프런티어 모델 (frontier models)을 사용한다면 더욱 그렇습니다.
그리고 바로 이 지점에서 토큰당 가격 책정 (per-token pricing)이 나쁜 방식으로 행동을 변화시키기 시작합니다.
사람들은 단순히 비용을 덜 쓰는 것에 그치지 않습니다.
그들은 워크플로우를 더 나쁘게 만듭니다.
그들은 프롬프트 (prompts)를 짧게 만듭니다.
그들은 유용한 패스 (passes)를 건너뜁니다.
그들은 랭킹 (ranking) 재실행을 중단합니다.
그들은 더 깊은 맞춤화 (tailoring)를 피합니다.
그들은 정작 중요한 작업들의 자동화 (automation)를 소홀히 합니다.
이것이 실제로 나타나는 토큰 불안 (token anxiety)입니다.
단순히 "내 청구서가 높게 나올지도 몰라" 수준이 아닙니다.
그보다는 다음과 같습니다: "이 추가적인 패스가 결과물을 개선할 것이라는 걸 알지만, 미터기가 돌아가는 게 느껴지니까 피해야겠어."
에이전트 워크플로우 (agentic workflows)에게 이것은 독입니다.
이것이 에이전트 워크플로우에 정액제 컴퓨팅 (flat-rate compute)이 더 합리적인 이유입니다
구직 활동은 예측 가능한 가격 책정이 왜 중요한지를 보여주는 매우 명확한 사례입니다.
검색이 얼마나 지속될지 알 수 없기 때문입니다:
- 2주
- 2개월
- 4개월
또한, 하나의 직무를 추구할 가치가 있다고 판단하기 전까지 얼마나 많은 직무를 평가해야 하는지도 알 수 없습니다.
그러한 불확실성 때문에 토큰당 과금 (per-token billing) 방식이 장기 실행 자동화 (long-running automations)에서 불쾌하게 느껴지는 것입니다.
누군가가 토큰 대시보드를 지켜보지 않아도 계속 켜져 있고, 소스를 재확인하며, 결과물을 다시 쓰고, 반복 (iterate)해야 하는 에이전트를 구축하고 있다면, 월정액 방식이 훨씬 더 적합합니다.
그것이 Standard Compute의 매력입니다.
이는 예측 가능한 월간 가격으로 무제한 AI 컴퓨팅을 제공하며, OpenAI API를 즉시 대체할 수 있는 솔루션입니다. 따라서 추가적인 랭킹 패스나 이력서 재작성이 조용히 청구 금액을 부풀릴까 걱정하지 않고도 에이전트 워크플로우를 실행할 수 있습니다.
이러한 사용 사례에서 이는 사람들이 생각하는 것보다 훨씬 더 중요합니다.
워크플로우의 최상의 버전은 가장 저렴해 보이는 프롬프트 체인 (prompt chain)이 아니기 때문입니다.
그것은 당신이 실제로 실행하도록 내버려 둘 수 있는 워크플로우입니다.
각 단계에서 내가 사용할 모델들
나는 모든 것에 하나의 모델을 사용하지 않을 것입니다.
그것은 잘못된 최적화입니다.
적절한 단계에 적절한 모델을 사용하십시오.
나의 실질적인 분할 방식
- 추출 (extraction), 랭킹 (ranking), 요약 (summarization), 요구사항 매칭 (requirement matching)에는 Claude Sonnet
- 구조화된 점수 매기기 (structured scoring) 및 루브릭 기반 평가 (rubric-based evaluation)에는 GPT-5
- 톤 (tone)이 가장 중요한 최종 이력서 맞춤화 (resume tailoring) 및 자기소개서 초안 작성에는 Claude Opus
- 개인적인 실험이나 저렴한 사전 필터링 (pre-filtering)에는 로컬 Llama 또는 Qwen 변형 모델
비싼 모델은 오직 최종 후보 명단 (shortlist)에만 손을 대야 합니다.
첫 번째 필터에서 탈락하는 채용 공고에 프리미엄 모델 예산을 낭비하지 마세요.
이는 토큰당 비용을 지불하든, 통합 API (unified API)를 통해 여러 모델로 라우팅(routing)하든 마찬가지입니다.
구체적인 스코어링 파이프라인 (scoring pipeline)
만약 제가 이를 구현한다면, 필터링 (filtering)과 작성 (writing)을 분리하겠습니다.
1단계: 저렴한 스코어링 패스 (cheap scoring pass)
{
"title_match": 0.9,
"location_match": 1.0,
...
2단계: 상위 5개 또는 상위 10개만 후보 명단 (shortlist)에 포함
3단계: 비용이 드는 작성 패스 (expensive writing pass)
다음 내용을 생성합니다:
- 맞춤형 이력서 불렛 포인트 (tailored resume bullets)
- 자기소개서 초안 (cover letter draft)
- 이 역할이 선정된 이유에 대한 간략한 근거 (quick rationale)
이러한 분리는 워크플로우 (workflow)를 합리적으로 유지해 줍니다.
주 2회 실행을 위한 예시 cron 설정
만약 원본 Reddit 워크플로우가 주 2회 실행되었다면, 그것이 좋은 기본값입니다.
# 매주 월요일과 목요일 오전 8시
0 8 * * 1,4 /usr/bin/python3 /opt/job-agent/run.py >> /var/log/job-agent.log 2>&1
이는 노이즈 피로 (noise fatigue)를 유발하지 않으면서 새로운 채용 공고를 포착하기에 충분합니다.
시장이 빠르게 움직인다면 매일 실행하세요.
기준이 까다롭다면 주 2회가 아마도 이상적일 것입니다.
제가 내일 당장 복사해서 사용할 버전
만약 제가 저 자신을 위해 이것을 만든다면, 정확히 다음과 같이 할 것입니다:
- 실제 제약 조건을 포함한 마크다운 (markdown) 후보자 프로필 생성
- Greenhouse 및 Lever에서 채용 공고를 우선적으로 수집 (ingest)
- 탐색 (discovery)을 매일 또는 주 2회로 예약
- 중복 제거 (dedupe) 및 공고 이력 저장
- 저렴한 모델로 모든 새로운 채용 공고 스코어링
- 상위 5개 또는 상위 10개 후보 명단 (shortlist) 작성
- 이력서 맞춤화 및 자기소개서 초안 작성을 위해 더 강력한 모델 사용
- 모든 내용을 인간 검토 큐 (human review queue)로 전송
- 최종 제출은 수동으로 유지
이것은 타협이 아닙니다.
이것이 바로 제품 (product)입니다.
핵심은 인간을 제거하는 것이 아닙니다.
핵심은 다음을 제거하는 것입니다:
- 버려지는 시간 (dead time)
- 놓치는 공고
- 반복적인 재작성
- 채용 게시판을 수동으로 확인해야 하는 지속적인 배경 스트레스
OpenClaw 이야기가 성공한 이유는 그 경계를 존중했기 때문입니다.
에이전트 (agent)가 실제로 잘하는 일에 에이전트를 활용했습니다:
- 깨어 있기
- 너무 많은 양 읽기
- 혼돈을 후보 명단 (shortlist)으로 필터링하기
그 이후의 모든 과정은 여전히 사람의 영역이었습니다.
그리고 솔직히 말해서, 이것이 제가 즉시 훔치고 싶다고 생각한 첫 번째 OpenClaw 워크플로우입니다.
만약 여러분이 이와 같은 에이전트 워크플로우 (agent workflows)를 구축하고 있다면, 다음에 제가 수정하고 싶은 부분은 가격 책정 (pricing)입니다. 자동화가 유용해지면, 예상보다 더 자주 실행되고, 더 많은 컨텍스트 (context)를 다루며, 더 많은 재작성 (rewriting)을 수행하는 경향이 있기 때문입니다. 바로 이 지점에서 고정 요금제 API 설정은 단순히 있으면 좋은 기능이 아니라, 하나의 아키텍처 결정 (architectural decision)이 됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기