개발 요구 사항

최종 갱신 2026-09-28 — 보안 요구(SEC-001)의 구현 현황을 실제 코드 기준으로 표기.

목적

채용 프로세스 전 과정(공고 등록 → 지원 접수 → 서류 검토 → 면접 → 합불 통보)을 하나의 웹 플랫폼으로 구현하고, AI 기술을 접목하여 이력서 분석과 정보 검색을 자동화한다.


개발 범위

요구 ID 기능 검수 기준
SFR-001 이력서 파싱 — PDF/DOCX 업로드 시 이름·학력·경력·기술스택 자동 추출 주요 필드 추출 정확도 90% 이상
SFR-002 칸반 보드 — 지원자 카드를 드래그하여 채용 단계 전환 상태 전환 시 DB 반영 200ms 이내
SFR-003 Tool-Calling Agent — 자연어 명령으로 지원자 검색·조회·단계 변경·면접관 배정·일정 제안·메일 초안/발송·이력서 드롭 접수 도구 12종 · 쓰기 도구는 확인 카드 필수 · 회귀 하네스 40시나리오 · 동일 채점기 23건 기준 Claude 69.6% / 자체학습 v9 73.9% (2026-09-17)
SFR-004 RAG 질의응답·시맨틱 검색 — 이력서·자소서·공고 기반 의미 검색 (ko-sroberta + pgvector, ADR-0021) 키워드 폴백 병행 · search_mode 로 벡터 가동 여부 응답에 노출
SFR-005 지원자 관리 — 지원자 CRUD, 검색·필터링, 채용 단계별 목록 조회 전체 CRUD 정상 동작, 커서 페이지네이션 · 10만 건 111ms → 7.8ms
SFR-006 이메일 알림 — 채용 단계 변경 시 자동 이메일 발송 (n8n 웹훅 + SMTP, ADR-0030) n8n 장애 시 API 가 5분마다 재발송(최대 3회) · SES·SQS 는 폐기(ADR-0031·0036)
SFR-007 자동 서류 심사 — 3축(자격요건·우대사항·인재상) 100점 채점 → 임계 기준 자동 단계 이동 (ADR-0034) 자료 부족 자동 탈락 · 사람 개입 시 자동 판정 제외 · fit-check 24명 정확성 분석으로 가중치 개정
SFR-008 AI 면접 · 실시간 분석 — 맞춤 질문 · 음성 STT · 답변↔서류 대조 · 1:1 WebRTC · 표정/음성 참고 지표 (ADR-0029·0032·0038) 참고 지표는 점수·합불에 미반영 · 실시간 STT 는 서버 내 로컬 전사
SFR-009 제출물 무결성 원장 — SHA-256 해시 사슬 · DB 트리거 수정/삭제 거부 · Sepolia 앵커 (ADR-0028) 트리거 상태 변경은 감사 로그 · 서명 키는 서버 밖

채용 프로세스 자동화

칸반 보드를 중심으로 채용 전 과정을 관리한다.

단계 흐름:

지원 접수(applied) → 서류 검토(screening) → 면접(interview) → 최종 합격(accepted) / 불합격(rejected)

규칙 — 전진은 한 칸씩 · 역행은 항상 허용(사람이 AI 판정을 되돌리는 안전장치) · 불합격은 어느 단계에서든(사유 필수) · 서류 단계는 AI 자동 판정, 사람이 한 번 손대면 이후 자동 판정에서 제외(ADR-0034) · 일괄 변경은 전부 성공 아니면 전체 롤백.

  • 각 단계 전환 시 단계 이력이 자동으로 기록된다(changed_by=NULL 은 시스템 판정)
  • 단계 변경 시 지원자에게 자동 메일이 발송된다 (n8n 웹훅 + SMTP · 실패 시 API 재발송). 자동 탈락 메일은 마감 뒤 담당자가 일괄 발행
  • 면접관 배정 및 단계별 평가(점수·코멘트)를 기록한다
  • 모든 이동과 평가는 이력으로 남아 추후 감사 추적이 가능하다

AI 기반 이력서 분석

기능 설명 기술
이력서 텍스트 추출 PDF/DOCX/HWPX 에서 본문 추출(구형 HWP 미지원) · 학력·경력·기술스택 구조화, AI 가 채운 값엔 「AI 추정」 표식 pypdf · Claude
요약·평가·추천 3단 체인 요지·핵심 역량 → 3축 점수(요건 60 · 우대 10 · 인재상 30) · 강점/우려 → 추천 · 확인 질문 (ADR-0022) Claude haiku-4-5 · 프롬프트 v2/v3 버전 관리
RAG 시맨틱 검색 스킬·학력·경력 임베딩으로 “Python 경험자” 같은 의미 검색, 키워드 폴백 병행 ko-sroberta + pgvector
Tool-Calling Agent ‘아르’ 자연어 명령을 도구 12종 호출로 분해, 쓰기는 확인 카드, 빈출 요청·기본 질문은 규칙 라우터($0) Claude Tool Use · 규칙 의도 라우터
모델 전략 Qwen3-8B QLoRA 자체학습 3어댑터(chat v9 73.9%)와 Claude 를 동일 채점기로 비교 → 심사 서빙은 클라우드 + Claude, Qwen 은 R&D 자산 (ADR-0024 → 09-18 확정) 동일 채점기 judge.py · 23건

서류 단계 이동은 AI 가 하되 최종 합불 확정은 항상 사람이 한다(ADR-0003 → 0034). 표정·음성 신호는 참고 지표로만 표시되며 점수에 쓰지 않는다(ADR-0029).


지원자 통합 관리 기능

  • 지원자 CRUD — 지원자 등록·조회·수정·삭제
  • 검색·필터 — 이름·학교·기술스택 기반 검색, 더미 데이터 10만 건 기준 인덱스 튜닝
  • 면접관 배정 — 단계별 면접관을 지정하고 평가를 기록
  • 공개 지원 폼 — 로그인 없이 외부 링크로 지원서 제출, 이력서 S3 presigned URL 업로드
  • 모바일 대응 — 모바일에서도 지원자 목록·상세를 조회할 수 있는 반응형 UI

보안 및 개인정보 보호

요구 ID 항목 검수 기준
SEC-001 인증·인가 — JWT 기반 인증, CORS 설정, 개인정보 암호화 미인증 요청 401/403 차단 · 현황: S3 SSE·전송 TLS·최소 권한 IAM (필드 단위 AES-256 은 기획 요구, 미구현)
SEC-002 데이터 보안 — 이력서 파일 S3 암호화 저장, 접근 권한 IAM 기반 제어 S3 SSE 활성화, IAM 정책 적용

역할 기반 접근 제어 (RBAC) — 권한 등급은 둘(ADR-0017): 위계가 아니라 조작 권한의 유무다. 조회는 로그인만 하면 전부 허용 — 옛 “면접관은 배정된 지원서만” 규칙은 폐지됐다.

등급 권한 범위
admin 면접관 배정·해제 · 계정 생성 · 메일 템플릿 · 타인 가용 시간 (admin 전용 넷)
member 그 외 전부 — 단 평가 작성은 배정된 건만
지원자 링크 안 일회성 토큰 또는 이메일 + 생년월일 로그인(ADR-0033) — 담당자 화면과 분리
시스템·n8n 서비스 토큰(/internal/*) — 없으면 아예 호출하지 않는다

추가 규칙 — JWT 12시간 · 비활성 계정은 이미 발급된 토큰도 401 · APP_ENV=production 에서 공개 가입 차단 · 심사 데모 계정은 비밀번호·역할 변경 403(공유 계정 보호) · 프롬프트에 연락처·주민번호 미포함.


구현 현황 (2026-09-22 기준)

기획 필수 27기능은 09-03 에 27/27 구현을 달성해 유지 중이다(권장·여유 기능은 09-03 기준 22/30 · 0/23 구현이었고, 이후 아래 ADR 편입 범위로 확장을 진행했다).

기획서 밖에서 ADR로 정식 편입되어 배포까지 끝난 범위 — 도구 호출 에이전트(확인 카드·비용 관측·규칙 라우터 $0), 요약·평가·추천 3단 체인 + 자동 서류 심사(ADR-0034), RAG 시맨틱 검색(ADR-0021), 면접 일정 자동화(FAQ 챗봇 포함), AI 면접 — 1:1 화상·STT·표정/음성 참고 지표(ADR-0029·0032·0038), 인적성 설문(ADR-0027), 지원자 로그인(ADR-0033), 제출물 무결성 원장 + Ethereum Sepolia 앵커(ADR-0028), 헥사고날 재편(ADR-0035), 심사위원 데모 계정. AI 모델 전략은 Qwen 자체학습으로 검증한 뒤 클라우드 + Claude 로 확정(ADR-0024 → 09-18). 각 항목은 개발 일정·문제와 극복·개발 로그에서 확인한다.

제외·개정 이력 (전부 ADR로 기록 — 개정은 원문을 지우지 않고 절을 덧붙인다):

항목 원 결정 현재
Kubernetes 제외 — 한 달 안에 실제로 굴렸다고 말할 수 없는 것은 넣지 않는다 (ADR-0001) 제외 유지 · EC2 1대 + Docker Compose
표정 분석 제외 — 직무성과 예측 기여 0.25% 미만, 차별 위험, HireVue 2021 폐기 (ADR-0002) 개정 도입(ADR-0029) — 담당자 참고 지표까지만, 점수 재료 아님. 원 근거는 문서에 그대로 남김
AI 자동 합불 판정 AI 는 추천까지만 (ADR-0003) 개정(ADR-0034) — 서류 단계는 AI 자동 판정, 최종 합불만 사람. 안전장치 셋(이력·일괄 메일·수동 우선)
실시간 화상면접 제외 — 견적(시그널링+TURN+SFU 4주)은 3인 이상 전제 1:1 만 도입 — 둘이면 SFU 없이 P2P. 집단 면접은 시연 뒤 ADR
음성 감정 분석 · 인적성 성격 판정 재서술·전사까지만 (ADR-0026·0027) 음성 신호는 참고 지표로 표시(점수 미반영) · 성격 판정 금지 유지
지원자 SNS 크롤링 채용절차법·개인정보보호법·약관 위반 제외 유지
실시간 공동 편집 제외 (ADR-0005) 제외 유지
SQS 워커 · SES 초기 메일 경로 폐기(ADR-0031·0036) — n8n + SMTP 로 전환, 스위치 3개로 공급자 교체 가능
온프레미스 자체 서빙 계획 (ADR-0024) 구축 후 폐쇄 — 로컬 sLLM 도구 오호출·예시 베끼기·JSON 깨짐이 심사 직전 누적. Qwen 어댑터는 R&D 자산