기업·관리자 채용 관리 플랫폼
구인기업의 공고 관리와 지원자 선별, 유료 공고 상품 결제, 헤드헌팅 의뢰, 관리자의 인증·신고 승인과 번역 문구 편집까지 확장한 구현한 프로젝트입니다.
프로젝트 개요
구인기업의 공고 관리와 지원자 선별, 유료 공고 상품 결제, 헤드헌팅 의뢰, 관리자의 인증·신고 승인과 번역 문구 편집까지 확장한 구현한 프로젝트입니다. 채용 현황을 한 장의 포커스 차트와 보조 위젯으로 보여주는 상단 메뉴형 콘솔을 React와 Express 기반으로 설계합니다. 구직자 데모의 MVP 이후 결제 확장과 월 정액 구독 구조까지 함께 설계합니다.
작업 범위
- 채용 현황 대시보드: 기간별 지원 추이를 대형 차트로 보여주고 우측에서 가입자·공고·지원 수 지표와 승인 대기 건을 함께 확인합니다. 하단 위젯에서 공고 상태 분포와 최근 활동 타임라인을 이어서 살펴봅니다
- 공고·지원자 관리: 기업회원이 공고를 등록·수정·마감하고 지원자 목록에서 진행 상태를 바꾸며 연락합니다. 기업 인증 서류 업로드와 승인 상태도 같은 화면에서 확인합니다
- 공고 상품 결제·헤드헌팅 의뢰: 상단 노출 등 유료 공고 상품을 고르고 결제하며 결제 내역을 조회합니다. 직접 채용이 어려운 기업은 의뢰 폼으로 제휴 헤드헌팅사에 상담을 요청합니다
- 인증·신고 승인: 관리자가 신원확인 신청과 기업 인증 서류를 검토해 승인하면 Verified 뱃지가 부여됩니다. 신고가 접수된 게시물은 검토 후 숨김 처리하고 보관 기간이 지난 신분증 파일은 삭제 대상으로 표시합니다
주요 업무
- 채용 현황 대시보드 화면: 집계 쿼리를 뷰로 분리하고 대시보드 API가 기간 단위별 시계열을 한 번에 반환하도록 설계합니다
- 공고·지원자 관리 화면: 상태 변경 API가 상태 머신 검증 후 구직자 알림 이벤트를 발행하도록 구직자 데모와 같은 모델을 공유합니다
- 공고 상품 결제·헤드헌팅 의뢰 화면: 결제 요청과 웹훅 결과를 분리 저장하고 상품 테이블을 구독형 상품까지 확장할 수 있게 설계합니다
- 인증·신고 승인 화면: 신분증 파일을 암호화 저장하고 접근 이력을 남기며, 보관 정책에 따른 삭제 대상 조회를 제공합니다




프로젝트 핵심 과제
구독형 상품과 이력서 열람 유료화로 확장할 수 있
단건 결제 상품 구조를 일반화하는 상품 모델 설계 필요
신분증 같은 민감 파일의 암호화 키 분리와 보관·삭제 정책을 정책 변경에 대응하는 모듈로 설계
웹훅 중복·지연 수신 상황에서 결제 상태와 공고 노출 상태가 어긋나지 않
정합성 설계 필요
관리자가 수정한 번역 문구가 구직자 앱에 즉시 반영되
캐시 무효화와 버전 관리 설계 필요
핵심 기능 상세
채용 현황 대시보드
기간별 지원 추이를 대형 차트로 보여주고 우측에서 가입자·공고·지원 수 지표와 승인 대기 건을 함께 확인합니다. 하단 위젯에서 공고 상태 분포와 최근 활동 타임라인을 이어서 살펴봅니다.
- PostgreSQL Materialized View로 일별·주별 가입·공고·지원 집계를 분리하고 갱신 주기 설계
- Recharts 영역 차트와 도넛·막대 위젯을 공용 데이터 훅으로 연결한 보드 구성
- Redis 캐시로 기간 필터별 집계 응답을 보관하고 이벤트 발생 시 해당 키 무효화
집계 뷰, 캐시, 차트 훅을 분리하여 기간 필터 변경이 포커스 차트와 보조 위젯에 동시에 반영되는 구조를 구현합니다.


공고·지원자 관리
기업회원이 공고를 등록·수정·마감하고 지원자 목록에서 진행 상태를 바꾸며 연락합니다. 기업 인증 서류 업로드와 승인 상태도 같은 화면에서 확인합니다.
- 공고 상태(작성·게시·마감)와 지원 상태 전이를 서버 상태 머신으로 검증
- 지원자 목록의 다중 선택 일괄 상태 변경을 트랜잭션으로 묶어 부분 실패 방지
- 사업자 서류를 AWS S3 Presigned URL로 업로드하고 인증 상태 필드를 승인 흐름과 연결
공고와 지원자 상태를 서버 상태 머신으로 통일하여 기업 화면, 관리자 승인, 구직자 알림이 같은 이벤트를 따르도록 구현합니다.


공고 상품 결제·헤드헌팅 의뢰
상단 노출 등 유료 공고 상품을 고르고 결제하며 결제 내역을 조회합니다. 직접 채용이 어려운 기업은 의뢰 폼으로 제휴 헤드헌팅사에 상담을 요청합니다.
- iPay88 결제 요청과 서버 웹훅 서명 검증을 분리하고 결제 상태를 이벤트 로그로 기록
- 상품·가격 테이블을 단건 상품과 월 정액 상품이 공존하는 구조로 모델링
- 헤드헌팅 의뢰 폼 제출을 접수 테이블에 저장하고 관리자 목록에서 상태 추적
결제 요청과 웹훅 확정을 분리한 상태 모델로 결제 상태를 일관되게 반영하고 신규 결제 수단 추가에 대비한 어댑터 구조를 구현합니다.


인증·신고 승인
관리자가 신원확인 신청과 기업 인증 서류를 검토해 승인하면 Verified 뱃지가 부여됩니다. 신고가 접수된 게시물은 검토 후 숨김 처리하고 보관 기간이 지난 신분증 파일은 삭제 대상으로 표시합니다.
- 신분증 이미지를 AES 암호화 후 객체 저장소에 보관하고 키를 분리 관리
- 승인·반려·삭제 이력을 감사 로그 테이블에 기록하고 관리자별 접근 이력 조회
- 보관 기간 경과 파일을 스케줄러가 삭제 대상으로 표시하는 정책 모듈 구현
암호화 저장, 접근 감사 로그, 보관 기간 기반 삭제 대상 표시를 하나의 신원확인 모듈로 묶어 구현합니다.


프로젝트 진행 단계
기업·관리자 권한 모델과 집계 뷰 설계 · 2026.10
기업·관리자 역할 분리와 대시보드 집계용 Materialized View, 감사 로그 테이블 정의
공고·지원자 상태 머신과 기업 인증 구현 · 2026.10
공고·지원 상태 전이 API, 일괄 상태 변경 트랜잭션, 사업자 서류 업로드와 승인 흐름 구현
결제 어댑터와 헤드헌팅 접수 구현 · 2026.10
iPay88 요청·웹훅 처리, 결제 내역, 단건·구독 상품 모델과 의뢰 접수 폼 구현
신원확인 모듈과 번역 문구 편집기 구현 · 2026.10
신분증 암호화 저장, 보관 정책 표시, 신고 숨김 처리, 4개 언어 문구 편집 화면 구현
개발 결과
기술적 주안점
- 집계 뷰, 캐시, 차트 훅을 분리하여 기간 필터 변경이 포커스 차트와 보조 위젯에 동시에 반영되는 구조를 구현합니다
- 공고와 지원자 상태를 서버 상태 머신으로 통일하여 기업 화면, 관리자 승인, 구직자 알림이 같은 이벤트를 따르도록 구현합니다
- 결제 요청과 웹훅 확정을 분리한 상태 모델로 결제 상태를 일관되게 반영하고 신규 결제 수단 추가에 대비한 어댑터 구조를 구현합니다