← Start here · Module 3B · Project
자유 텍스트 구인 공고를 붙여넣으면 검증된 구조화 필드(JSON)로 뽑아내는 작은 Flask 웹앱. Module 3의 forced tool use를 실제로 굴려봅니다.
Projects/Module_03_extractor/webapp/.
강사 구인 공고 텍스트 → title · pay · location · requirements 같은 깔끔한 필드.
입력은 사람이 쓴 지저분한 공고 한 덩어리예요. 출력은 프로그램이 바로 DB에 넣을 수 있는 구조화된 JSON. 보너스로, 같은 앱이 구조화 추출과 대비되는 자유 텍스트 이메일 초안도 만들어 줍니다(도구를 강제하지 않는 경우).
브라우저 한 페이지 → Flask 한 프로세스(:5001) → Claude 호출. 끝.
chat-app(2B)과 달리 프론트가 따로 없어요 — Flask가 templates/index.html을 직접
렌더링하는 단일 프로세스라, 실행이 가장 단순합니다(그래서 아래 "Run it live"의 첫 대상).
버튼을 누르면 서버가 이 앱을 잠깐 띄우고 URL을 돌려줍니다(놀면 자동 종료).
가장 확실한 방법 — 키는 내 .env에, 비용·노출 걱정 0.
cd instructor-extractor
../.venv/bin/pip install -r requirements.txt # 저장소 루트의 venv 사용
../.venv/bin/python app.py # → http://localhost:5001
브라우저에서 http://localhost:5001 → 공고 텍스트를 붙여넣고 [Extract].
ANTHROPIC_API_KEY는 Module 1에서 만든 공유 .env를 그대로 씁니다.
"산문 말고 이 스키마를 채워"라고 도구로 강제 → 그 다음 코드로 검증.
같은 앱이 "이메일 초안"엔 도구를 강제하지 않는 이유는?
출력 형태는 용도를 따릅니다. 기계가 쓸 데이터는 스키마로 강제(Extract)하고, 사람이 읽을 글은 자유롭게 둡니다(Email). 같은 모델, 다른 계약(contract)이에요.