๋๊ตฌ์๊ฒ๋ ๊ณํ์ ์์๋ค.
์ ๋ก์ง์ ๊ฐ์ง๊ณ ์ํ์ํค๊ณ ์์๋ค.
์ฌ๊ธฐ์์ ์ ์ผ ํฐ ๋ฌธ์ ๊ฐ ๋ฌด์์ผ๊น???
์ด๋ฐ ๋ฌธ์ ๋ก, ์ฐ๋ฆฌ๋ webmํ์ผ๋ก ์์์ ์ ์ฅํ๋ฉด ์๋๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด mp4ํ์ผ๋ก ์ธ์ฝ๋ฉ์ ์ฒ๋ฆฌํ๊ณ ์ด๋ฅผ ๋ฐฑ์๋์์ ๋ฐ๋ก ์ ์ฅํ๋ ๋ก์ง์ ๋ง๋ค์ด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
ffmpeg์ ๊ณต์ ๋ฌธ์๋ค์ ๋ณด๋ฉด์ ์ด๋ฅผ ์ดํดํด๋ณด์๋ค.
ffmpeg๋ ๋ก์ปฌ์ ์กด์ฌํ๋ ํ์ผ์ ํ์ ์ ์ค์ ํด์ฃผ์ด ์ํ๋ ๋ฏธ๋์ดํ์ ์ผ๋ก ํ์ผ์ ๋ฐ๊พธ์ด์ค ์ ์๋ค.
์ด๋ ๊ฒ ๋ ๊น์, ์ธ๋ค์ผ๋ ๊ฐ์ด ๋ง๋ค์ด์ ์ฌ์ฉํ์๋ ์๊ฐ์ด ๋ค์๋ค.
๋จธ๋ฆฌ์์ผ๋ก ๋์ ํ๋ก์ฐ๋ฅผ ๊ทธ๋ฆฌ๊ณ , ์ด๋ฅผ ๋ถ๋ถ๋ณ๋ก ๊ตฌํํด๋ณด๊ธฐ๋ก ํ๋ค.
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%๋ฅผ ๋์ด๋ฒ๋ฆฌ๋ฉฐ ์๋ฒ๊ฐ ๊บผ์ง๋ ์ฌํ๊ฐ ๋ฐ์ํ๋ค.
์ด์ ๋ฅผ ์๊ฐํด๋ณด์์ ๋,
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ์๋ค์ ์๊ฐํด๋ณด์๋ค.
์ฌ๊ธฐ์์ ํ๋ฅผ ๊ตฌํํด, ํ๋์ฉ ์ฒ๋ฆฌํ๋ค๋ ๋ฐฉ์์ด ์ฐ๋ฆฌ๊ฐ ์ถ๊ฐ์ ์ธ ๊ณผ๊ธ ์์ด ํด๋ฆฐํ ๋ฌด๊ณผ๊ธ ํ ์ด ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
ํ์ง๋ง ์ด๊ฒ๋ง์ ๋, ์์ฒญ์ด ๋ง์์ก์ ๋, ํ๊ฐ ์ผ๋ง๋ ๋ฐ์ ์ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ๋ฐ๋๋ค ํ๋๋ผ๋ ์ธ์ฝ๋ฉ๋๊ณ ํ ์ด๋ธ์ ์ ์ฅ๋๊ธฐ๊น์ง ์ผ๋ง๋ ๊ฑธ๋ฆด์ง๊ฐ ๋ฌธ์ ๊ฐ ๋์๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ํด๊ฒฐ์ ํ๋ก ํธ์๋์์ ffmpegwasm์ ํตํด ์ธ์ฝ๋ฉ์ ์ง์ํ๊ฒ ํ๋ค.
ํ์ง๋ง ์ด๊ฒ๋ง์ ๋, ํด๋ผ์ด์ธํธ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ฐ์์ ๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์,
์ด๋ฅผ ์์ฃผ ์๊ฒ ์ก๋ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ์์๋ ๋์ํ๊ธฐ ํ๋ค๋ค๋ ๋จ์ ์ด ์๋ค.
์ด๋ฅผ ์ต์ ํ ์ํค๊ณ ๋ ๋์ ๊ฒฐ๊ณผ์ ๋ค์ ํฌ์คํ ์ ์ฐ๋ ๊ฒ์ด ์์ผ๋ก์ ๊ฐ์ฅ ํฐ ๊ณผ์ ์ด์ง ์์๊น ์ถ๋ค.
๊ทธ๋ผ...twenty thousand...๐ฅ