배경
현재 AI 기능은 PDF 기반 분석 결과 생성 및 조회만 지원하고 있다.
새로운 Portfolio-RoadMap 서비스에서는 완료된 코드 분석 결과(JSON)를 기반으로 개발자 역량을 평가하고 학습 로드맵을 생성할 수 있으며, 이를 위해 BE ↔ AI(FastAPI) 연동이 필요하다.
로드맵 평가는 여러 개의 코드 분석 결과를 입력으로 받아 비동기 작업으로 수행되며, 평가 완료 시 Webhook과 SSE를 통해 사용자에게 실시간으로 결과를 전달해야 한다.
요구사항
1. 로드맵 평가 작업 생성 API 추가
2. 코드 분석 결과 URL 변환
3. IDOR 방어
- 분석 조회 시 사용자 조건을 포함한 벌크 조회 수행
예시:
findAllByIdInAndUser_Id(...)
4. AI Job 생성
AiJobType.ROADMAP_FROM_ANALYSES 추가
- 로드맵 평가 전용
AiJob 생성
fileId = null
5. AI 서버 연동
FastAPI Endpoint:
요청 예시:
{
"ai_job_id": "uuid",
"code_analysis_urls": [
"...",
"..."
],
"merge": true
}
- BE에서
ai_job_id(UUID) 생성
- FastAPI에 전달
- 완료 시 동일 ID를 반환받아 작업 매핑
6. 완료 Webhook 추가
POST /api/v1/ai/roadmap/complete
인증:
요청 예시:
{
"ai_job_id": "uuid",
"status": "DONE",
"result": [...],
"error_message": null
}
7. 결과 저장
- 로드맵 결과(JSON 배열)를 저장할 수 있도록
AiJob 확장
- 컬럼:
8. SSE 실시간 전달
기존 SSE 채널을 활용하여:
GET /api/v1/ai/jobs/subscribe
로드맵 완료 이벤트 전달
SSE Payload:
{
"jobId": "...",
"status": "DONE",
"resultJson": "[...]"
}
9. 상태 조회 응답 확장
JobStatusResponse
추가:
DB 변경사항
Flyway
V20260605__add_ai_jobs_result_json.sql
ALTER TABLE ai_jobs
ADD COLUMN result_json TEXT;
완료 조건
배경
현재 AI 기능은 PDF 기반 분석 결과 생성 및 조회만 지원하고 있다.
새로운 Portfolio-RoadMap 서비스에서는 완료된 코드 분석 결과(JSON)를 기반으로 개발자 역량을 평가하고 학습 로드맵을 생성할 수 있으며, 이를 위해 BE ↔ AI(FastAPI) 연동이 필요하다.
로드맵 평가는 여러 개의 코드 분석 결과를 입력으로 받아 비동기 작업으로 수행되며, 평가 완료 시 Webhook과 SSE를 통해 사용자에게 실시간으로 결과를 전달해야 한다.
요구사항
1. 로드맵 평가 작업 생성 API 추가
POST /api/v1/ai/jobs/roadmap/assess입력:
analysisIdsmerge인증 사용자 기준으로 요청 처리
2. 코드 분석 결과 URL 변환
전달받은
analysisIds중DONE인 분석만 조회
분석 결과의
resultCdnUrl목록을 생성하여 AI 서버에 전달3. IDOR 방어
예시:
findAllByIdInAndUser_Id(...)4. AI Job 생성
AiJobType.ROADMAP_FROM_ANALYSES추가AiJob생성fileId = null5. AI 서버 연동
FastAPI Endpoint:
요청 예시:
{ "ai_job_id": "uuid", "code_analysis_urls": [ "...", "..." ], "merge": true }ai_job_id(UUID)생성6. 완료 Webhook 추가
인증:
X-INTERNAL-API-KEY요청 예시:
{ "ai_job_id": "uuid", "status": "DONE", "result": [...], "error_message": null }7. 결과 저장
AiJob확장result_json TEXT완료 시:
8. SSE 실시간 전달
기존 SSE 채널을 활용하여:
로드맵 완료 이벤트 전달
SSE Payload:
{ "jobId": "...", "status": "DONE", "resultJson": "[...]" }9. 상태 조회 응답 확장
JobStatusResponse추가:
DB 변경사항
Flyway
완료 조건
/roadmap/assess연동ROADMAP_FROM_ANALYSESJob 타입 추가