Skip to content

오류 수정 배포#206

Merged
yyuneu merged 6 commits into
mainfrom
develop
Jun 10, 2026
Merged

오류 수정 배포#206
yyuneu merged 6 commits into
mainfrom
develop

Conversation

@yyuneu

@yyuneu yyuneu commented Jun 10, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • New Features
    • Clean-mesh 생성 기능 추가: 이미지를 업로드하여 3D 모델 생성 작업을 시작하고 상태를 확인할 수 있는 관리자 API 제공
    • 파일 서빙 성능 개선: 애플리케이션 서버를 거치지 않고 웹 서버에서 직접 업로드된 파일을 제공하도록 구성 변경

@coderabbitai

coderabbitai Bot commented Jun 10, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

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

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 32a331b2-daef-4e77-af08-b964a935ead7

📥 Commits

Reviewing files that changed from the base of the PR and between 8f7ba76 and ca45a17.

📒 Files selected for processing (1)
  • guideon-admin-bff/src/main/java/com/guideon/guideonbackend/domain/mascot/service/MascotGenerationService.java

Walkthrough

이 PR은 clean-mesh(리깅 제거 FBX) 생성을 위한 독립적인 파이프라인을 추가합니다. Nginx가 업로드된 정적 파일을 직접 서빙하도록 인프라를 변경하고, admin-bff를 통해 clean-mesh 생성 및 상태 폴링 API를 노출합니다.

Changes

Clean-mesh 생성 파이프라인

Layer / File(s) Summary
Nginx 정적 파일 직접 서빙 인프라
deploy/docker-compose.prod.yml, deploy/nginx.conf.template
Docker compose에서 uploads 볼륨을 nginx에 읽기전용 마운트하고, nginx가 /internal/files/ 요청을 /srv/files/로 별도(alias) 처리하도록 설정합니다. MIME 타입 매핑, sendfile, Range 지원, access log 비활성화를 포함합니다.
Clean-mesh 응답 DTO
guideon-admin-bff/src/main/java/.../dto/CleanMeshGenerateResponse.java, guideon-admin-bff/src/main/java/.../dto/CleanMeshJobStatusResponse.java
CleanMeshGenerateResponse는 Tripo 태스크 ID를 반환하고, CleanMeshJobStatusResponse는 taskId, status(processing/ready/failed), cleanMeshUrl 필드를 포함합니다.
MascotGenerationService clean-mesh 메서드
guideon-admin-bff/src/main/java/.../service/MascotGenerationService.java
startCleanMeshGeneration은 이미지를 Tripo에 업로드하여 image_to_model 태스크를 시작하고, pollCleanMeshStatus는 태스크 상태를 폴링하여 완료 시 모델을 다운로드·변환하여 clean-mesh URL을 저장합니다.
MascotController clean-mesh 엔드포인트
guideon-admin-bff/src/main/java/.../controller/MascotController.java
POST /clean-mesh/generate로 생성을 시작하고 GET /clean-mesh/generate/{taskId}/status로 상태를 폴링하는 관리자 전용 REST API를 추가합니다.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • Project-Guideon/guideon-backend#203: MascotGenerationPersistService.saveCleanMeshUrl 및 clean-mesh를 항상 FBX로 생성하는 mascot 후처리 로직을 구현하여 본 PR의 clean-mesh 저장 및 파이프라인과 직접 연계됩니다.
  • Project-Guideon/guideon-backend#200: /strip-rig 엔드포인트를 통한 리깅 제거 처리 및 clean-mesh 파이프라인을 구현하여 본 PR의 clean-mesh 변환 로직과 같은 기능 영역을 다룹니다.

Poem

🐰 uploads를 nginx로 옮기고
리깅 제거한 clean-mesh 생성해
Tripo와 춤을 추며
상태는 폴링으로 확인하고
정적 파일은 디스크에서 빠르게! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (2 warnings, 1 inconclusive)

Check name Status Explanation Resolution
Description check ⚠️ Warning 필수 템플릿 구조(Summary, Tasks, To Reviewer, Screenshot)가 완전히 빠져있으며 설명이 전혀 제공되지 않았습니다. PR 설명 템플릿을 따라 변경 사항 요약, 수행된 작업, 리뷰어를 위한 안내 등을 작성해주시기 바랍니다.
Docstring Coverage ⚠️ Warning Docstring coverage is 37.50% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive 제목이 너무 일반적이고 모호하여 실제 변경 사항의 핵심을 명확히 전달하지 못합니다. Clean-mesh 생성 파이프라인 추가 및 파일 서빙 구조 변경 등 구체적인 변경 내용을 반영한 더 명확한 제목으로 수정하시기 바랍니다.
✅ Passed checks (2 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch develop

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
guideon-admin-bff/src/main/java/com/guideon/guideonbackend/domain/mascot/dto/CleanMeshJobStatusResponse.java (1)

12-13: ⚡ Quick win

status 필드를 enum으로 변경하여 타입 안전성을 확보하는 것을 권장합니다.

현재 String 타입으로 선언된 status 필드는 "processing", "ready", "failed" 세 가지 값만 가질 수 있지만, 컴파일 타임에 잘못된 값이 할당되는 것을 방지할 수 없습니다. enum을 사용하면 타입 안전성이 향상되고 IDE 자동완성 지원도 개선됩니다.

♻️ 제안하는 리팩토링

별도 enum 클래스 추가:

public enum CleanMeshStatus {
    PROCESSING,
    READY,
    FAILED
}

DTO 필드 타입 변경:

-    /** "processing" | "ready" | "failed" */
-    private String status;
+    private CleanMeshStatus status;

서비스 레이어에서는 .name().toLowerCase() 또는 커스텀 직렬화를 통해 JSON에서 소문자 문자열로 변환 가능합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@guideon-admin-bff/src/main/java/com/guideon/guideonbackend/domain/mascot/dto/CleanMeshJobStatusResponse.java`
around lines 12 - 13, Change the String status field on
CleanMeshJobStatusResponse to a dedicated enum to enforce allowed values: create
an enum CleanMeshStatus { PROCESSING, READY, FAILED } and update the DTO's field
signature (status) to use CleanMeshStatus; update any code that reads/writes
JSON (e.g., service/serialization layers that construct or consume
CleanMeshJobStatusResponse) to convert between the enum and the lowercase string
representation (use CleanMeshStatus.name().toLowerCase() when producing JSON or
add a custom Jackson serializer/deserializer or `@JsonValue/`@JsonCreator on the
enum) and adjust any callers that set or compare the status to use
CleanMeshStatus instead of raw strings.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@guideon-admin-bff/src/main/java/com/guideon/guideonbackend/domain/mascot/service/MascotGenerationService.java`:
- Around line 246-253: The code currently stores the uploaded file via
fileStorageService.store(siteId, fileHash, file) and then immediately calls
fileStorageService.loadBytes(siteId, imageUrl) to read it back; remove this
redundant disk I/O by using the incoming MultipartFile directly (e.g.,
MultipartFile.getBytes() or getInputStream()) when calling
tripoApiService.uploadImage(filename) instead of loadBytes, and defer calling
fileStorageService.store(...) until after tripoApiService.uploadImage(...)
succeeds (so only persist the file on successful upload). Ensure updates around
FileValidator.validateImage, FileValidator.computeFileHash,
tripoApiService.uploadImage and fileStorageService.store reflect this flow.

---

Nitpick comments:
In
`@guideon-admin-bff/src/main/java/com/guideon/guideonbackend/domain/mascot/dto/CleanMeshJobStatusResponse.java`:
- Around line 12-13: Change the String status field on
CleanMeshJobStatusResponse to a dedicated enum to enforce allowed values: create
an enum CleanMeshStatus { PROCESSING, READY, FAILED } and update the DTO's field
signature (status) to use CleanMeshStatus; update any code that reads/writes
JSON (e.g., service/serialization layers that construct or consume
CleanMeshJobStatusResponse) to convert between the enum and the lowercase string
representation (use CleanMeshStatus.name().toLowerCase() when producing JSON or
add a custom Jackson serializer/deserializer or `@JsonValue/`@JsonCreator on the
enum) and adjust any callers that set or compare the status to use
CleanMeshStatus instead of raw strings.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b40f4ce6-6398-45bd-9175-37abab7d3ec5

📥 Commits

Reviewing files that changed from the base of the PR and between 74c1245 and 8f7ba76.

📒 Files selected for processing (6)
  • deploy/docker-compose.prod.yml
  • deploy/nginx.conf.template
  • guideon-admin-bff/src/main/java/com/guideon/guideonbackend/domain/mascot/controller/MascotController.java
  • guideon-admin-bff/src/main/java/com/guideon/guideonbackend/domain/mascot/dto/CleanMeshGenerateResponse.java
  • guideon-admin-bff/src/main/java/com/guideon/guideonbackend/domain/mascot/dto/CleanMeshJobStatusResponse.java
  • guideon-admin-bff/src/main/java/com/guideon/guideonbackend/domain/mascot/service/MascotGenerationService.java

@yyuneu yyuneu merged commit 2e4fdcd into main Jun 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant