Job-Cheat의 Firestore 데이터 계약을 설명하는 JSONC 목데이터·스키마 카탈로그입니다.
이 저장소는 실행 애플리케이션, 운영 Firestore 덤프, 또는 Firestore에 바로 import할 수 있는 시드 데이터가 아닙니다. 개발자가 사용자·페르소나·채용공고·자기소개서·면접·추천 데이터의 형태를 빠르게 합의하고, 프런트엔드·백엔드 개발에 사용할 비식별 예시를 확인하기 위한 참조 저장소입니다.
Important
모든 .json 파일에는 필드 설명용 // 주석이 포함돼 있습니다. 즉 엄밀한 JSON이 아닌 JSONC 스타일 문서이므로 그대로 파싱하거나 Firestore에 import할 수 없습니다. 사용 전 주석 제거와 대상 환경에 맞는 변환이 필요합니다.
| 구분 | 포함 | 포함하지 않음 |
|---|---|---|
| 데이터 모델 | Firestore 컬렉션 경로, 문서 필드, 참조 관계 | 운영 데이터베이스의 완전한 스키마 마이그레이션 |
| 목데이터 | 비식별 문서 예시와 UI·API 개발용 값 | 실제 사용자 대화, 면접 답변, 운영 데이터 덤프 |
| 개발 계약 | 구현 전후 확인할 데이터 형태와 변경 이력 | API 엔드포인트·권한 규칙의 단독 정의 |
| 기능 | 설명 |
|---|---|
| 스키마 카탈로그 | Job-Cheat의 핵심 도메인별 Firestore 문서 구조와 필드 의미를 제공합니다. |
| 비식별 예시 | 화면·API 개발에 사용할 수 있는 페르소나, 채용공고, 추천, 면접 예시를 제공합니다. |
| 참조 관계 안내 | 사용자와 페르소나를 중심으로 공고·자기소개서·면접·추천을 연결하는 방식을 보여줍니다. |
| 변경점 가시화 | 샘플과 현재 서버 구현 사이의 차이를 기록해 잘못된 구조 복제를 방지합니다. |
- 서버 구현이 최종 계약: 이 저장소의 예시는 설계·개발 참고용입니다. 런타임에 사용하는 정확한 경로와 필드는
server코드 및 해당 API 응답을 우선합니다. - 사용자·페르소나 중심 분리: 변경 가능한 개인 데이터는
users/{userId}/personas/{personaId}아래에 연결해 사용자와 페르소나별로 분리합니다. - 운영 데이터 금지: 실제 이메일, 대화 내역, 음성 파일, 면접 답변, 토큰, Firebase 서비스 계정은 절대 추가하지 않습니다.
- 샘플 변경도 계약 변경: 필드·경로를 바꾸면 관련 JSONC, 이 README, 서버 구현을 함께 검토합니다.
- 자동 시크릿 검사: pull request와
main브랜치 변경은 TruffleHog 워크플로로 검사합니다. 자격 증명 탐지 시 변경을 중단하고 해당 키를 즉시 폐기·교체합니다.
| Category | 기술 |
|---|---|
| Data & Storage | Cloud Firestore, Firebase Storage |
| Schema Reference | JSONC 스타일 .json 문서 |
아래 구조는 기존 JSONC 샘플과 현재 서버 구현을 함께 대조해 정리한 기준입니다. 모든 경로를 좁은 화면에서도 읽을 수 있도록 계층으로 표현했습니다.
job_postings/{jobPostingId}
users/{userId}
└── personas/{personaId}
├── cover_letters/{coverLetterId}
├── interview_sessions/{sessionId}
│ └── questions/{questionId}
├── recommendations/{recommendationId}
└── scrap: [jobPostingId, ...]
- 사용자 — users.json: 이메일 등 사용자 기본 정보
- 페르소나 — personas.json: 희망 직무, 기술, 역량 분석의 기준 문서
- 채용공고 — job_postings.json: 공고 내용, 자격·우대 요건, 근무 조건, 요구 역량
- 자기소개서 — cover_letters.json: 강점·경험, 작성 근거, 생성 초안
- 면접 세션 — interview_sessions.json: 답변 요약, 종합 피드백, 최종 점수
- 면접 질문 — questions.json: 질문 의도, 답변 가이드, 답변 분석
- 추천 — recommendations.json: 공고 ID, 추천 점수, 일치·보완·성장 근거
- 스크랩 — scraps.json: 페르소나 문서의 공고 ID 배열
recommendations.json의 상단 주석은 현재 구현과 같이 페르소나 하위 컬렉션을 가리킵니다. 반면 기존 README는 이를 최상위 컬렉션으로 설명하고 있었습니다. 이 README는 페르소나 하위 컬렉션을 기준으로 정정합니다.
scraps.json은 최상위 scraps 컬렉션을 예시로 두지만, 현재 서버는 페르소나 문서의 scrap 배열을 읽고 갱신합니다. 따라서 scraps.json은 이전 설계 참고 자료이며, 새 기능 구현이나 데이터 적재에는 서버 구현의 scrap 배열을 사용해야 합니다.
기존에는 evaluations 하위 컬렉션에 질문별 점수를 저장하고 취합했습니다. 현재 이 참조 모델은 해당 하위 컬렉션 대신 페르소나 문서에 최종 역량 결과를 직접 둡니다. 샘플의 competency_scores, competency_reasons, ai_analysis_summary는 이 변경을 설명합니다.
database/
├── users.json # 사용자 기본 정보 예시
├── personas.json # 페르소나와 역량 평가 예시
├── job_postings.json # 채용공고와 요구 역량 예시
├── cover_letters.json # 자기소개서 예시
├── interview_sessions.json # 면접 세션·종합 피드백 예시
├── questions.json # 면접 질문·답변 분석 예시
├── recommendations.json # 페르소나별 맞춤 공고 추천 예시
├── scraps.json # 이전 스크랩 컬렉션 설계 예시
├── .gitignore # 자격 증명·개인 키의 Git 추적 차단 규칙
├── .github/workflows/ # 자동 시크릿 검사 워크플로
└── README.md # 데이터 계약과 사용 기준
- Git
- JSONC 파일을 열 수 있는 텍스트 편집기
- Firestore에 적재할 경우 별도의 Firebase 프로젝트와 변환·적재 도구
git clone https://github.com/C4-job-cheat/database.git
cd database파일의 최상단 주석에서 대상 Firestore 경로를 확인한 뒤, 예시 필드를 검토합니다. 구현 전에는 위의 현재 데이터 계약 및 서버 코드를 함께 확인합니다.
sed -n '1,180p' personas.json
sed -n '1,220p' job_postings.json이 레포에는 실행 명령이 없습니다. 필요한 샘플만 복사하고 주석을 제거한 후, 서버가 기대하는 Firestore 문서 경로와 형식으로 변환해 사용합니다. 운영 데이터와 자격 증명은 이 저장소에 넣지 않습니다.
문서와 샘플을 수정한 후 공백 오류와 변경 범위를 확인합니다.
git diff --check
git status --short| 파일 | 확인할 내용 |
|---|---|
| personas.json | 페르소나·역량 평가 문서와 예시값 |
| job_postings.json | 공고·요구 역량·근무 조건 구조 |
| cover_letters.json | 자기소개서 입력·생성 결과 구조 |
| interview_sessions.json | 면접 세션의 요약·피드백·점수 구조 |
| questions.json | 질문별 답변·분석 구조 |
| recommendations.json | 페르소나별 추천 점수와 추천 근거 |
| scraps.json | 이전 스크랩 컬렉션 설계 참고 자료 |