어떤 기능인가요?
analysis 도메인의 내부 구조를 책임 단위로 분리해 AnalysisService와 AnalysisResultPersistenceService의 복잡도를 낮춥니다.
상세 내용
현재 [AnalysisService.java]에 아래 책임이 함께 섞여 있습니다.
- persistence
- sanitization
- response assembling
- validation / normalization
이번 이슈에서는 외부 API 동작은 유지하고, 내부 구조만 단계적으로 분리합니다.
[Refactor] AnalysisResponseAssembler 분리 (#이슈번호)
수정 범위:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisResultPersistenceService.java
신규 후보:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisResponseAssembler.java
작업 내용:
toResponse(...)
isValidQuestionAnalysisForResponse(...)
AnalysisQuestionResponse, QuestionAnalysisResponse 조립 로직을 별도 assembler로 이동합니다.
AnalysisResultPersistenceService는 응답 DTO를 직접 조립하지 않고 assembler를 호출만 하도록 변경합니다.
리뷰 포인트:
응답 스키마 변경 없이 내부 조립 책임만 이동되었는지 확인합니다.
[Refactor] Analysis payload sanitization 전용 서비스 분리 (#이슈번호)
수정 범위:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisResultPersistenceService.java
신규 후보:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/sanitization/AnalysisResultSanitizationService.java
작업 내용:
sanitizeAndPersistAnalysisPayload(...)
analysisResultPayload(...)
buildHighlights(...)
buildNonOverlappingHighlights(...)
buildMissingKeywords(...)
readHighlights(...)
readMissingKeywords(...)
serializeHighlights(...)
serializeMissingKeywords(...)
같은 sanitize / deserialize / serialize 로직을 전용 서비스로 이동합니다.
리뷰 포인트:
저장 결과와 조회 결과의 응답 값이 기존과 동일한지 확인합니다.
[Refactor] Analysis result validation/normalization 분리 (#이슈번호)
수정 범위:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisResultPersistenceService.java
신규 후보:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisResultValidationService.java
작업 내용:
verifyAnswerSnapshot(...)
validateRequiredScores(...)
validateScore(...)
normalizeFeedback(...)
normalizeImprovement(...)
등 저장 전 검증과 정규화 규칙을 전용 서비스로 이동합니다.
리뷰 포인트:
유효성 검증 실패 조건과 예외 메시지가 기존과 달라지지 않았는지 확인합니다.
[Refactor] AnalysisResultPersistenceService를 저장 전용으로 축소 (#이슈번호)
수정 범위:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisResultPersistenceService.java
작업 내용:
이 단계에서는 AnalysisResultPersistenceService가 아래 역할만 남도록 정리합니다.
Analysis 엔티티 생성
QuestionAnalysis 생성 및 저장
기존 분석 교체
MockApply 상태 변경
리뷰 포인트:
클래스 이름과 실제 책임이 일치하는지 확인합니다.
[Refactor] AnalysisService 공개 API 정리 (#이슈번호)
수정 범위:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisService.java
영향 가능 파일:
src/main/java/com/jobdri/jobdri_api/domain/analysis/infrastructure/async/AnalysisAsyncWorkerBridge.java
src/main/java/com/jobdri/jobdri_api/domain/analysis/controller/AnalysisController.java
src/main/java/com/jobdri/jobdri_api/domain/analysis/controller/JobPostingAnalysisController.java
작업 내용:
analyze(...)
prepareAnalysisExecution(...)
executeAnalysis(...)
finalizeAnalysis(...)
getAnalysis(...)
의 공개 범위와 역할을 다시 정리합니다.
AnalysisService는 facade / orchestration 성격만 남기고, 세부 구현은 하위 서비스에 위임하도록 맞춥니다.
리뷰 포인트:
외부 호출 지점의 동작 변화 없이 서비스 책임만 정리되었는지 확인합니다.
체크 리스트
로컬 테스트 완료
기타
이번 이슈는 외부 API path / response 변경 없이 내부 구조 개선에 집중합니다.
가능하면 각 단계는 신규 클래스 1개 추가 + 기존 클래스 1개 축소 수준으로 유지해 커밋 크기를 작게 가져갑니다.
어떤 기능인가요?
analysis 도메인의 내부 구조를 책임 단위로 분리해
AnalysisService와AnalysisResultPersistenceService의 복잡도를 낮춥니다.상세 내용
현재 [AnalysisService.java]에 아래 책임이 함께 섞여 있습니다.
이번 이슈에서는 외부 API 동작은 유지하고, 내부 구조만 단계적으로 분리합니다.
[Refactor] AnalysisResponseAssembler 분리 (#이슈번호)수정 범위:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisResultPersistenceService.java신규 후보:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisResponseAssembler.java작업 내용:
toResponse(...)isValidQuestionAnalysisForResponse(...)AnalysisQuestionResponse,QuestionAnalysisResponse조립 로직을 별도 assembler로 이동합니다.AnalysisResultPersistenceService는 응답 DTO를 직접 조립하지 않고 assembler를 호출만 하도록 변경합니다.리뷰 포인트:
응답 스키마 변경 없이 내부 조립 책임만 이동되었는지 확인합니다.
[Refactor] Analysis payload sanitization 전용 서비스 분리 (#이슈번호)수정 범위:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisResultPersistenceService.java신규 후보:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/sanitization/AnalysisResultSanitizationService.java작업 내용:
sanitizeAndPersistAnalysisPayload(...)analysisResultPayload(...)buildHighlights(...)buildNonOverlappingHighlights(...)buildMissingKeywords(...)readHighlights(...)readMissingKeywords(...)serializeHighlights(...)serializeMissingKeywords(...)같은 sanitize / deserialize / serialize 로직을 전용 서비스로 이동합니다.
리뷰 포인트:
저장 결과와 조회 결과의 응답 값이 기존과 동일한지 확인합니다.
[Refactor] Analysis result validation/normalization 분리 (#이슈번호)수정 범위:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisResultPersistenceService.java신규 후보:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisResultValidationService.java작업 내용:
verifyAnswerSnapshot(...)validateRequiredScores(...)validateScore(...)normalizeFeedback(...)normalizeImprovement(...)등 저장 전 검증과 정규화 규칙을 전용 서비스로 이동합니다.
리뷰 포인트:
유효성 검증 실패 조건과 예외 메시지가 기존과 달라지지 않았는지 확인합니다.
[Refactor] AnalysisResultPersistenceService를 저장 전용으로 축소 (#이슈번호)수정 범위:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisResultPersistenceService.java작업 내용:
이 단계에서는
AnalysisResultPersistenceService가 아래 역할만 남도록 정리합니다.Analysis엔티티 생성QuestionAnalysis생성 및 저장기존 분석 교체
MockApply상태 변경리뷰 포인트:
클래스 이름과 실제 책임이 일치하는지 확인합니다.
[Refactor] AnalysisService 공개 API 정리 (#이슈번호)수정 범위:
src/main/java/com/jobdri/jobdri_api/domain/analysis/service/core/AnalysisService.java영향 가능 파일:
src/main/java/com/jobdri/jobdri_api/domain/analysis/infrastructure/async/AnalysisAsyncWorkerBridge.javasrc/main/java/com/jobdri/jobdri_api/domain/analysis/controller/AnalysisController.javasrc/main/java/com/jobdri/jobdri_api/domain/analysis/controller/JobPostingAnalysisController.java작업 내용:
analyze(...)prepareAnalysisExecution(...)executeAnalysis(...)finalizeAnalysis(...)getAnalysis(...)의 공개 범위와 역할을 다시 정리합니다.
AnalysisService는 facade / orchestration 성격만 남기고, 세부 구현은 하위 서비스에 위임하도록 맞춥니다.리뷰 포인트:
외부 호출 지점의 동작 변화 없이 서비스 책임만 정리되었는지 확인합니다.
체크 리스트
로컬 테스트 완료
./gradlew test --tests com.jobdri.jobdri_api.domain.analysis.service.core.AnalysisServiceTest./gradlew test --tests com.jobdri.jobdri_api.domain.analysis.service.async.AnalysisAsyncTaskServiceTest./gradlew test --tests com.jobdri.jobdri_api.domain.analysis.service.question.QuestionServiceTest기타
이번 이슈는 외부 API path / response 변경 없이 내부 구조 개선에 집중합니다.
가능하면 각 단계는 신규 클래스 1개 추가 + 기존 클래스 1개 축소 수준으로 유지해 커밋 크기를 작게 가져갑니다.