Skip to content

[Feat] 로드맵 fast api 연동 #30

Description

@sungho1949

배경

현재 AI 기능은 PDF 기반 분석 결과 생성 및 조회만 지원하고 있다.

새로운 Portfolio-RoadMap 서비스에서는 완료된 코드 분석 결과(JSON)를 기반으로 개발자 역량을 평가하고 학습 로드맵을 생성할 수 있으며, 이를 위해 BE ↔ AI(FastAPI) 연동이 필요하다.

로드맵 평가는 여러 개의 코드 분석 결과를 입력으로 받아 비동기 작업으로 수행되며, 평가 완료 시 Webhook과 SSE를 통해 사용자에게 실시간으로 결과를 전달해야 한다.


요구사항

1. 로드맵 평가 작업 생성 API 추가

  • POST /api/v1/ai/jobs/roadmap/assess

  • 입력:

    • analysisIds
    • merge
  • 인증 사용자 기준으로 요청 처리

2. 코드 분석 결과 URL 변환

  • 전달받은 analysisIds

    • 요청 사용자 소유
    • 상태가 DONE
  • 인 분석만 조회

  • 분석 결과의 resultCdnUrl 목록을 생성하여 AI 서버에 전달

3. IDOR 방어

  • 분석 조회 시 사용자 조건을 포함한 벌크 조회 수행

예시:

findAllByIdInAndUser_Id(...)
  • 타 사용자 소유 분석 ID는 자동 제외

4. AI Job 생성

  • AiJobType.ROADMAP_FROM_ANALYSES 추가
  • 로드맵 평가 전용 AiJob 생성
  • fileId = null

5. AI 서버 연동

FastAPI Endpoint:

POST /roadmap/assess

요청 예시:

{
  "ai_job_id": "uuid",
  "code_analysis_urls": [
    "...",
    "..."
  ],
  "merge": true
}
  • BE에서 ai_job_id(UUID) 생성
  • FastAPI에 전달
  • 완료 시 동일 ID를 반환받아 작업 매핑

6. 완료 Webhook 추가

POST /api/v1/ai/roadmap/complete

인증:

X-INTERNAL-API-KEY

요청 예시:

{
  "ai_job_id": "uuid",
  "status": "DONE",
  "result": [...],
  "error_message": null
}

7. 결과 저장

  • 로드맵 결과(JSON 배열)를 저장할 수 있도록 AiJob 확장
  • 컬럼:
result_json TEXT
  • 완료 시:

    • 상태 변경
    • 결과 저장

8. SSE 실시간 전달

기존 SSE 채널을 활용하여:

GET /api/v1/ai/jobs/subscribe

로드맵 완료 이벤트 전달

SSE Payload:

{
  "jobId": "...",
  "status": "DONE",
  "resultJson": "[...]"
}

9. 상태 조회 응답 확장

JobStatusResponse

추가:

String resultJson
  • PDF 작업 응답에는 포함되지 않도록 처리

DB 변경사항

Flyway

V20260605__add_ai_jobs_result_json.sql
ALTER TABLE ai_jobs
ADD COLUMN result_json TEXT;

완료 조건

  • 로드맵 평가 요청 API 추가
  • AI 서버 /roadmap/assess 연동
  • ROADMAP_FROM_ANALYSES Job 타입 추가
  • 코드 분석 URL 변환 로직 구현
  • IDOR 방어 적용
  • 완료 Webhook 추가
  • 결과 JSON 저장 기능 구현
  • SSE 실시간 전송 구현
  • 상태 조회 응답 확장
  • Flyway 마이그레이션 추가
  • 단위 테스트 작성 및 통과
  • 기존 PDF 기반 AI 기능 회귀 없음

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions