Skip to content

Feat/#24 analysis with job#95

Merged
shinae1023 merged 5 commits into
mainfrom
feat/#24-analysis-with-job
Jun 15, 2026
Merged

Feat/#24 analysis with job#95
shinae1023 merged 5 commits into
mainfrom
feat/#24-analysis-with-job

Conversation

@shinae1023

@shinae1023 shinae1023 commented Jun 15, 2026

Copy link
Copy Markdown
Member

✨ 어떤 이유로 PR를 하셨나요?

  • feature 병합
  • 버그 수정(아래에 issue #를 남겨주세요)
  • 코드 개선
  • 코드 수정
  • 배포
  • 기타(아래에 자세한 내용 기입해주세요)

📋 세부 내용 - 왜 해당 PR이 필요한지 작업 내용을 자세하게 설명해주세요

아래 내용 그대로 PR 설명의 추가 기능 및 변경사항에 붙여 넣으면 됩니다.

  • 외부 JD/자소서 문항 데이터를 저장하기 위한 corpus 전용 엔티티(MockJobPostingCorpus, MockQuestionCorpus) 및 repository를 추가했습니다.
  • corpus 데이터가 기존 직무 분류 체계와 연결될 수 있도록 DetailClassification 연동 필드와 분류 매핑 로직을 추가했습니다.
  • 엑셀(xlsx) 데이터를 corpus 테이블로 적재하는 import 서비스와 admin 전용 import API를 추가했습니다.
  • corpus import 시 회사명 기준 Company 매핑/생성, 필수 헤더 검증, 숫자 포맷 정규화, 회사 조회 캐싱을 적용했습니다.
  • corpus classification 매핑 등록 시 입력값 검증을 추가하고, detail name 조회를 대소문자 구분 없이 처리하도록 보완했습니다.
  • 관리자용 bootstrap 로직을 추가해 지정된 이메일 사용자를 ADMIN으로 승격할 수 있도록 했습니다.
  • /api/admin/** 경로를 관리자 권한 전용으로 제한하도록 security 설정을 보완했습니다.
  • pgvector 기반 임베딩 저장 테이블을 추가하고, vector(1024) 및 HNSW 코사인 인덱스를 적용하도록 스키마를 확장했습니다.
  • 임베딩 생성 프로바이더를 OpenAI에서 Cohere Embed API 기반 구현으로 교체했습니다.
  • Cohere 임베딩 호출에 connect/read timeout을 추가해 외부 API 지연 시 무한 대기를 방지했습니다.
  • corpus 데이터를 읽어 pgvector 테이블로 upsert하는 embedding sync 배치와 admin 전용 sync API를 추가했습니다.
  • embedding sync가 Spring 트랜잭션에 참여하도록 JDBC connection 처리 및 readOnly 트랜잭션 설정을 정리했습니다.
  • embedding sync 조회 시 limit를 메모리에서 자르지 않고 DB 레벨 pagination으로 처리하도록 개선했습니다.
  • 애플리케이션 시작 시 optional corpus import / embedding sync 작업이 실패해도 서비스 부팅이 중단되지 않도록 예외 처리를 추가했습니다.
  • 자소서 분석 전에 현재 jobPosting과 선택 문항을 기준으로 유사 JD/유사 문항을 검색하는 retrieval 서비스를 추가했습니다.
  • 유사도 검색은 항상 pgvector에 적재된 corpus 데이터를 대상으로 수행하고, 사용자의 jobPosting은 검색 기준(query source)으로만 사용하도록 구성했습니다.
  • retrieval query가 회사명보다 직무, 자격 요건, 우대 사항에 더 초점을 맞추도록 query 구성을 조정했습니다.
  • 유사 JD/문항 검색 시 fallback 전략을 추가했습니다.
    • 1순위 회사명 + 직무(detailClassification) 검색
    • 2순위 직무(detailClassification) 검색
    • 3순위 대분류 + 중분류(job_group_l1 + job_family_l2) 검색
  • 기존 자소서 분석 API 흐름은 유지하면서, retrieval 결과를 OpenAI 분석 프롬프트에 함께 주입하도록 연결했습니다.
  • 실제 분석 전에 어떤 유사 JD/문항이 검색되는지 확인할 수 있는 admin/debug preview API를 추가했습니다.
  • corpus import 허용 경로를 설정값 기반 whitelist로 검증하도록 해 관리자 API의 임의 파일 접근 위험을 줄였습니다.
  • JPA 테이블 생성 이후 schema.sql이 실행되도록 datasource initialization 순서를 보완했습니다.

📸 작업 화면 스크린샷

⚠️ PR하기 전에 확인해주세요

  • 로컬테스트를 진행하셨나요?
  • 머지할 브랜치를 확인하셨나요?
  • 관련 label을 선택하셨나요?

🚨 관련 이슈 번호 [#24 ]

@shinae1023 shinae1023 self-assigned this Jun 15, 2026
@shinae1023 shinae1023 added the ✨ feat New feature or request label Jun 15, 2026
@coderabbitai

coderabbitai Bot commented Jun 15, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@shinae1023, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 33 minutes and 10 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: b487d289-a5ea-4633-bfb1-d5cb4883f059

📥 Commits

Reviewing files that changed from the base of the PR and between fe5cd60 and ab389af.

📒 Files selected for processing (21)
  • src/main/java/com/jobdri/jobdri_api/domain/analysis/controller/AnalysisAdminController.java
  • src/main/java/com/jobdri/jobdri_api/domain/analysis/dto/request/AnalysisRetrievalPreviewRequest.java
  • src/main/java/com/jobdri/jobdri_api/domain/analysis/dto/response/AnalysisRetrievalPreviewResponse.java
  • src/main/java/com/jobdri/jobdri_api/domain/analysis/service/AnalysisAdminDebugService.java
  • src/main/java/com/jobdri/jobdri_api/domain/analysis/service/AnalysisAiClient.java
  • src/main/java/com/jobdri/jobdri_api/domain/analysis/service/AnalysisReferenceRetrievalService.java
  • src/main/java/com/jobdri/jobdri_api/domain/classification/repository/DetailClassificationRepository.java
  • src/main/java/com/jobdri/jobdri_api/domain/corpus/controller/CorpusAdminController.java
  • src/main/java/com/jobdri/jobdri_api/domain/corpus/repository/MockJobPostingCorpusRepository.java
  • src/main/java/com/jobdri/jobdri_api/domain/corpus/repository/MockQuestionCorpusRepository.java
  • src/main/java/com/jobdri/jobdri_api/domain/corpus/service/BootstrapAdminService.java
  • src/main/java/com/jobdri/jobdri_api/domain/corpus/service/CohereCorpusEmbeddingClient.java
  • src/main/java/com/jobdri/jobdri_api/domain/corpus/service/CorpusAdminRunner.java
  • src/main/java/com/jobdri/jobdri_api/domain/corpus/service/CorpusClassificationResolver.java
  • src/main/java/com/jobdri/jobdri_api/domain/corpus/service/CorpusEmbeddingClient.java
  • src/main/java/com/jobdri/jobdri_api/domain/corpus/service/CorpusEmbeddingSyncService.java
  • src/main/java/com/jobdri/jobdri_api/domain/corpus/service/CorpusImportService.java
  • src/main/resources/application-dev.yaml
  • src/main/resources/application-prod.yaml
  • src/main/resources/application.yaml
  • src/main/resources/schema.sql
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#24-analysis-with-job

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@shinae1023 shinae1023 merged commit 1473ebd into main Jun 15, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feat New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant