Arda 개발 보고서
2026. 09. 29. github.com/Seuk-Team/Arda

목차 › 1. 사업 개요

사업 개요

채용 전 과정을 한 시스템으로 — 반복은 자동화하고 최종 합불은 사람이 확정한다 · 최종 갱신 2026. 09. 22.

시스템명 ArdaEval-ATS
개발 기간 69일08. 20. ~ 10. 27.
개발 인원 4명팀 seuk · 5도메인
필수 기능 27/2709. 03. 달성 후 유지
API 라우트 107DB 테이블 28
결정 기록 ADR 36편

1. 추진 배경 및 필요성

기능을 정하기 전에 “인사팀이 왜 이걸 쓰는가”에 먼저 답하려고 조사했다. 이 절의 수치는 2026. 08. 27. 작성한 시장 조사 문서 (docs/04_planning/01-시장조사-방향성.md)에서 가져왔다 — 시간 통계의 원출처는 candidate.fyi 2026 Recruiting Coordination Statistics 와 Stratus HR, 국내 근거는 나인하이어 · zuzu 분석과 ZDNet 기사다. 이 문서는 초안 상태로 남아 있으므로, 아래 수치는 조사된 현행 채용 실무의 값이고 Arda 도입 뒤의 단축 실측치가 아니다.

채용 실무는 엑셀 · 메일함 · 채용 플랫폼 세 곳에 흩어져 돌아간다. 지원자가 늘고, 담당자가 2인 이상이 되고, 개인정보 규정이 겹치는 순간 이 구조가 무너진다. 무너지는 지점은 기능 부족이 아니라 기록이 남지 않는 것이다 — “누가 언제 어느 단계로 옮겼는가”, “면접관 세 명의 평가가 어디 있는가”에 엑셀은 답하지 못한다.

확인된 문제내용 · 근거
3중 관리 붕괴 엑셀 + 메일함 + 채용 플랫폼. 지원자 증가 · 담당자 2인 이상 · 개인정보 규정이 겹치는 순간 엑셀이 무너진다
행정이 시간을 먹는다 코디네이터 업무의 46%가 일정 조율 등 행정. 면접 1건 수동 조율 평균 243분 · 이력서 1장 30~90초 · 지원자 1명 연락 5~15분
협업이 안 된다 단계 이동 주체 · 시점 · 사유와 면접관별 평가가 어디에도 남지 않는다
응답 지연 통보가 늦으면 후보가 이탈하고 회사 평판으로 돌아온다
컴플라이언스 채용절차법 · 개인정보보호법상 서류 보관 · 파기 의무를 엑셀로는 관리할 수 없다

수치가 말하는 것은 하나다 — 채용의 비용은 판단이 아니라 판단 주변의 반복에 쌓인다. 이력서를 읽고 판단하는 시간보다, 일정을 맞추고 메일을 쓰고 기록을 옮기는 시간이 길다. 문제가 실재한다는 외부 증거도 있다. 정부가 중소기업의 ATS 도입에 연간 이용료의 80%(최대 40만원)를 지원하는 사업을 운영 중이다 — 국가가 돈을 대는 종류의 문제라는 뜻이다.

그런데 여기에 AI 를 얹는 것 자체가 새로운 장벽이 된다. 채용담당자 71%가 ATS 를 쓰고 79%가 채용의 일부를 자동화하고 있지만, EU AI Act 는 채용을 고위험으로 분류하고 국내에는 채용절차법이 있다. 2018년 Amazon 이 과거 채용 데이터로 학습시킨 채용 AI 가 여성 지원자를 감점해 폐기된 사례가 이 위험의 전형이다. 2026년 구매 담당자의 실제 질문은 “AI 되나요”가 아니라 “AI 켜도 사고 안 나나요”다.

그래서 이 프로젝트의 방향을 AI 기능을 늘리는 쪽이 아니라, AI 를 안심하고 켤 수 있게 하는 장치를 먼저 짜는 쪽으로 잡았다. 사람이 확정하고, 기록이 남고, 비용이 보이고, 근거를 인용한다 — 이 넷이 다음 절의 개발 목적이 된다.

2. 개발 목적

반복 업무는 에이전트가 대신하고, 판단의 근거는 사람에게 보여주는 ATS.

비싼 것(기록 · 정리 · 취합 · 발송)을 자동화하고, 위험한 것(합불 판단)은 사람에게 남긴다.

채용 과정의 반복 업무를 자동화하고 흩어진 지원자 정보를 하나의 플랫폼으로 통합해, 채용 담당자가 ‘지원자라는 사람’에 집중할 수 있게 하는 것이 목적이다. 담당자가 공고를 올리고 지원자가 외부 공개 링크로 지원서 · 이력서를 제출하면, 아르(AI)가 자격요건 · 우대사항 · 인재상 3축으로 채점해 서류 단계를 자동 판정하고, 면접 이후 단계는 담당자 · 면접관이 칸반 보드에서 심사 · 평가한다. 단계가 바뀌면 지원자에게 메일이 자동 발송되고, 모든 이동에 이력과 평가 기록이 남는다. 최종 합불만은 항상 사람이 확정한다(ADR-0003 → 0034).

목적무엇으로 달성하는가왜 그렇게 했는가
반복 제거 서류 1차 심사 · 단계 전환 · 안내 메일 · 면접 일정 조율을 자동화. 자연어 한 문장이 검색 → 조회 → 단계 변경으로 분해돼 순차 실행된다 채용의 시간은 판단이 아니라 판단 주변에서 샌다 — 1절의 46% · 243분
근거 노출 3축 점수 · 강점/우려 · 확인 질문, 답변↔서류 대조 결과를 화면에 남긴다. 에이전트 응답은 도구 결과 · 이력서 원문만 인용한다 “왜 이 판정인가”에 답하지 못하면 자동화는 신뢰를 얻지 못한다
사람 확정 보장 쓰기 도구(단계 변경 · 면접관 배정 · 메일 발송)는 확인 카드로 반환돼 사람이 승인해야 실행된다. 역행은 항상 허용하고, 자동 탈락 메일은 마감 뒤 담당자가 일괄 발행한다 되돌릴 수 있어야 AI 를 켤 수 있다 — 번복 여지를 구조로 남긴다
비용을 보이게 호출마다 모델명 · 토큰 · 원가를 로깅하고, 프롬프트 18개를 코드로 버전 관리한다. 인사 · 능력 · 기본 FAQ 는 규칙 라우터가 LLM 없이 처리 “AI 켜면 얼마 나오나”는 실제 도입을 막는 질문이다

적용 원칙은 하나로 줄인다 — 버튼으로 되는 일에는 AI 를 쓰지 않는다. 비정형 문서 이해, 자연어 요청의 작업 분해처럼 버튼으로 안 되는 일에만 쓴다. 표정(ViT + MediaPipe) · 음성 신호는 담당자 화면에 수치로 보이되 점수 · 합불 판정의 재료로는 쓰지 않는다(ADR-0029). AI 요약 문장도 측정 수치의 재서술까지만 허용하고, 수치에 없는 숫자나 사람을 단정하는 단어가 나오면 문장을 버리고 고정 틀로 대체한다.

시스템명 Arda 는 톨킨의 퀘냐로 ‘영역(Realm)’, 모든 종족이 살아가는 터전을 뜻한다. 후보였던 Argus(감시자) · Themis(정의의 여신)를 뺀 이유는 판정하는 존재라서 원칙과 충돌한다는 것이었다. Arda 는 판단하는 주체가 아니라 판단이 일어나는 장소다(ADR-0014) — 도구는 자리를 마련하고, 판단은 그 안의 사람이 한다.

3. 개발 범위

범위는 경계가 있을 때 의미가 있다. 아래는 만든 것과 함께 만들지 않기로 하고 근거를 문서에 남긴 것을 같이 적는다. 뺀 것도 되살린 것도 전부 ADR 로 기록했고, 개정할 때는 원문을 지우지 않고 절을 덧붙인다. 현재 상태는 해커톤 제출 프리즈(2026. 09. 20.) 이후 심사 기간(09. 20. ~ 10. 17.)이며, 10. 27. AWS 잔여 리소스 정리와 인계로 종료한다.

3-1. 범위의 축 — 채용 단계 모델

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

단계는 다섯, 규칙은 여섯이다. 단계는 DB enum 이 아니라 코드 상수 + 체크 제약으로 두고, 전환 규칙은 서비스 레이어가 강제한다. 마감 · 만료는 크론이 아니라 조회 시점에 판정한다.

규칙내용 · 이유
전진은 한 칸씩 단계를 건너뛰는 전진은 허용하지 않는다
역행은 항상 허용 사람이 AI 판정을 되돌리는 것이 유일한 안전장치다
불합격은 어느 단계에서든 단, 사유가 없으면 422 — 사유 없는 이력은 나중에 아무도 설명하지 못한다
서류는 AI 자동 판정 3축 100점 채점 · 임계 기본 60 · 자료 부족은 서류 탈락. 사람이 한 번 손대면 그 지원자는 이후 자동 판정에서 빠진다 — 수동이 항상 이긴다(ADR-0034)
일괄 변경은 전부 아니면 전무 200명 중 30명만 바뀌면 담당자가 무엇이 됐는지 알 수 없다 → 전체 롤백(409)
사용자는 지우지 않는다 비활성화만 — changed_by · evaluator_id 로 박힌 이력을 물리 삭제가 부순다

3-2. 포함 범위

영역내용
채용 프로세스 자동화 칸반 보드 단계 관리 · 단계 변경 시 자동 메일(n8n 웹훅 + SMTP, 실패 시 API 가 5분마다 최대 3회 재발송) · 단계 이력 기록 · 공고 마감 · 다시 열기
자동 서류 심사 요약 → 평가 → 추천 3단 체인으로 자격요건 · 우대사항 · 인재상 3축 100점 채점, 임계 기준 자동 이동, 자료 부족 자동 탈락, 사람 개입 시 자동 판정 제외(ADR-0034)
AI 이력서 분석 PDF / DOCX / HWPX 텍스트 추출 · 학력 · 경력 · 기술스택 구조화 (AI 가 채운 값에는 「AI 추정」 표식) · RAG 시맨틱 검색(ko-sroberta + pgvector, 키워드 폴백 병행)
도구 호출 에이전트 ‘아르’ 자연어로 지원자 검색 · 조회 · 단계 변경 · 면접관 배정 · 일정 제안 · 메일 초안/발송 · 이력서 드롭 접수 — 도구 12종, 쓰기는 확인 카드, 빈출 요청은 규칙 라우터
지원자 통합 관리 지원자 CRUD · 검색 · 필터(더미 10만 건 기준 튜닝) · 면접관 배정 · 평가 · 종합평가 화면 · 공고별 현황
공개 지원 · 지원자 포털 로그인 없는 외부 공개 링크 접수 · presigned URL 로 브라우저에서 S3 직접 업로드 · 지원자 로그인(이메일 + 생년월일, ADR-0033) · 전형 현황 · 일정 · 설문 · AI 면접을 한 화면에서 · FAQ 챗봇
AI 면접 · 실시간 분석 이력서 · 자소서 기반 맞춤 질문 · 음성 답변 STT · 답변↔서류 대조 · 담당자 1:1 WebRTC 실시간 화면 · 표정 · 음성 참고 지표(점수 미반영) · 종료 시 수치 요약
인적성(사전 성향) 설문 10문항 5점 척도 · 카테고리 통계는 코드가 계산하고 AI 는 관찰 문장으로 재서술만 한다 · 미응답 불이익 없음(ADR-0027)
제출물 무결성 원장 이력서 · 자소서의 SHA-256 을 추가 전용 원장에 해시 사슬로 쌓고, DB 트리거가 수정 · 삭제 · TRUNCATE 를 거부한다. 사슬 머리는 Ethereum Sepolia 에 앵커하고 서명 개인키는 서버 밖에 둔다(ADR-0028)
인증 · 권한 담당자 JWT 12시간 · 비활성 계정은 발급된 토큰도 401 · 권한 등급 admin / member 2종(ADR-0017) · n8n · 판정 워커는 서비스 토큰(/internal)
운영 자동 CD(main 머지 → 2분 폴링 · 컨테이너 안에서 alembic 이행) · CI 5잡 · CloudWatch / SNS 경보 · 매일 S3 백업 · 컨테이너 로그 상한 · 외부 헬스체크

규모 — API 라우트 107 · DB 테이블 28(ERD v2.8) · alembic 리비전 26 · 웹 화면 25 · 앱 화면 23 · pytest 1,165건 통과 · 앱 위젯 테스트 30파일 · AI 프롬프트 18 · ADR 36편 · 커밋 1,095. 기획 필수 27기능은 2026. 09. 03. 에 27/27 구현을 달성해 유지 중이고 달성, 위 표의 자동 서류 심사 이하 항목은 기획서 밖에서 ADR 로 편입해 배포까지 끝낸 확장분이다.

3-3. 범위 밖 — 하지 않는 것

“못 만들어서 안 한 것”과 “안 만드는 게 맞다고 판단한 것”은 다르다. 아래는 후자다.

하지 않는 것이유
Kubernetes “한 달 안에 굴렸다고 말할 수 없는 것은 넣지 않는다”(ADR-0001). EC2 1대 + Docker Compose 로 간다 유지
AI 최종 합불 확정 서류 단계 이동까지만 AI 가 한다. 최종 합격 · 불합격은 사람만 확정한다 (ADR-0003 → 0034). 화면 문법도 앰버 점선 = AI 제안 / 실선 = 사람 확정으로 구분한다
표정 · 음성으로 점수 매기기 표정 · 음성 신호는 담당자 참고 지표까지만이고 점수 재료가 아니다(ADR-0029). 인적성도 성격 유형 판정 · 점수화 · 합불 의견을 만들지 않는다(ADR-0027)
면접관 성향 모방 모델 검토했으나 채택하지 않았다 — 면접관의 편향까지 복제하고(2018 Amazon 폐기 사례), 사람 검토 없는 자동 합불은 EU AI Act 고위험이며, 면접관 1인의 연간 표본과 ‘합격 이유’ 정답 라벨이 둘 다 없다. 같은 문제의식은 성향을 복제하지 않고 드러내는 방향으로 정리했다
3인 이상 다자 화상면접 제외 근거였던 견적(시그널링 + TURN + SFU)은 3인 이상이 전제였다. 둘이면 SFU 없이 두 끝점이 직접 붙으므로 1:1 만 도입했고, 집단 면접은 시연 뒤 ADR 로 다룬다
speech-to-speech 음성은 STT 로 받아 기존 텍스트 에이전트에 넣는다(ADR-0004)
지원자 SNS 크롤링 채용절차법 · 개인정보보호법 · 약관 위반 유지
실시간 공동 편집 제외(ADR-0005). 담당자 메모는 행 추가 방식으로 대체 유지
외부 채용사이트 연동 기획 단계에서 제외했다. 대신 회사 쪽에서 지원자를 밀어 넣는 통합 API 를 ADR-0037 로 따로 열었다 — 코어가 받는 경로는 API push 하나다
구형 HWP 텍스트 추출은 PDF · DOCX · HWPX 만 지원한다

3-4. 범위를 개정한 것

오너가 개정 ADR 을 쓰면 잘랐던 기능도 되살아난다. 원문은 지우지 않고 절을 덧붙였다.

항목원 결정현재
표정 분석 제외 — 직무성과 예측 기여 0.25% 미만 · 차별 위험 · HireVue 2021 폐기(ADR-0002) 개정 도입하되 담당자 참고 지표까지(ADR-0029). 원 근거는 문서에 그대로 남겼다
AI 판정 범위 AI 는 추천까지만(ADR-0003) 개정 서류 단계는 AI 자동 판정, 최종 합불만 사람(ADR-0034). 안전장치 셋 — 이력 · 일괄 메일 · 수동 우선
실시간 화상면접 제외 — 견적 4주는 3인 이상 전제 개정 1:1 만 도입, 다자는 제외 유지
메일 경로 SQS 큐 + 메일 워커 + SES 개정 n8n 웹훅 + SMTP 로 전환하고 SQS · SES 폐기 (ADR-0031 · 0036). 메일 · 큐 · 스토리지는 환경변수 스위치로 공급자를 바꿀 수 있다
온프레미스 자체 서빙 계획 — sLLM 과 STT 를 온프레미스로 돌려 개인정보를 외부로 내보내지 않는다 (ADR-0024) 개정 학원 PC 3대로 실제 구축해 운영한 뒤 폐쇄했다(09. 18.). 심사 · 운영 서빙은 클라우드(AWS) + Claude 로 확정. Qwen 어댑터는 비용 절감 R&D 자산으로 보존한다

4. 기대 효과

효과는 실측치가 있는 것과 없는 것을 갈라서 쓴다. 오른쪽 열이 비어 보이지 않게 하려고 숫자를 지어내지 않았다.

구분기대 효과근거 · 실측
업무 효율 서류 1차 심사 · 단계 전환 · 알림이 자동으로 돌아 담당자는 면접과 최종 판단에 집중한다 접수 즉시 3단 체인이 점수를 내고, 임계(기본 60) 이상은 applied → screening → interview, 미만은 applied → rejected 로 시스템이 옮긴다(ADR-0034) — 서류 단계에 사람이 옮길 카드가 쌓이지 않는다. 자동을 끄려면 공고를 screening_mode='manual' 로 둔다(점수만 매기고 멈춘다) · 검색은 10만 건 기준 111ms → 7.8ms
판단 품질 판정 근거가 화면에 남아 “왜 이 판정인가”를 설명할 수 있다 3축 100점 채점(요건 60 · 우대 10 · 인재상 30). fit-check 지원자 24명 실측으로 가중치를 요건 50→60 · 우대 20→10 으로 개정하고, 요건 ≥70 이면 문화 하한 50 규칙을 넣어 요건 우수자가 문구 하나로 탈락하지 않게 했다
정보 통합 지원자 정보 · 이력서 · 평가 · 면접 분석 · 이력을 단일 시스템에서 조회한다 웹 25화면 + 앱 23화면이 같은 FastAPI API 를 쓴다 · 지원서를 축으로 한 테이블 28개
투명성 · 무결성 모든 단계 이동과 평가에 이력이 남고, 제출물 위변조를 외부에서 검증할 수 있다 SHA-256 해시 사슬 + DB 트리거가 수정 · 삭제 거부 + 사슬 머리를 Sepolia 에 앵커 · 불합격은 사유 없으면 422 · 일괄 변경은 부분 성공 없이 전체 롤백(409)
비용 통제 호출마다 원가가 보이고, 모델 교체를 감이 아니라 같은 자로 잰 근거로 결정한다 아르 호출당 실측 $0.0075 · 인사 · 능력 · 기본 FAQ 는 규칙 라우터가 LLM 없이 $0 · 동일 채점기(judge.py) 동일 23건으로 Qwen 학습 전 26.1% → v9 73.9%, Claude Haiku 4.5 는 69.6%
접근성 시간 · 장소 제약 없이 지원하고 자기 전형을 확인한다 로그인 없는 공개 지원 링크 · 이메일 + 생년월일 로그인으로 24시간 포털 · 모바일 대응 웹 + Flutter Android 앱

한계 — 아직 안 된 것

프리즈(2026. 09. 20.) 시점에 남은 것이 있다. 면접관 자동 배정이 0명으로 떨어지는 결함이 남아 있고, 받아쓰기 정확도는 재현 테스트(12/12 정확 전사)와 달리 실제 음성에서 흔들린다. 면접 방 상태가 프로세스 메모리에 있어 API 워커를 1개로 묶어 두고 있다 — Redis 이관은 계획 상태다.

비교 수치에도 단서가 붙는다. 모델 비교에 쓴 채점기는 Qwen gold 기준이라 절대 점수가 아니라 상대 궤적만 유효하다고 보고서에 명시했다. 그리고 화면과 데모의 지원자 · 회사는 전부 가상 데이터다 — 위 효과는 설계와 실측 벤치마크로 뒷받침한 것이지, 실제 채용 데이터로 검증한 성과가 아니다.

← 목차로