Team NDD. ์˜์ƒ ์ธ์ฝ”๋”ฉ~ํด๋ผ์šฐ๋“œ ์—…๋กœ๋”ฉ๊นŒ์ง€์˜ ํ—˜๋‚œํ•œ ์—ฌ์ •(๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„์—์„œ ์ธ์ฝ”๋”ฉํ•˜์ง€ ๋ชปํ•œ ์ด์œ )

๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ๊ณ„ํš์€ ์žˆ์—ˆ๋‹ค.

Profile Picture
JangAJang
2023-11-15

์›๋ณธ

Intro

์ด ๋„์ „์„ ํ•˜๊ธฐ ์ „๊นŒ์ง€ ์šฐ๋ฆฌ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ๊ฐํ•ด๋ณด์•„์•ผ ํ•œ๋‹ค.

  • ํ”„๋ก ํŠธ์—”๋“œ์—์„œ webmํŒŒ์ผ๋กœ ์˜์ƒ์„ ๋…นํ™”ํ•œ ๋’ค, pre-signed url์„ ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ›๊ณ , ์˜์ƒ์„ ์ €์žฅํ•œ๋‹ค.
  • ์ €์žฅํ•œ ์˜์ƒ์˜ url์„ ๋ฐ›์€ ๋’ค ๋ฐฑ์—”๋“œ์— ํ•ด๋‹น url๊ณผ ์˜์ƒ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฐฑ์—”๋“œ๋Š” ๋ฐ›์€ ์˜์ƒ์˜ ์ •๋ณด๋ฅผ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•œ๋‹ค.

์˜ ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์ˆ˜ํ–‰์‹œํ‚ค๊ณ  ์žˆ์—ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ์ œ์ผ ํฐ ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ???

WEBM ์ด ์นœ๊ตฌ๋Š” iOS, safari์—์„œ๋Š” ์ง€์›์ด ๋˜์ง€ ์•Š๋Š”๋‹ค!!!

์ด๋Ÿฐ ๋ฌธ์ œ๋กœ, ์šฐ๋ฆฌ๋Š” webmํŒŒ์ผ๋กœ ์˜์ƒ์„ ์ €์žฅํ•˜๋ฉด ์•ˆ๋˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด mp4ํŒŒ์ผ๋กœ ์ธ์ฝ”๋”ฉ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ด๋ฅผ ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ”๋กœ ์ €์žฅํ•˜๋Š” ๋กœ์ง์„ ๋งŒ๋“ค์–ด๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

What do we need?

  • ffmpeg : ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ ํŒŒ์ผ์„ ์ธ์ฝ”๋”ฉํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • fluent-ffmpeg : nodejsํ™˜๊ฒฝ์—์„œ ffmpeg๋ฅผ ๋™์ž‘ํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.(ffmpeg๊ฐ€ ์™ธ๋ถ€ ํ™˜๊ฒฝ์— ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค. ์™ธ๋ถ€๋ผ๊ณ  ๋งํ•œ ์ด์œ ๋Š” ํ›„์— ๋ณด๋ฉด ์•ˆ๋‹ค)
  • multer-s3, multer, s3 : ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ด๋ฅผ s3(ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€๋Š” ๋ชจ๋‘ s3 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋™์ž‘ ๊ฐ€๋Šฅํ•˜๋‹ค)๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

How can we do this?

ffmpeg์˜ ๊ณต์‹ ๋ฌธ์„œ๋“ค์„ ๋ณด๋ฉด์„œ ์ด๋ฅผ ์ดํ•ดํ•ด๋ณด์•˜๋‹ค.

ffmpeg๋Š” ๋กœ์ปฌ์— ์กด์žฌํ•˜๋Š” ํŒŒ์ผ์˜ ํƒ€์ž…์„ ์„ค์ •ํ•ด์ฃผ์–ด ์›ํ•˜๋Š” ๋ฏธ๋””์–ดํƒ€์ž…์œผ๋กœ ํŒŒ์ผ์„ ๋ฐ”๊พธ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋œ ๊น€์—, ์ธ๋„ค์ผ๋„ ๊ฐ™์ด ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜์ž๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

๋จธ๋ฆฌ์†์œผ๋กœ ๋™์ž‘ ํ”Œ๋กœ์šฐ๋ฅผ ๊ทธ๋ฆฌ๊ณ , ์ด๋ฅผ ๋ถ€๋ถ„๋ณ„๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ด์ค€ ํŒŒ์ผ์„ ๋กœ์ปฌ์— ๋ฐ›๋Š”๋‹ค.
  2. ๋กœ์ปฌ์— ๋ฐ›์€ ํŒŒ์ผ์„ mp4(์ธ์ฝ”๋”ฉ๋œ ์˜์ƒ), png(์ธ๋„ค์ผ)๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. (์ด ๋•Œ webmํŒŒ์ผ์„ ์ง€์šด๋‹ค)
  3. ํ•ด๋‹น ํŒŒ์ผ๋“ค์„ s3๋กœ ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•ด์ค€๋‹ค. (์ด ๋•Œ mp4, pngํŒŒ์ผ์„ ์ง€์šด๋‹ค)
  4. ์ €์žฅ๋œ ๊ฒฝ๋กœ๋กœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด, type-orm์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

๊ตฌํ˜„ ๊ณผ์ •

WebmํŒŒ์ผ ๋ฐ›๊ธฐ

1๋‹จ๊ณ„๋กœ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€, ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  webmํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๋กœ์ง์„ ๋งŒ๋“ค์—ˆ๋‹ค.

๋ฉ˜ํ† ๋‹˜๊ป˜ ์‚ฌ์ „์— ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ๋“ค์„ ๋“œ๋ ค๋ณธ ๊ฒฐ๊ณผ, ๋ชจ๋“  ๋กœ์ง์ด ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•˜์…จ๊ณ , ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๋Œ€์šฉ๋Ÿ‰ ์ฒ˜๋ฆฌ๊ณผ์ •์€ ๋ชจ๋‘ ๋น„๋™๊ธฐ๋กœ ๋Œ๋ ธ๋‹ค.

์ธ์ฝ”๋”ฉํ•˜๊ธฐ

์ดํ›„์— ํŒŒ์ผ์„ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๋กœ์ง์„ ๋งŒ๋“ค์—ˆ๋‹ค.

์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ๋ชจ๋‘${๋””๋ ‰ํ† ๋ฆฌ์ฃผ์†Œ}/${ํŒŒ์ผ๋ช…}.${ํ™•์žฅ์ž}๋กœ ์ฃผ์—ˆ์„ ๋–„, ffmpeg(${์ž…๋ ฅ})์œผ๋กœ ์กด์žฌํ•˜๋Š” ํŒŒ์ผ์„ ์ธ์ฝ”๋”ฉํ•˜๊ฒŒ ๋œ๋‹ค.

์ธ์ฝ”๋”ฉ ๋œ ํŒŒ์ผ์€ .output(${์ถœ๋ ฅ})์—์„œ ์ถœ๋ ฅ์— ๋งž๊ฒŒ ์ธ์ฝ”๋”ฉ ๋œ๋‹ค.

์ด ๋•Œ ์ธ๋„ค์ผ์„ ์–ด๋–ป๊ฒŒ ๋ฝ‘์„๊นŒ๋ฅผ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€, ๋‹จ์ˆœํ•˜๊ฒŒ ์ฒซ ํ”„๋ ˆ์ž„๋งŒ์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ํ–ˆ๋‹ค.

์ธ์ฝ”๋”ฉ์ด ๋๋‚ฌ์„ ๋•Œ, .on('end', ()=> {//webmํŒŒ์ผ ์‚ญ์ œ})์˜ ํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ์— ์ €์žฅํ•˜๊ธฐ

๋กœ์ปฌ์— ์กด์žฌํ•˜๋Š” s3ํŒŒ์ผ๋„ ์ „์†กํ•ด์ฃผ์–ด์„œ, ์ €์žฅํ•˜๋Š” ๋กœ์ง์„ ์ˆ˜ํ–‰์‹œ์ผฐ๋‹ค.

์ด ๋•Œ ContentType์ด๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ธ์‹๋˜์ง€ ์•Š๊ณ , ์ €์žฅ๋œ ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์ฐพ์•„๋ณด๋ฉด ๊ณ„์†ํ•ด์„œ application/octet-stream์ด๋ผ๋Š” ํ™•์žฅ์ž๊ฐ€ ์กด์žฌํ•  ๋•Œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํ™•์žฅ์ž๋กœ๋Š” ์ €์žฅ๋œ url๋กœ ์กฐํšŒํ•ด๋„ ์˜์ƒ๊ณผ ์ธ๋„ค์ผ์ด ์›น์—์„œ ์žฌ์ƒ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์ €์žฅ์˜ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด multer-s3๋ฅผ ์„ค์น˜ํ•˜๊ณ  ContentType๋ฅผ ์„ค์ •ํ•˜๋‹ˆ ์ œ๋Œ€๋กœ ์ €์žฅ๋˜์—ˆ๋‹ค.

์ €์žฅ์ด ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ, deleteFile์„ ์ง„ํ–‰์‹œ์ผœ์ฃผ์—ˆ๊ณ  ์ €์žฅ๋œ ์Šคํ† ๋ฆฌ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ–ˆ๋‹ค.

s3๊ฐ์ฒด์— ๋“ค์–ด๊ฐ€๋Š” ์ •๋ณด๋Š” ๊ฐ ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๋˜์–ด์žˆ๋‹ค. (๊ทธ๋Ÿฐ๋ฐ, AWS์˜ S3๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ชจ๋“  ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€์—์„œ ์ง€์›ํ•œ๋‹ค. ์ด๊ฒŒ๋งž์•„...?)

๋˜ํ•œ, ํ•ด๋‹น ๋กœ์ง์— params๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ์ด๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

{
    Bucket // ์ €์žฅํ•  ๋ฒ„ํ‚ท์˜ ์ด๋ฆ„,
    ACL //ํ•ด๋‹น ํŒŒ์ผ์˜ ๊ณต๊ฐœ์—ฌ๋ถ€,
    ContentType //์ €์žฅํ•  ํ™•์žฅ์ž,
    Key //์Šคํ† ๋ฆฌ์ง€์—์„œ ํŒŒ์ผ์„ ์ €์žฅํ•  ์ด๋ฆ„,
    Body //์ €์žฅํ•  ๋ฐ์ดํ„ฐ
}

์ด์ œ ๋‹ค ๋ชจ์•„๋ฒ„๋ฆฌ๊ธฐ

๊ธฐ์กด์˜ pre-signed url์„ ๋ณด๋‚ด๊ณ  ๊ทธ ๋‹ค์Œ๊ณผ์ •์ธ ํ…Œ์ด๋ธ”ํ™” ์‹œํ‚ค๋Š” ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ–ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ•œ ์ด์œ ๋Š”, ๊ธฐ์กด ๋กœ์ง์„ ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ Time Cost๊ฐ€ ๋” ์‹ธ๋‹ˆ๊นŒ!!!

์ด๋Ÿฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋งŒ๋“  ๋‹ค์Œ, ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํ•ด๋‹น ๋กœ์ง์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์„œ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํŒŒ์ผ์„ ๋ฐ›์•„ ์ €์žฅ์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋“ฑ๋กํ•ด, ํ† ํฐ์„ ํŒŒ์‹ฑํ•ด ํšŒ์› ์ •๋ณด๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋กœ์ง๋„ ์ด์ „์— ๋“ฑ๋กํ•ด๋‘์—ˆ๋‹ค.

์„ฑ๊ณต์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค!!! ์•„๋ž˜์˜ ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด ์ •์ƒ์ ์œผ๋กœ ํŒŒ์ผ์„ ์‚ญ์ œํ–ˆ๋‹ค๋Š” ๊ฒƒ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋๋‚œ์ค„ ์•Œ์•˜์ง€??

์ด์ „ ๊ฒŒ์‹œ๋ฌผ, ๋„์ปค์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์žŠ์ง€ ๋ง์•„์•ผ ํ•  ๊ฒƒ์ด ์žˆ๋‹ค.

๋„์ปค๋ผ๋Š” ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ ,

์ฆ‰, ๋„์ปค๋ผ๋Š” ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์—์„œ ffmpeg๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์„ค๋ช…์„œ(์ด๋ฏธ์ง€)์— ์จ์ฃผ๊ณ , ๊ฐ€์ƒ ์ปดํ“จํ„ฐ(์ปจํ…Œ์ด๋„ˆ)๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋„์ปค ํ™˜๊ฒฝ์—์„œ, ์ž์‹ ์˜ ์ƒํ™ฉ์— ๋งž๊ฒŒ ffmpeg๋ฅผ ๋“ฑ๋กํ•ด์ฃผ์ž.

์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋ฐฐํฌ ์„œ๋ฒ„์˜ ๋„์ปค ํ™˜๊ฒฝ์—์„œ๋„ ์ง„ํ–‰์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์„ฑ๊ณต? ์•„๋‹ˆ!

๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์•ฝ 20mb๋กœ 2๋ถ„์˜ ์˜์ƒ์„ ์ธ์ฝ”๋”ฉํ•˜๊ณ  ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๋Š”๋ฐ์—๋Š” 12์ดˆ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค.

ํ•˜์ง€๋งŒ, ๋ฐฐํฌ๋œ ํ™˜๊ฒฝ์—์„œ๋Š” 30์ดˆ ์ด์ƒ์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜์—ˆ๋‹ค.

์„ฑ๋Šฅ์ ์œผ๋กœ ๋‹จ์ผ ์˜์ƒ ์ธ์ฝ”๋”ฉ ๊ธฐ์ค€์œผ๋กœ 2.5๋ฐฐ์˜ ์„ฑ๋Šฅ์ฐจ์ด๊ฐ€ ์กด์žฌํ–ˆ๋‹ค.

๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์„œ์ธ์ง€, ๋งค ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ๋•Œ ์ด๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ, CPU๋ชจ๋‹ˆํ„ฐ๋ง ๊ฒฐ๊ณผ 99.9%๋ฅผ ๋„˜์–ด๋ฒ„๋ฆฌ๋ฉฐ ์„œ๋ฒ„๊ฐ€ ๊บผ์ง€๋Š” ์‚ฌํƒœ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์ด์œ ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์•˜์„ ๋•Œ,

  • ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค๋กœ ๋™์ž‘์‹œํ‚ค๊ธฐ์—” ๋„ˆ๋ฌด ๋Œ€์šฉ๋Ÿ‰ ์ž‘์—…์ด๋‹ค. (ํ•œ ์‚ฌ๋žŒ์ด ์•ฝ 30์ดˆ๋งˆ๋‹ค 20MB์˜ ์˜์ƒ์„ ๋ณด๋‚ธ๋‹ค๋ฉด, 10๋ช…๋งŒ ํ•ด๋„ 30์ดˆ๋งˆ๋‹ค 200MB์”ฉ ์ธ์ฝ”๋”ฉ์„ ํ•˜๊ฒŒ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ํ”„๋ฆฌํ‹ฐ์–ด๋‹ค!)
  • ์„œ๋ฒ„ ๋ถ€ํ•˜์˜ ํ•œ๊ณ„์ 
  • nestjs์—์„œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋กœ ์ž‘์—…ํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š์•˜๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์•ˆ๋“ค์„ ์ƒ๊ฐํ•ด๋ณด์•˜๋‹ค.

  • ํ๋ฅผ ๊ตฌํ˜„ํ•ด์„œ, ํ•˜๋‚˜์”ฉ ํƒœ์Šคํฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹์œผ๋กœ ์ง„ํ–‰์‹œํ‚จ๋‹ค.
  • ์„œ๋ฒ„์— ์˜คํ†  ์Šค์ผ€์ผ๋ง์„ ๋‹ฌ์•„์„œ ์š”์ฒญ์ด ๋งŽ์•„์งˆ ๋•Œ ๋งˆ๋‹ค ์Šค์ผ€์ผ์—…, ์š”์ฒญ์ด ์ ์–ด์งˆ ๋•Œ ๋งˆ๋‹ค ์Šค์ผ€์ผ ๋‹ค์šด์„ ์ง„ํ–‰ํ•œ๋‹ค.

์—ฌ๊ธฐ์—์„œ ํ๋ฅผ ๊ตฌํ˜„ํ•ด, ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๋ฐฉ์‹์ด ์šฐ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€์ ์ธ ๊ณผ๊ธˆ ์—†์ด ํด๋ฆฐํ•œ ๋ฌด๊ณผ๊ธˆ ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๊ฒƒ๋งˆ์ €๋„, ์š”์ฒญ์ด ๋งŽ์•„์กŒ์„ ๋•Œ, ํ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๋ฐ›๋Š”๋‹ค ํ•˜๋”๋ผ๋„ ์ธ์ฝ”๋”ฉ๋˜๊ณ  ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜๊ธฐ๊นŒ์ง€ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆด์ง€๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ์„ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ffmpegwasm์„ ํ†ตํ•ด ์ธ์ฝ”๋”ฉ์„ ์ง€์›ํ•˜๊ฒŒ ํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๊ฒƒ๋งˆ์ €๋„, ํด๋ผ์ด์–ธํŠธ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๊ฐ์ž์˜ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—,

์ด๋ฅผ ์•„์ฃผ ์ž‘๊ฒŒ ์žก๋Š” ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๋™์ž‘ํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

์ด๋ฅผ ์ตœ์ ํ™” ์‹œํ‚ค๊ณ  ๋” ๋‚˜์€ ๊ฒฐ๊ณผ์˜ ๋‹ค์Œ ํฌ์ŠคํŒ…์„ ์“ฐ๋Š” ๊ฒƒ์ด ์•ž์œผ๋กœ์˜ ๊ฐ€์žฅ ํฐ ๊ณผ์ œ์ด์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค.

๊ทธ๋Ÿผ...twenty thousand...๐Ÿ”ฅ

ยฉ 2024 Adultlee. All rights reserved.Made with โค by ์ด์„ฑ์ธ