
Suno SDK 시리즈 01: Crazyrouter로 suno/generate를 최소 구성으로 구동하는 실측 튜토리얼
요약
Crazyrouter의 Suno SDK를 사용하여 suno/generate API를 호출하고 비동기 태스크를 처리하는 실측 튜토리얼입니다. 태스크 성공 여부와 실제 미디어 파일의 유효성을 검증하는 올바른 워크플로우를 제시합니다.
핵심 포인트
- suno/generate는 비동기 워크플로우로 구현해야 함
- 태스크 성공(succeeded)과 미디어 URL 유효성은 별개로 검증 필요
- 최종 음성 파일은 resultJson 내 audio_url 필드를 통해 획득 가능
- API 호출 시 최상위 레벨의 prompt와 metadata 병용 권장
이 기사는 Crazyrouter의 Suno SDK 문서를 바탕으로, suno/generate를 실제로 전송하고, 태스크 ID (task ID)를 획득하며, 완료될 때까지 폴링 (polling)하고, 최종 미디어 URL을 검증한 기록입니다.
결론부터 말하자면, suno/generate의 태스크 전송과 폴링은 작동했습니다. 다만, 생성 태스크가 succeeded가 되었다고 해서 그것만으로 "사용자에게 전달할 수 있는 음성 파일을 획득했다"라고 판단할 수는 없습니다. 최종적으로는 미디어 URL의 HTTP 상태 (HTTP status), Content-Type, 파일 크기까지 확인해야 합니다.
Test date: 2026-07-06 +08:00
Base URL: https://api.crazyrouter.com
Endpoint: POST /v1/video/generations
...
문서상의 input 중심의 작성 방식만으로 전송했을 때는, 운영 환경에서 다음과 같은 에러가 발생했습니다.
{"code":"invalid_request","message":"prompt is required","data":null}
즉, 적어도 이 실측 시점에서는 최상위 레벨의 prompt가 필요했습니다.
실제로 통과한 것은 최상위 레벨의 prompt와 metadata를 병용하는 형태입니다.
{
"model": "suno/generate",
"prompt": "[Verse]\n清晨的键盘亮起光\n请求穿过云端的墙\n[Chorus]\n用一次实测把链路唱响\n从任务到结果都清清爽爽",
...
반환값은 다음과 같은 비동기 태스크 (asynchronous task)였습니다.
{
"id": "task_ac90b23619334516",
"task_id": "task_ac90b23619334516",
...
여기서 중요한 점은, queued는 생성 완료가 아니라는 점입니다. Suno 계열의 음악 생성은 동기 API (synchronous API)가 아니라, 태스크를 생성한 후 폴링하는 비동기 워크플로우 (asynchronous workflow)로 취급해야 합니다.
GET /v1/video/generations/{task_id}를 폴링하면, 최종적으로 다음과 같은 결과가 나왔습니다.
{
"code": "success",
"data": {
...
여기까지가 "태스크로서는 성공"입니다. 하지만 이 url이 그대로 미디어로서 취득될 수 있다고는 단정할 수 없습니다.
이번에 공개된 /content URL은 404/502 에러가 발생했습니다. 반면, 태스크의 원시 결과에 포함된 다음 필드가 진짜 음성 파일이었습니다.
data.data.resultJson.data[0].audio_url
이 audio_url은 실측 결과 다음과 같이 성공했습니다.
HTTP 200
Content-Type: audio/mp3
Downloaded: 412326 bytes
따라서 클라이언트나 백엔드에서는 다음 순서로 판단하는 것이 안전합니다.
1. POST /v1/video/generations 가 성공한다
2. task_id 를 저장한다
3. 폴링하여 succeeded 까지 기다린다
...
suno/generate는 이용 가능합니다. 다만, 구현상으로는 succeeded와 "음성 파일 다운로드 가능 여부"를 나누어 처리해야 합니다.
최소 구현에서 가장 중요한 것은 태스크 성공 후 resultJson.data[0].audio_url을 검증하는 것입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기