---
title: "ai-job-search 설계를 내 작업에 이식하기"
subtitle: "웹소설·강의자료 제작에 쓸 수 있을까"
source_url: https://github.com/MadsLorentzen/ai-job-search
created: 2026-08-28
purpose: 구직 자동화 프레임워크 ai-job-search의 핵심 설계(생성-검증 분리)를 강의자료 제작과 웹소설 집필에 어디까지 옮겨 쓸 수 있는지 판단하고, 실제로 만들 폴더 구조와 커맨드까지 정리한다.
---

# ai-job-search 설계를 내 작업에 이식하기

> 원본 저장소: https://github.com/MadsLorentzen/ai-job-search

## 문서의 목적

이 저장소를 "설치해서 쓰는 도구"로 보면 쓸 데가 없습니다. 구직용이고, 설치 스택도 무겁습니다.
하지만 **설계 패턴**만 떼어내면 강의자료 제작에 거의 그대로 들어맞습니다. 이 문서는 그 판단 근거와 실제 이식 방법을 정리합니다.

---

## 1. 한 줄 요약

**결론: 강의자료는 매우 잘 맞고, 웹소설은 절반만 맞습니다.**

이유는 하나입니다. 이 저장소의 진짜 자산은 "AI가 글을 써준다"가 아니라 **"결과물이 무엇을 통과해야 하는지 미리 정해두고 검사한다"**는 구조입니다.
검사가 성립하려면 **기계가 합격/불합격을 판정할 수 있는 기준**이 있어야 합니다. 그 기준이 있느냐 없느냐가 갈림길입니다.

---

## 2. 원본이 하는 일 (쉽게)

이 저장소는 이력서를 대신 써주는 도구처럼 보이지만, 실제로 특별한 건 **쓰는 AI와 검사하는 AI를 따로 뒀다**는 점입니다.

1. 초안 작성자(drafter)가 이력서를 씁니다.
2. **완전히 새로운 대화창의 두 번째 AI**(reviewer)가 그 초안을 뜯어보고 비판합니다.
3. 지적사항을 반영해 고칩니다.
4. 실제로 PDF를 만들어서, 렌더링된 페이지를 눈으로 확인합니다.
5. 채용 시스템(ATS)이 읽는 텍스트만 따로 뽑아내서, 그게 제대로 읽히는지 봅니다.
6. 다 통과해야 사람에게 넘깁니다. 발송은 사람이 합니다.

핵심은 4~5번입니다. **"원고가 멀쩡한 것"과 "최종 결과물이 멀쩡한 것"은 다르다**는 걸 알고, 최종 결과물 쪽에서 검사합니다.

---

## 3. 강의자료 — 거의 그대로 이식 가능

### 왜 잘 맞나

판정 가능한 기준이 이미 충분히 많기 때문입니다.

- **HTML 1장 실습물** → 브라우저에서 실제로 렌더되는가, 콘솔 에러가 없는가, 외부 의존성이 0개인가
- **10분 분량** → 스크립트 글자 수를 발화 시간으로 환산해 상·하한 검사
- **PPT** → 흰 배경인가, 폰트 12pt 이상인가, 슬라이드당 텍스트가 상한을 넘지 않는가
- **실습 코드** → 아무것도 설치되지 않은 초기 상태에서 처음부터 끝까지 실제로 돌아가는가

이건 원본의 "PDF 컴파일 → 눈으로 확인 → 텍스트 층 검사"와 정확히 같은 구조입니다.

### 대응표

| 원본 (구직) | 이식 (강의) |
| --- | --- |
| `CLAUDE.md` — 지원자 프로필 | 강사 톤·수준·금칙어 바이블 |
| `04-job-evaluation.md` — 적합도 5축 채점 | 소재 평가 5축 (wow · 재현성 · 유지보수 부담 · 숏폼 적합성 · 수명) |
| `/rank` — 공고 일괄 채점 후 순위 | 트렌드 T에 쌓인 소재 일괄 채점 → 강의화 우선순위 |
| `/apply` — 초안 작성 | `/초안` — 10분 단위 강의 스크립트 + 실습물 초안 |
| reviewer 에이전트 | **"수강생 역할" 리뷰어** — "여기서 막힌다"를 지적 |
| PDF 컴파일 + 시각 검사 | HTML 실제 실행 + 렌더 확인 |
| ATS 텍스트 층 검사 | 실습 코드를 초기 환경에서 재실행 |
| `job_search_tracker.csv` | 강의 제작 트래커 (소재 → 초안 → 검수 → 발행) |

### 가장 값이 큰 지점

**"수강생 역할 리뷰어"** 한 줄입니다.

강의자료의 진짜 실패 지점은 문장 품질이 아니라 **작성자가 이미 알고 있어서 안 보이는 전제**입니다.
같은 대화창에서 자기 글을 검토하면 이게 안 잡힙니다. 새 컨텍스트의 리뷰어를 띄워 "처음 보는 사람"으로 읽히게 해야 잡힙니다.

---

## 4. 웹소설 — 리뷰어는 되고, 검증은 안 됩니다

### 안 되는 이유

**"재미"는 컴파일되지 않습니다.**

리뷰어가 "이 회차 훅이 약하다"고 말하는 건 검사가 아니라 **또 하나의 의견**입니다.
합격선이 없으니 루프가 끝나지 않고, 반복해서 고칠수록 AI 평균 문체로 수렴합니다. 개성이 깎여 나갑니다.

### 그래도 되는 것 — 연속성 검사

판정 가능한 기준이 아예 없지는 않습니다. 오히려 장편으로 갈수록 사람이 못 하는 일들입니다.

- 회차 분량 (글자 수 상·하한)
- **설정 바이블 대조** — 인물 나이·능력·지명·존댓말 관계가 앞 회차와 어긋나는지
- 시점·시제 일관성 (1인칭이 3인칭으로 새는지)
- 복선 회수 트래킹 (심어둔 떡밥이 몇 회차에 회수됐는지, 미회수 목록)
- 직전 N회차와의 표현 중복 검사 (같은 비유·문장 반복)

원본의 `job_search_tracker.csv` + `/outcome`(결과 기록) 구조가 여기에 그대로 대응됩니다.

### 결론

**웹소설에는 "생성 파이프라인"이 아니라 "연속성 검사기"로만 붙이세요.**
본문은 직접 쓰고, 검사만 자동화하는 쪽이 실익이 큽니다.

---

## 5. 하지 말아야 할 것

- **저장소를 포크하지 마세요.** 구직용 코드, LaTeX 템플릿, 덴마크 채용 포털 CLI가 전부 딸려옵니다. 필요한 건 `.claude/commands/` 안의 마크다운 파일 구조뿐입니다. **빈 폴더에서 시작해 패턴만 옮기는 게 훨씬 빠릅니다.**
- **`/add-portal`, `/gmail-sync` 같은 확장은 흉내내지 마세요.** 다중 API 의존은 그대로 유지보수 채무가 됩니다. 로컬 파일 + 마크다운만으로 닫히는 범위에서 멈추세요.
- **강의 소재로 쓴다면 "이 저장소 설치하기"가 아니라 "이 설계를 내 작업에 이식하기"여야 합니다.** 전자는 설치 스택(Claude Code + Python + Bun + LaTeX + poppler) 때문에 첫 10분에 이탈이 납니다.
- **원본의 성과 수치(69건 지원 → 20건 면접 → 1건 합격)를 인용하지 마세요.** 저자 본인의 단일 사례 자기보고이고 대조군이 없습니다.

---

## 6. 지금 만들 최소 버전

빈 폴더에 이것만 있으면 시작됩니다. 전부 마크다운 파일입니다.

```
my-course/
├── CLAUDE.md              # 강사 톤·수준·금칙어·브랜드 규칙
├── .claude/
│   ├── commands/
│   │   ├── 평가.md         # 소재를 5축으로 채점 → 강의화 우선순위
│   │   ├── 초안.md         # 10분 단위 스크립트 + 실습물 초안 작성
│   │   └── 검수.md         # 수강생 역할 리뷰어 + 기계 검사 게이트
│   └── skills/
│       └── course-builder/
│           ├── 01-강의설계원칙.md    # 10분×10개, 결과 먼저
│           ├── 02-평가기준.md        # wow·재현성·유지보수·숏폼·수명
│           ├── 03-실습물규칙.md      # HTML 1장, 외부 의존성 0
│           └── 04-검수체크리스트.md  # 통과 기준 목록
├── 소재/                   # 트렌드 T에서 내려온 md
├── 초안/
└── 트래커.csv
```

### 각 커맨드가 하는 일

**`/평가`**
소재 폴더의 md를 전부 읽어 5축으로 채점하고, 강의화 우선순위를 매깁니다. 탈락 사유도 같이 남깁니다.

**`/초안`**
선택한 소재로 10분 단위 스크립트와 실습물 초안을 만듭니다. 강사 바이블의 톤을 따릅니다.

**`/검수`**
두 단계로 나뉩니다.

- 1단계 (기계 검사) — 글자 수, HTML 실행, 콘솔 에러, 외부 의존성, 폰트 규격. 여기서 떨어지면 사람에게 안 넘어갑니다.
- 2단계 (수강생 리뷰어) — 새 컨텍스트의 에이전트가 "이 분야를 처음 접하는 수강생"으로서 읽고, 막히는 지점을 지적합니다.

---

## 7. 기억할 것

- **검사 기준을 먼저 정하세요.** 무엇을 자동화할지보다, 결과물이 무엇을 통과해야 하는지를 먼저 쓰세요. 이게 전부입니다.
- **쓰는 AI와 보는 AI를 나누세요.** 같은 대화창에서 자기 글을 검토시키지 마세요.
- **최종 형태로 검사하세요.** 코드가 아니라 실제로 열리는 HTML을, 원고가 아니라 실제 발화 시간을 확인하세요.
- **웹소설은 검사기만.** 본문 생성은 맡기지 말고 연속성 검사만 자동화하세요.
- **도구는 관망, 패턴은 차용.** 이 저장소는 설치해서 쓰는 도구가 아니라 읽어서 배우는 설계 교본입니다.

---

## 참고 사항 하나

원본의 `/notion-sync`는 **저장소 파일을 원본(system of record)으로 두고, Notion은 읽기 전용 뷰로만 단방향 동기화**합니다. Notion에서 고친 내용은 파일로 되돌아오지 않습니다.

md 파일 → Notion → Oopy 3계층 구조를 고민 중이라면 참고할 만한 선례입니다. 양방향 동기화는 반드시 충돌이 생기고, 그 순간 어느 쪽이 진짜인지 알 수 없게 됩니다.
