본문 바로가기
실전 자동화 튜토리얼

Oracle A1 서버에 배포하기: 헤드리스 렌더링과 한글 폰트 이슈 (Shorts 자동화 6편)

by 정데비 2026. 7. 18.

도입

5편까지는 모든 것을 로컬 macOS에서 돌렸습니다.

 

AI 이미지까지 연결해서 첫 자동 영상 완성하기 (Shorts 자동화 5편)

도입4편에서는 음성과 자막을, 3편에서는 씬 구조를 만들었습니다. 한국어 AI 목소리 무료로 쓰기: edge-tts 연동하기 (Shorts 자동화 4편)도입3편까지는 captionWords(자막이 무슨 단어이고 몇 프레임에

blog.jdevy.com

 

하지만 자동화를 하려면 내 노트북을 켜놓지 않아도 돌아가는 서버가 필요합니다. 이번 편에서는 지금까지 만든 프로젝트를 Oracle A1 서버에 그대로 옮겨서, 로컬 개발 없이도 서버 혼자 전체 파이프라인을 돌릴 수 있는지 검증해봅니다.

Git 저장소 준비

먼저 생성물(이미지, 오디오, JSON 데이터)는 Git에 올리지 않도록 .gitignore를 정리합니다. 코드(스크립트)만 버전 관리하고, 생성물은 매번 스크립트로 다시 만들면 되기 때문입니다.

cat >> .gitignore << 'EOF'

# Generated assets (audio, images) - regenerate via scripts instead of tracking
public/*.png
public/*.mp3
public/*.wav
!public/.gitkeep

# Generated scene data
*-captions.json
scene-props.json
EOF

touch public/.gitkeep

그 다음 GitHub에 Private 저장소를 만들고 연결합니다.

git remote add origin <https://github.com/계정명/저장소명.git>
git add .
git status   # public/에 이미지 없이 .gitkeep만 잡히는지, node_modules 없는지 확인
git commit -m "Remotion 자동화 파이프라인 초기 구성"
git push -u origin main

저장소를 Private로 두는 이유는 자동화 스크립트와 프롬프트가 공개되지 않도록 하기 위함입니다.

GitHub 개인 액세스 토큰(PAT) 발급

서버에서 GitHub에 접속하려면 비밀번호 대신 토큰이 필요합니다.

  1. GitHub 설정 → Developer settings → Personal access tokens → Generate new token (classic)
  2. Scope: repo 체크
  3. 발급된 토큰(ghp_...로 시작)을 서버에서 복사해서 안전한 곳에 보관해둡니다. 토큰은 비밀번호처럼 다루세요.

Oracle A1 서버에서 클론 및 설치

git clone <https://github.com/계정명/저장소명.git>
# Username: GitHub 아이디
# Password: 위에서 발급받은 PAT 토큰 붙여넣기

git config --global credential.helper store   # 토큰 캐싱, 이후 재입력 불필요

cd 저장소명
npm install

이슈 — 서버에 pip 자체가 없음

pip3 install openai edge-tts
# → Command 'pip3' not found

Oracle A1 기본 이미지에는 pip가 아예 설치되어 있지 않았습니다.

sudo apt install -y python3-pip
pip3 install openai edge-tts

참고로 Oracle A1 서버의 pip는 구버전이라 --break-system-packages 옵션 자체가 없어서(PEP 668 제한이 없어서) 플래그 없이도 바로 설치됩니다. 버전에 따라 다를 수 있으니 에러가 나면 먼저 플래그 없이 시도해보세요.

API 키 관리 (.env)

generate_images.py는 순수 파이썬 스크립트라 .env 파일이 있어도 자동으로 읽지 않습니다. 명시적으로 불러와야 합니다.

# 서버에서 .env 생성 (실제 키 값은 절대 채팅/로그에 노출하지 말 것)
echo 'OPENAI_API_KEY=실제_키값' > .env

주의: API 키가 채팅창 등에 그대로 노출되면 즉시 폐기(Revoke) 후 재발급해야 합니다. generate_images.py에 아래 두 줄을 추가해서 .env를 읽어오게 합니다.

from dotenv import load_dotenv
load_dotenv()  # .env 파일을 읽어서 환경변수로 로드

의존성은 requirements.txt로 정리해서 서버에서 한 줄로 동기화합니다.

cat > requirements.txt << 'EOF'
openai
edge-tts
python-dotenv
EOF

pip3 install -r requirements.txt

서버 단독 전체 파이프라인 실행 검증

python3 generate_images.py prompts.json
python3 tts_captions.py "..." scene1
python3 tts_captions.py "..." scene2
python3 build_scene.py scene1 scene2
npx remotion render SceneVideo --props=scene-props.json out/server-render-test.mp4

실행 로그에서 Chrome Headless Shell을 linux-arm64용으로 자동 다운로드하고, 렌더링이 수 초 안에 끝나는 걸 확인했습니다. 동시 렌더링 개수(Concurrency)는 서버의 CPU 코어 수에 따라 자동으로 조정되어, 로컬(5x)보다 서버(2x)가 적게 잡히는 것도 정상입니다.

이슈 — 서버 렌더링 결과에서 한글 자막이 깨짐

음성은 정상적으로 나오는데 자막만 네모칸으로 깨져 나오는 증상이 있었습니다. 원인은 Oracle A1 서버(최소 구성 Ubuntu)에 한글 폰트가 아예 없어서, 헤드리스 Chromium이 한글 글자를 렌더링하지 못해서입니다. 블로그 표지 이미지를 만들 때도 같은 이유로 Noto Sans CJK KR 폰트를 지정해야 했던 것과 동일한 종류의 문제입니다.

sudo apt install -y fonts-noto-cjk
fc-cache -f -v

설치 후 재렌더링하면 한글 자막이 정상적으로 표시됩니다.

주의사항 / 흔한 실수

  • API 키는 절대 Git에 커밋하거나 대화창에 붙여넣지 마세요. .env는 .gitignore에 반드시 포함되어야 합니다.
  • 새 서버에서 매번 "한글 깨짐" 같은 폰트 문제가 생길 수 있으니, 배포 체크리스트에 fonts-noto-cjk 설치 확인을 넣어두면 좋습니다.
  • PAT 토큰은 만료일 설정과 권한(scope)을 꼼꼼히 지정하고, 노출 시 즉시 폐기하세요.

마무리

이번 편에서는 로컬에서 완성한 파이프라인을 Oracle A1 서버에 배포하고, 서버만으로 "대본 → 완성 mp4"를 끝까지 돌려보았습니다. pip 미설치, 한글 폰트 누락 같은 서버 특유 이슈도 해결했습니다. 다음 편에서는 이때까지 손으로 하나씩 실행했던 여러 스크립트를 명령어 하나로 통합해보겠습니다.

 

명령어 한 줄로 끝내기: 전체 파이프라인 자동화 스크립트 (Shorts 자동화 7편)

도입6편까지 4개의 스크립트(이미지 생성, TTS 생성 × 2, 씬 조립, Remotion 렌더링)을 사람이 순서대로 손으로 실행했습니다. Oracle A1 서버에 배포하기: 헤드리스 렌더링과 한글 폰트 이슈 (Shorts 자동

blog.jdevy.com

 


[핵심요약] Oracle A1 서버에 배포하고 한글 폰트 이슈 해결하기

반응형