
https://deji3nqzrstvf.cloudfront.net/
이 글은 SnowGlow(겨울 Snow Visualizer + YouTube MP3 변환)의 실제 구축/디버깅 과정을 기록한 개발 로그입니다.
목표는 “YouTube URL을 넣으면 변환 진행률이 보이고, 완료 후 CloudFront URL로 안정적으로 재생/시크(206 Range)되는” 구조를 만드는 것이었습니다.
/* → 프론트 S3/api/* → 백엔드(NLB)/jobs/*.mp3 → 오디오 S3YouTube를 변환하는 워커(yt-dlp + ffmpeg)는 CPU/네트워크를 크게 사용한다.
API 서버와 변환을 한 서버에서 같이 돌리면 다음 문제가 발생하기 쉽다.
POST /api/youtube/jobs (YouTube URL)jobs/<jobId>.mp3)audioUrl(CloudFront URL)을 저장GET /api/youtube/jobs/:jobId로 polling → done이면 audioUrl로 재생/* → Front S3/api/* → NLB(백엔드)/jobs/*.mp3 → Audio S3원인:
.env가 반영되지 않음해결:
원인:
<audio crossOrigin="anonymous">로 Web Audio 분석을 하려면해결:
Impersonate target "chrome:windows-10" is not available원인:
--impersonate chrome:windows-10이 요구하는 의존성이 없어 타겟이 비활성화됨해결:
impersonate 제거Could not load credentials from any providers원인:
해결(권장):
참고:
AmazonS3FullAccess는 빠른 원인 분리엔 도움이 되지만 운영에선 비추천(권한 과다)증상:
localhost:3000 호출은 성공하는데,/api/... 호출하면 504원인:
해결:
Sign in to confirm you’re not a bot원인:
현실적인 해결:
--cookies를 줄 수 있도록 cookies.txt 파일 경로를 env로 지원YTDLP_COOKIES_FILE=/run/secrets/youtube-cookies.txt운영 포인트:
cd client
npm run build
aws s3 sync dist s3://snowglow-front/ --delete
변경 반영이 느리면 invalidation:
aws cloudfront create-invalidation --distribution-id <DISTRIBUTION_ID> --paths "/*"
sudo docker pull rlarltn/snowglow-server:latest
sudo docker stop snowglow-server || true
sudo docker rm snowglow-server || true
sudo docker run -d --restart unless-stopped \
-p 3000:3000 \
--env-file .env \
--name snowglow-server \
rlarltn/snowglow-server:latest
쿠키 파일을 쓰는 경우:
chmod 600 /home/ubuntu/secrets/youtube-cookies.txt
sudo docker run -d --restart unless-stopped \
-p 3000:3000 \
--env-file .env \
-v /home/ubuntu/secrets/youtube-cookies.txt:/run/secrets/youtube-cookies.txt:ro \
--name snowglow-server \
rlarltn/snowglow-server:latest
/api/*는 CachingDisabled 권장/jobs/*.mp3는 필요에 따라 캐시 정책을 조절(대개 캐시가 이득)/index.html/index.html (200) 매핑