์ˆํผํ”Œ๋ ˆ์ด(์œ ํŠœ๋ธŒ์‡ผ์ธ , ๋ฌด๋ฃŒ ๋™์˜์ƒ)
Hello! I am a mobile app developer and leader with more than 10 years of experience. In particular, I havedeveloped video streaming Android apps and live related services, and I am working to grow video OTT service apps and player SDKs with development team members, value user feedback, value data, and promote organizational and corporate profits based on technology.

AWS๋กœ ์ด์ „ํ•œ YouTube Data API ์ž๋™ํ™” ์—…๋กœ๋“œ ์‹œ์Šคํ…œ ๊ตฌ์ถ•๊ธฐ (FastAPI + Firebase + Lambda)

YouTube Data API๋กœ ์•ฑ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋˜ ๋กœ์ปฌ ๋ฐฉ์‹์—์„œ FastAPI์™€ AWS Lambda, Firebase Storage ๊ธฐ๋ฐ˜์˜ ์ž๋™ํ™” ์‹œ์Šคํ…œ์œผ๋กœ ์ „ํ™˜ํ•œ ์‹ค์ œ ๊ตฌ์ถ• ์‚ฌ๋ก€๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ด ์ฒ˜์Œ์ธ 1์ธ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŒŒ์ด์ฌ๊ณผ AWS๋ฅผ ํ™œ์šฉํ•ด ํด๋ผ์šฐ๋“œ ๋ฐฑ

์•ฑ์—์„œ ์‹œ์ž‘ํ•ด ์„œ๋ฒ„๋ฆฌ์Šค๋กœ… ๋‚˜์˜ ์ฒซ ํด๋ผ์šฐ๋“œ ์ด์ „ ์ด์•ผ๊ธฐ


ํ‡ด์‚ฌ ํ›„ ์•ฝ ํ•œ ๋‹ฌ ๋ฐ˜ ์ •๋„ ๊ฐœ์ธ ์•ฑ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ–ˆ์—ˆ๋‹ค.

Android ๊ธฐ๋ฐ˜์˜ ์˜ค๋žœ ๊ฐœ๋ฐœ ๊ฒฝ๋ ฅ์„ ๋ฐ”ํƒ•์œผ๋กœ YouTube Data API๋ฅผ ํ™œ์šฉํ•ด, ๋‚ด๊ฐ€ ๋ณด๊ณ  ์‹ถ์€ ์˜์ƒ์„ ํ•„ํ„ฐ๋งํ•ด์ฃผ๋Š” ์•ฑ์„ ๋งŒ๋“ค์–ด๋ณธ ๊ฒƒ์ด์—ˆ๋‹ค.


์ดˆ๊ธฐ์—” Firebase Storage์— JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—…๋กœ๋“œํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, ์ฐฝ์—… ๊ด€๋ จ ๊ต์œก์„ ๋“ค์œผ๋ฉด์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐฑ์—”๋“œ๊นŒ์ง€ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์—ˆ๋‹ค.


๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๊ฐ€ FastAPI ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฅผ AWS์— ๋ฐฐํฌํ•˜๊ณ , ์ผ์ • ์ฃผ๊ธฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ด Firebase์— ์ž๋™ ์—…๋กœ๋“œํ•˜๋Š” ์ง€๊ธˆ์˜ ๊ตฌ์กฐ์ธ ๊ฒƒ์ด๋‹ค.


์™œ ์ฒ˜์Œ์—” ์•ฑ์—์„œ ์ง์ ‘ Firebase ์—…๋กœ๋“œ๋ฅผ ํ–ˆ์—ˆ๋‚˜


์ฒ˜์Œ์—๋Š” ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ๊ฑฐ์˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์•ฑ์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  JSON ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด Firebase Storage์— ์—…๋กœ๋“œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ–ˆ์—ˆ๋‹ค.


์ด ๋ฐฉ์‹์€ ๋‹จ์ˆœํ–ˆ๊ณ , ๋‹น์‹œ์˜ ๋ชฉํ‘œ์—๋„ ๋ถ€ํ•ฉํ–ˆ๋‹ค. ์•ฑ์„ ๋น ๋ฅด๊ฒŒ ๋Ÿฐ์นญํ•˜๊ณ  ์‹ถ์—ˆ๊ณ , ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•˜๋ฉด์„œ ๊ธฐ๋Šฅ์„ ๊ฒ€์ฆํ•ด๋ณด์ž๋Š” ์˜๋„๊ฐ€ ๊ฐ•ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • YouTube Data API๋กœ ์ธ๊ธฐ ์˜์ƒ, ์ถ”์ฒœ ์˜์ƒ ๋“ฑ์„ ์š”์ฒญํ•ด ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘

  • ์•ฑ ๋‚ด์—์„œ JSON ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ ํ›„ ๋กœ์ปฌ์— ์ €์žฅ

  • Firebase Storage์— ์ง์ ‘ ์—…๋กœ๋“œ

  • ์•ฑ์—์„œ๋Š” ํ•ด๋‹น JSON์„ ์ฝ์–ด ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ


์ด ๊ณผ์ •์„ ๋งค์ผ ์ˆ˜์ž‘์—…์œผ๋กœ ์‹คํ–‰ํ–ˆ์—ˆ๊ณ , ๋‚˜์ค‘์—๋Š” Android WorkManager๋กœ ์ž๋™ํ™”ํ• ๊นŒ ๊ณ ๋ฏผ๋„ ํ–ˆ์ง€๋งŒ, ๊ฒฐ๊ตญ์—๋Š” ์•ฑ์—์„œ ์„œ๋ฒ„ ์—ญํ• ๊นŒ์ง€ ํ•˜๋Š” ๋ฐฉ์‹์ด ์šฐ์Šต๊ฒŒ ๋А๊ปด์ ธ ๊ทธ๋งŒ๋‘๊ฒŒ ๋˜์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

๊ธฐ์กด ๊ตฌ์กฐ ๊ทธ๋ž˜ํ”„



ํŒŒ์ด์ฌ๊ณผ FastAPI๋กœ ๋ฐฑ์—”๋“œ ์ „ํ™˜์„ ๊ฒฐ์‹ฌํ•œ ๊ณ„๊ธฐ


์ฐฝ์—… ๊ต์œก์„ ๋“ค์œผ๋ฉด์„œ ChatGPT๋ฅผ ์ž์ฃผ ํ™œ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ์ƒ์„ฑํ˜• AI์˜ ํ๋ฆ„ ์†์—์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํŒŒ์ด์ฌ์— ๋Œ€ํ•œ ๊ด€์‹ฌ์ด ๋˜์‚ด์•„๋‚ฌ์—ˆ๋‹ค.


์˜ˆ์ „์— N์‚ฌ์—์„œ ์–ผ๊ตด ์ธ์‹ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ๋•Œ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒฝํ—˜์ด ์žˆ์—ˆ๊ธฐ์—, ์ต์ˆ™ํ•˜์ง„ ์•Š์•„๋„ ๋‚ฏ์„ค์ง€ ์•Š์•˜๊ณ , ์ด๋ฒˆ ๊ธฐํšŒ์— ๋‹ค์‹œ ํŒŒ์ด์ฌ์œผ๋กœ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•ด๋ณด๊ธฐ๋กœ ๋งˆ์Œ๋จน๊ฒŒ ๋˜์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.


AWS ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜๋œ ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค


์ง€๊ธˆ์˜ ๋ฐฑ์—”๋“œ ํ”„๋กœ์„ธ์Šค๋Š” FastAPI์™€ AWS ์„œ๋น„์Šค๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ตฌ์„ฑํ•œ ๊ตฌ์กฐ์ด๋‹ค. ์ „์ฒด์ ์ธ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋ฐ”๋€๊ตฌ์กฐ


1. FastAPI ์„œ๋ฒ„ ๊ตฌ์ถ•

  • YouTube Data API๋กœ๋ถ€ํ„ฐ ๋น„๋™๊ธฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘

  • ์ธ๊ธฐ ์˜์ƒ, ์—๋””ํ„ฐ ํ”ฝ, ๋žญํ‚น ์˜์ƒ ๋“ฑ์„ ๋‹จ๊ณ„๋ณ„ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌ

  • Pydantic์„ ํ™œ์šฉํ•ด JSON ๊ตฌ์กฐ๋ฅผ ์ •ํ˜•ํ™”ํ•จ


2. StreamingResponse๋กœ ์ง„ํ–‰ ์ƒํ™ฉ ํ™•์ธ


๊ฐ ๋‹จ๊ณ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ StreamingResponse๋กœ ํ™•์ธํ•˜๋ฉด์„œ ์ €์žฅํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜์˜€๋‹ค.

๋‹จ๊ณ„๋ณ„๋กœ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•œ ๊ฒƒ์ด๋‹ค.


3. AWS Lambda๋ฅผ ํ†ตํ•œ ์ž๋™ ์‹คํ–‰

  • FastAPI ์ฝ”๋“œ๋ฅผ ZIP์œผ๋กœ ํŒจํ‚ค์ง•ํ•˜์—ฌ AWS Lambda์— ์—…๋กœ๋“œ

  • Lambda ํƒ€์ž„์•„์›ƒ์„ ๊ธฐ๋ณธ 3์ดˆ์—์„œ ์ตœ๋Œ€์น˜์ธ 15๋ถ„์œผ๋กœ ๋Š˜๋ ค์•ผ ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์—ˆ๋‹ค

  • ์ผ์ • ์‹œ๊ฐ„๋งˆ๋‹ค Lambda๊ฐ€ ์‹คํ–‰๋˜๋„๋ก EventBridge๋กœ Cron ๋“ฑ๋ก์„ ํ•ด๋‘์—ˆ๋‹ค


4. ์—๋Ÿฌ ๋Œ€์‘: CloudWatch + SNS


Lambda ์‹คํ–‰ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด CloudWatch์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ ,

SNS๋ฅผ ํ†ตํ•ด ์ด๋ฉ”์ผ๋กœ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋„๋ก ๊ตฌ์„ฑํ–ˆ์—ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.


5. Firebase Storage์— ์ตœ์ข… ์—…๋กœ๋“œ

๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ๋Š” ๊ตญ๊ฐ€๋ณ„(locale, countryCode) ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ ์„œ JSON ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ , Firebase Storage์— ์—…๋กœ๋“œํ•˜๋„๋ก ๊ตฌ์„ฑํ•ด๋‘์—ˆ๋‹ค.


YouTube API ํ˜ธ์ถœ ์ œํ•œ ๋•Œ๋ฌธ์— ํ•˜๋ฃจ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰


YouTube Data API๋Š” ํ•˜๋ฃจ 10,000ํฌ์ธํŠธ๊นŒ์ง€๋งŒ ์ฟผ๋ฆฌ ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํŠนํžˆ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋Š” 1ํšŒ๋‹น 500ํฌ์ธํŠธ๋ฅผ ์†Œ๋ชจํ•˜๋ฏ€๋กœ ๋งค์šฐ ์ œํ•œ์ ์ผ ์ˆ˜๋ฐ–์— ์—†๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ์ค„์ด๊ณ , ๋งค์ผ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋„๋ก EventBridge์˜ Cron์„ ์„ค์ •ํ•ด๋‘” ๊ฒƒ์ด๋‹ค.

๋ฌผ๋ก  1๋…„ ๋ฌด๋ฃŒ๊ฐ€ ํ–ฅ ํ›„์—” ๋น„์šฉ์„ ์ง€๋ถˆ ํ•ด์•ผ๊ฒ ์ง€๋งŒ..


๋งˆ๋ฌด๋ฆฌ: ์ฒ˜์Œ ํ•ด๋ณด๋Š” ๋ฐฑ์—”๋“œ, ์˜์™ธ๋กœ ํ•  ๋งŒํ–ˆ๋‹ค

์ฒ˜์Œ์—๋Š” ๋ชจ๋“  ๊ฑธ ์•ฑ์—์„œ ์ฒ˜๋ฆฌํ•˜๋ ค ํ–ˆ๊ณ , ์„œ๋ฒ„ ๊ฐœ๋ฐœ์€ ๋‚˜์™€ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ FastAPI์™€ AWS, ๊ทธ๋ฆฌ๊ณ  ChatGPT์˜ ๋„์›€์„ ๋ฐ›์œผ๋ฉฐ ๊ตฌ์กฐ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฐ”๊พธ์–ด๋ณด๋‹ˆ ์˜์™ธ๋กœ ํ•  ๋งŒํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์—ˆ๋‹ค.


์ง€๊ธˆ ์ด ๊ตฌ์กฐ๋Š” ์–ด๋””๊นŒ์ง€๋‚˜ 1์ธ ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ ์ถฉ๋ถ„ํžˆ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์ด๊ณ ,

์•ž์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์ง„๋‹ค๋ฉด ๋‹ค๋ฅธ ๊ตฌ์กฐ๋กœ์˜ ํ™•์žฅ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•˜๊ฒ ์ง€๋งŒ, ์ง€๊ธˆ์€ ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•œ ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ์˜๋ฏธ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

๋Œ“๊ธ€ ์“ฐ๊ธฐ