Lambda 전환이 일단락되고 나니 밀어뒀던 잡무가 남았다.
Google OAuth 앱 심사에는 이용약관과 개인정보 처리방침 링크가 필수다. YouTube API Limited Use 정책도 명시해야 한다. /terms, /privacy 정적 페이지를 만들고 로그인 화면의 <span>을 실제 링크로 바꿨다.
// 이전
<span className="underline underline-offset-4 cursor-pointer hover:text-white/60">
이용약관
</span>
// 이후
<a href="/terms" target="_blank" rel="noopener noreferrer" className="underline underline-offset-4 hover:text-white/60">
이용약관
</a>
리프레시 토큰 저장 방식도 문서에 명시했다.
<p className="text-sm leading-7">
OAuth 리프레시 토큰은 AES-256-GCM으로 암호화하여 데이터베이스에 저장합니다.
액세스 토큰은 서버 메모리에서만 사용하며 저장하지 않습니다.
</p>
로그인 화면 배경 비디오(bg.mp4)가 106MB라 git에 못 올렸다. 별도 공개 S3 버킷을 만들어서 거기서 서빙하도록 바꿨다.
// src="/bg.mp4"
src="https://shorts-static-682251233572.s3.ap-northeast-2.amazonaws.com/bg.mp4"
OG 이미지도 같은 버킷에 올려서 메타태그를 채웠다.
export const metadata: Metadata = {
openGraph: {
title: 'YouTube Shorts Automation',
description: '주제를 입력하면 AI가 스크립트, TTS, 영상 렌더링, YouTube 업로드를 자동으로 처리합니다.',
type: 'website',
images: [{ url: OG_IMAGE, width: 1280, height: 720, alt: 'YouTube Shorts Automation' }],
},
twitter: { card: 'summary_large_image', ... },
};
description을 처음엔 영어로 썼다가 몇 분 만에 한국어로 바꿨다. 어차피 한국어 서비스인데 영어로 쓸 이유가 없었다.
github-actions-deploy IAM 역할이 콘솔에서 수동으로 만들어진 상태였다. 이걸 Terraform state로 import해서 코드로 관리하기 시작했다.
# infra/terraform/envs/prod/github-actions-iam.tf
# 기존 역할을 Terraform state로 import — Lambda/CloudFormation/S3 권한 추가
Lambda 함수 배포, CloudFormation 스택 갱신, serverless 아티팩트용 S3 접근 권한을 여기에 몰아넣었다. 콘솔에서 손으로 고친 권한은 다음번엔 무조건 사라진다는 걸 몇 번 겪고 나서 내린 결정이다.