Remotion ๊ฐ€์ด๋“œ

React๋กœ ๋น„๋””์˜ค๋ฅผ ๋งŒ๋“œ๋Š” Remotion ํ”„๋ ˆ์ž„์›Œํฌ ์™„์ „ ๊ฐ€์ด๋“œ

๐ŸŽฌ ๊ธฐ์ดˆ

๐ŸŽฌ

Remotion โ€” React๋กœ ๋น„๋””์˜ค๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ

JSX ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ณง ๋น„๋””์˜ค ํ”„๋ ˆ์ž„์ด ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋งคํ‹ฑ ๋น„๋””์˜ค ์ƒ์„ฑ

Remotion์€ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ”„๋ ˆ์ž„ ๋‹จ์œ„๋กœ ๋ Œ๋”๋งํ•˜์—ฌ MP4/WebM ๋น„๋””์˜ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ. After Effects๋‚˜ Premiere ๋Œ€์‹  ์ฝ”๋“œ๋กœ ๋น„๋””์˜ค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด, ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ๋Œ€๋Ÿ‰ ๋น„๋””์˜ค ์ƒ์„ฑ, ์ž๋™ํ™”๋œ ์†Œ์…œ๋ฏธ๋””์–ด ์ฝ˜ํ…์ธ , SaaS ๋น„๋””์˜ค ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์ ํ•ฉ

๐Ÿ”ง

Remotion ๋‚ด๋ถ€ ์•„ํ‚คํ…์ฒ˜ โ€” ํ”„๋ ˆ์ž„์„ ๋น„๋””์˜ค๋กœ ๋ฐ”๊พธ๋Š” ํŒŒ์ดํ”„๋ผ์ธ

Headless Chrome โ†’ ์Šคํฌ๋ฆฐ์ƒท โ†’ FFmpeg ์ธ์ฝ”๋”ฉ๊นŒ์ง€์˜ ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ ํ•ด๋ถ€

Remotion์˜ ๋ Œ๋”๋ง์€ 3๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง: (1) Webpack/esbuild๋กœ React ๋ฒˆ๋“ค ์ƒ์„ฑ (2) Puppeteer๋กœ Headless Chrome์—์„œ ๊ฐ ํ”„๋ ˆ์ž„ ์Šคํฌ๋ฆฐ์ƒท (3) FFmpeg๋กœ ์ด๋ฏธ์ง€ ์‹œํ€€์Šค๋ฅผ MP4/WebM์œผ๋กœ ์ธ์ฝ”๋”ฉ. ์ด ํŒŒ์ดํ”„๋ผ์ธ์ด ์ฝ”๋“œ๋ฅผ ๋น„๋””์˜ค๋กœ ๋ฐ”๊พธ๋Š” ํ•ต์‹ฌ

๐Ÿงฑ

Remotion Composition โ€” ๋น„๋””์˜ค์˜ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•

Composition, Sequence, Series๋กœ ์žฅ๋ฉด์„ ์กฐํ•ฉํ•˜๋Š” ์„ ์–ธ์  ๋น„๋””์˜ค ๊ตฌ์กฐํ™”

Remotion์—์„œ ๋น„๋””์˜ค๋Š” Composition(์ตœ์ƒ์œ„ ์ปจํ…Œ์ด๋„ˆ) โ†’ Sequence(์‹œ๊ฐ„ ๊ตฌ๊ฐ„ ๋ถ„ํ• ) โ†’ ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋จ. ๋งˆ์น˜ React์—์„œ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ์„ค๊ณ„ํ•˜๋“ฏ, ๋น„๋””์˜ค์˜ ์‹œ๊ฐ„์ถ•์„ ์„ ์–ธ์ ์œผ๋กœ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ์Œ

๐ŸŽฏ ์• ๋‹ˆ๋ฉ”์ด์…˜ & ๋ฏธ๋””์–ด

๐ŸŽฏ

Remotion ์• ๋‹ˆ๋ฉ”์ด์…˜ โ€” spring()๊ณผ interpolate()๋กœ ๋ชจ์…˜ ๋งŒ๋“ค๊ธฐ

๋ฌผ๋ฆฌ ๊ธฐ๋ฐ˜ ์Šคํ”„๋ง๊ณผ ๋ณด๊ฐ„ ํ•จ์ˆ˜๋กœ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋น„๋””์˜ค ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„

Remotion์€ CSS transition ๋Œ€์‹  ํ”„๋ ˆ์ž„ ๊ธฐ๋ฐ˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‚ฌ์šฉ. spring()์€ ๋ฌผ๋ฆฌ ์—”์ง„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฐ”์šด์Šค/๊ฐ์†์„, interpolate()๋Š” ํ”„๋ ˆ์ž„ ๋ฒ”์œ„๋ฅผ ์ž„์˜์˜ ๊ฐ’ ๋ฒ”์œ„๋กœ ๋งคํ•‘. ๋‘ ํ•จ์ˆ˜ ์กฐํ•ฉ์œผ๋กœ ์ „๋ฌธ์ ์ธ ๋ชจ์…˜ ๊ทธ๋ž˜ํ”ฝ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

๐Ÿ”Š

Remotion ์˜ค๋””์˜ค & ์ž๋ง‰ โ€” ์‚ฌ์šด๋“œ์™€ ๋น„์ฃผ์–ผ์˜ ๋™๊ธฐํ™”

<Audio>, <OffthreadVideo>, useAudioData()๋กœ ์˜ค๋””์˜ค/๋น„๋””์˜ค ์†Œ์Šค๋ฅผ ํ”„๋ ˆ์ž„์— ๋™๊ธฐํ™”

Remotion์€ ์˜ค๋””์˜ค๋ฅผ ํ”„๋ ˆ์ž„ ๋‹จ์œ„๋กœ ์ œ์–ด ๊ฐ€๋Šฅ. <Audio>๋กœ BGM/ํšจ๊ณผ์Œ์„ ์‚ฝ์ž…ํ•˜๊ณ , useAudioData()๋กœ ํŒŒํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ๋น„์ฃผ์–ผ๋ผ์ด์ € ๊ตฌํ˜„. <OffthreadVideo>๋กœ ๊ธฐ์กด ๋น„๋””์˜ค๋ฅผ ํ•ฉ์„ฑํ•˜๊ณ , @remotion/captions๋กœ ์ž๋ง‰์„ ํ”„๋ ˆ์ž„ ์ •๋ฐ€๋„๋กœ ๋™๊ธฐํ™”

๐Ÿš€ ํ”„๋กœ๋•์…˜

๐Ÿ“Š

Remotion ๋ฐ์ดํ„ฐ ๋“œ๋ฆฌ๋ธ ๋น„๋””์˜ค โ€” API/DB ๋ฐ์ดํ„ฐ๋กœ ๋น„๋””์˜ค ์ž๋™ ์ƒ์„ฑ

calculateMetadata + delayRender๋กœ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋น„๋””์˜ค์— ์ฃผ์ž…ํ•˜๋Š” ํŒจํ„ด

์ •์  ๋น„๋””์˜ค๋ฅผ ๋„˜์–ด, API ์‘๋‹ต์ด๋‚˜ DB ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„๋””์˜ค๋ฅผ ๋™์  ์ƒ์„ฑํ•˜๋Š” ํŒจํ„ด. calculateMetadata๋กœ ๋ Œ๋”๋ง ์ „ ๋ฐ์ดํ„ฐ๋ฅผ fetchํ•˜๊ณ , getInputProps()๋กœ ์ปดํฌ๋„ŒํŠธ์— ์ฃผ์ž…. delayRender()๋กœ ๋น„๋™๊ธฐ ๋กœ๋”ฉ ์™„๋ฃŒ๋ฅผ ๋ณด์žฅํ•˜์—ฌ ๋นˆ ํ”„๋ ˆ์ž„ ์—†์ด ์•ˆ์ „ํ•œ ๋ Œ๋”๋ง ๊ฐ€๋Šฅ

โ˜๏ธ

Remotion Lambda โ€” AWS์—์„œ ์ˆ˜์ฒœ ๊ฐœ ๋น„๋””์˜ค๋ฅผ ๋ณ‘๋ ฌ ๋ Œ๋”๋ง

Lambda ํ•จ์ˆ˜๊ฐ€ ํ”„๋ ˆ์ž„์„ ๋ถ„์‚ฐ ๋ Œ๋”๋งํ•˜๊ณ  S3์—์„œ ๊ฒฐํ•ฉํ•˜๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ๋น„๋””์˜ค ํŒŒ์ดํ”„๋ผ์ธ

Remotion Lambda๋Š” ๋น„๋””์˜ค ๋ Œ๋”๋ง์„ AWS Lambda๋กœ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ. ํ•˜๋‚˜์˜ ๋น„๋””์˜ค๋ฅผ N๊ฐœ ์ฒญํฌ๋กœ ๋ถ„ํ• ํ•˜์—ฌ N๊ฐœ Lambda๊ฐ€ ๋™์‹œ ๋ Œ๋”๋ง โ†’ S3์—์„œ ์ฒญํฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ตœ์ข… ๋น„๋””์˜ค ์ƒ์„ฑ. ๋กœ์ปฌ์—์„œ 10๋ถ„ ๊ฑธ๋ฆฌ๋Š” ๋ Œ๋”๋ง์„ 1๋ถ„ ์ด๋‚ด๋กœ ๋‹จ์ถ• ๊ฐ€๋Šฅ

โ–ถ๏ธ

Remotion Player โ€” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋น„๋””์˜ค๋ฅผ ์‹ค์‹œ๊ฐ„ ์žฌ์ƒ

@remotion/player๋กœ React ์•ฑ์— ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋น„๋””์˜ค ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ž„๋ฒ ๋“œ

Remotion Player๋Š” ๋ Œ๋”๋ง ์—†์ด React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹ค์‹œ๊ฐ„ ๋น„๋””์˜ค์ฒ˜๋Ÿผ ์žฌ์ƒํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ. ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์กฐ์ ˆํ•˜๋ฉด ์ฆ‰์‹œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด, SaaS ๋น„๋””์˜ค ์—๋””ํ„ฐ๋‚˜ ๋น„๋””์˜ค ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋Šฅ์— ํ™œ์šฉ

๐Ÿ’ก

Remotion ์‹ค์ „ ํŒ โ€” ํ”„๋กœ๋•์…˜ ๋น„๋””์˜ค ํ”„๋กœ์ ํŠธ์˜ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ, ์„ฑ๋Šฅ ์ตœ์ ํ™”, ๋””๋ฒ„๊น…, ๋ฐฐํฌ๊นŒ์ง€ ์‹ค์ „ ๋…ธํ•˜์šฐ ๋ชจ์Œ

Remotion ํ”„๋กœ์ ํŠธ๋ฅผ ํ”„๋กœ๋•์…˜์—์„œ ์šด์˜ํ•˜๋ฉด์„œ ์–ป์€ ์‹ค์ „ ํŒ: ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ, ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ตœ์ ํ™”(prefetch, ์ด๋ฏธ์ง€ ์ตœ์ ํ™”, ๋ฉ”๋ชจ์ด์ œ์ด์…˜), ๋””๋ฒ„๊น… ๊ธฐ๋ฒ•, CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„, ์ผ๋ฐ˜์ ์ธ ์‹ค์ˆ˜์™€ ํ•ด๊ฒฐ๋ฒ•

๐Ÿ“– Remotion ์ฝ”๋“œ ์ฝ๊ธฐ

๐Ÿ“ฆ

Remotion ์ฝ”๋“œ ๋ถ„์„ โ€” Bundle ์‹œ์Šคํ…œ๊ณผ Webpack/esbuild ํ†ตํ•ฉ

bundle()์ด React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋ง ๊ฐ€๋Šฅํ•œ HTML๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ์†Œ์Šค ์ฝ”๋“œ๋กœ ์ถ”์ 

Remotion ๋ Œ๋”๋ง์˜ ์ฒซ ๋‹จ๊ณ„์ธ ๋ฒˆ๋“ค๋ง์„ ์†Œ์Šค ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ๋ถ„์„. packages/bundler/์˜ Webpack ์„ค์ •, packages/studio/์˜ esbuild ์„ค์ •, ๊ทธ๋ฆฌ๊ณ  CompositionManager๊ฐ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๊ณผ์ •๊นŒ์ง€. ์ฝ”๋“œ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ React ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ Headless Chrome์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ HTML๋กœ ๋ณ€ํ™˜๋˜๋Š”์ง€ ์ดํ•ด

๐Ÿ”„

Remotion ์ฝ”๋“œ ๋ถ„์„ โ€” renderMedia()์™€ ํ”„๋ ˆ์ž„ ๋ Œ๋”๋ง ๋ฃจํ”„

Puppeteer๋กœ ๊ฐ ํ”„๋ ˆ์ž„์„ ์Šคํฌ๋ฆฐ์ƒทํ•˜๊ณ  FFmpeg๋กœ ํ•ฉ์น˜๋Š” ๋ Œ๋”๋ง ํ•ต์‹ฌ ๋ฃจํ”„๋ฅผ ์†Œ์Šค ์ฝ”๋“œ๋กœ ๋ถ„์„

packages/renderer/์˜ renderMedia() โ†’ renderFrames() โ†’ stitchFramesToVideo() ์ฒด์ธ์„ ์ถ”์ . Puppeteer๊ฐ€ Chrome ํŽ˜์ด์ง€์— currentFrame์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•, delayRender/continueRender์˜ ๊ตฌํ˜„, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋ ˆ์ž„ ๋ถ„๋ฐฐ, FFmpeg ์Šคํ‹ฐ์นญ๊นŒ์ง€์˜ ์ „์ฒด ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ

โฑ๏ธ

Remotion ์ฝ”๋“œ ๋ถ„์„ โ€” Sequence์™€ ํƒ€์ž„๋ผ์ธ ์‹œ๊ฐ„ ๊ด€๋ฆฌ์˜ ๊ตฌํ˜„

SequenceContext๋กœ ๋กœ์ปฌ ํƒ€์ž„์„ ๊ตฌํ˜„ํ•˜๋Š” ๋‚ด๋ถ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ useCurrentFrame()์˜ ๋™์ž‘ ์›๋ฆฌ

Remotion์˜ ์‹œ๊ฐ„ ๊ด€๋ฆฌ ํ•ต์‹ฌ์€ SequenceContext. <Sequence from={60}>์ด ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ frame์„ 0์œผ๋กœ ๋ฆฌ์…‹ํ•˜๋Š” ๋กœ์ปฌ ํƒ€์ž„์„ React Context๋กœ ๊ตฌํ˜„. useCurrentFrame()์€ SequenceContext์˜ ์ค‘์ฒฉ์„ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์ข… ํ”„๋ ˆ์ž„์„ ๊ณ„์‚ฐ. ์ด ํŒจํ„ด์ด ์žฅ๋ฉด์˜ ๋…๋ฆฝ์  ๊ฐœ๋ฐœ๊ณผ ์ž์œ ๋กœ์šด ๋ฐฐ์น˜๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ

๐Ÿงฎ

Remotion ์ฝ”๋“œ ๋ถ„์„ โ€” spring() ๋ฌผ๋ฆฌ ์—”์ง„์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„

๊ฐ์‡  ์Šคํ”„๋ง ๋ฏธ๋ถ„๋ฐฉ์ •์‹์„ JavaScript๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” spring()์˜ ์ˆ˜ํ•™๊ณผ ์ฝ”๋“œ

spring()์€ ๋‹จ์ˆœํ•œ ์ด์ง• ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ค์ œ ๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜. ๊ฐ์‡  ์Šคํ”„๋ง(damped harmonic oscillator)์˜ ๋ฏธ๋ถ„๋ฐฉ์ •์‹์„ ๋งค ํ”„๋ ˆ์ž„ ์ˆ˜์น˜์ ์œผ๋กœ ํ’€์–ด 0โ†’1 ๊ฐ’์„ ์ƒ์„ฑ. mass, damping, stiffness ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ overdamped/underdamped/critically damped ์ค‘ ์–ด๋–ค ํ•ด๋ฅผ ์„ ํƒํ•˜๋Š”์ง€ ๊ฒฐ์ •

๐Ÿ’ก ์‹ค์ „ ํ™œ์šฉ

โš–๏ธ

Remotion vs Sora vs Runway โ€” ๋น„๋””์˜ค ์ƒ์„ฑ ํˆด ๋น„๊ต์™€ ์„ ํƒ ๊ธฐ์ค€

์ฝ”๋“œ ๊ธฐ๋ฐ˜ vs AI ์ƒ์„ฑ vs ์ „ํ†ต ํŽธ์ง‘ โ€” ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ฐ•์ ๊ณผ ์ ํ•ฉํ•œ ์šฉ๋„ ์ •๋ฆฌ

๋น„๋””์˜ค ์ƒ์„ฑ ํˆด์€ 3๊ฐ€์ง€ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๋‚˜๋‰จ: (1) ์ฝ”๋“œ ๊ธฐ๋ฐ˜(Remotion, Motion Canvas) โ€” ๋ชจ์…˜ ๊ทธ๋ž˜ํ”ฝ/๋ฐ์ดํ„ฐ ๋น„์ฆˆ์— ์ตœ์  (2) AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ(Sora, Runway, Kling) โ€” ์‹ค์‚ฌํ’/์‹œ๋„ค๋งˆํ‹ฑ์— ์ตœ์  (3) ์ „ํ†ต ํŽธ์ง‘(Premiere, DaVinci) โ€” ๋ชจ๋“  ์˜์ƒ์— ๋Œ€์‘. Remotion์€ ์žฌํ˜„์„ฑ 100%, ์™„์ „ํ•œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•, ๋Œ€๋Ÿ‰ ์ž๋™ ์ƒ์„ฑ์— ๊ฐ•์ 

๐Ÿ”ง

Remotion ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… โ€” ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์™€ ํ•ด๊ฒฐ๋ฒ•

๋ Œ๋”๋ง ์†๋„ ์ €ํ•˜, delayRender ํƒ€์ž„์•„์›ƒ, useState ๋ฌดํ•œ ๋ฃจํ”„ ๋“ฑ ์‹ค์ „ ์—๋Ÿฌ ๋ชจ์Œ

Remotion ๊ฐœ๋ฐœ ์ค‘ ์ž์ฃผ ๋งŒ๋‚˜๋Š” 5๊ฐ€์ง€ ์—๋Ÿฌ์™€ ํ•ด๊ฒฐ๋ฒ• ์ •๋ฆฌ: (1) ๋ Œ๋”๋ง์ด ๋А๋ฆผ โ†’ concurrency ์ฆ๊ฐ€/Lambda ์‚ฌ์šฉ (2) delayRender ํƒ€์ž„์•„์›ƒ โ†’ continueRender ํ˜ธ์ถœ ๋ˆ„๋ฝ (3) useState ๋ฌดํ•œ ๋ฃจํ”„ โ†’ useCurrentFrame + interpolate ์‚ฌ์šฉ (4) CSS ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฏธ์ž‘๋™ โ†’ Remotion API ์‚ฌ์šฉ (5) Lambda ์น˜๋ผ์ธ ํ‚ค โ†’ concurrency ์กฐ์ •

๐Ÿค–

Claude Code ร— Remotion โ€” AI๋กœ ๋น„๋””์˜ค ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กฌํ”„ํŠธ ํ…Œํฌ๋‹‰

ํšจ๊ณผ์ ์ธ ํ”„๋กฌํ”„ํŠธ ๊ตฌ์กฐ์™€ 5๊ฐ€์ง€ ์‹ค์ „ ํ”„๋กฌํ”„ํŠธ ์˜ˆ์‹œ๋กœ ๋น„๋””์˜ค ๊ฐœ๋ฐœ ๊ฐ€์†

Claude Code๋กœ Remotion ๋น„๋””์˜ค ์ฝ”๋“œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กฌํ”„ํŠธ ํ…Œํฌ๋‹‰. ํ”„๋กฌํ”„ํŠธ์— ํฌํ•จํ•  4๊ฐ€์ง€ ์š”์†Œ(๋น„๋””์˜ค ์ข…๋ฅ˜, ์‹œ๊ฐ ์š”์†Œ, ์• ๋‹ˆ๋ฉ”์ด์…˜, ๊ธธ์ด)์™€ 5๊ฐ€์ง€ ์‹ค์ „ ํ”„๋กฌํ”„ํŠธ ์˜ˆ์‹œ: ๋กœ๊ณ  ์• ๋‹ˆ๋ฉ”์ด์…˜, ๋ฐ์ดํ„ฐ ๋น„์ฃผ์–ผ๋ผ์ด์ œ์ด์…˜, ํƒ€์ดํ”„๋ผ์ดํ„ฐ ํ…์ŠคํŠธ, ํŠธ๋žœ์ง€์…˜, ํŒŒํ‹ฐํด ์ดํŽ™ํŠธ