ํ์ผ ์ ํ
๐
ํด๋ฆญํ๊ฑฐ๋ ํ์ผ์ ๋์ด๋ค ๋์ผ์ธ์
์ด๋ฏธ์งยทPDFยท๋ฌธ์ ๋ฑ ๋ชจ๋ ํ์ ยท ์ต๋ 10MB
๐ค Base64 ์ธ์ฝ๋ฉ ๊ด๋ จ Q&A
Base64 ์ธ์ฝ๋ฉ์ด๋ ๋ฌด์์ธ๊ฐ์?
Base64๋ ์ด๋ฏธ์ง ํ์ผ, ์คํ ํ์ผ, ์ผ๋ฐ ๋ฌธ์์ด ๊ฐ์ 8๋นํธ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ํ๋ฒณ ๋์๋ฌธ์, ์ซ์, +, /์ 64๊ฐ ๋ฌธ์๋ก ๋ฐ๊ฟ ํํํ๋ ๋ฐฉ์์
๋๋ค. 3๋ฐ์ดํธ๋ฅผ 4๊ธ์๋ก ๋ฐ๊พธ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ๋ ์๋ณธ๋ณด๋ค ์ฝ 33% ๊ธธ์ด์ง๊ณ , ๊ธธ์ด๋ฅผ 4์ ๋ฐฐ์๋ก ๋ง์ถ๊ธฐ ์ํด ๋์ = ํจ๋ฉ์ด ๋ถ์ ์ ์์ต๋๋ค. ํ
์คํธ๋ง ํ์ฉํ๋ ์ด๋ฉ์ผ ๋ณธ๋ฌธ, JSON, HTML ์์ฑ ์์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋ ์ฐ์ด์ง๋ง, ์ํธํ๋ ์ ์ก ๋ณด์์ ์ ๊ณตํ์ง๋ ์์ต๋๋ค. ํ๊ธ์ฒ๋ผ ASCII ๋ฐ์ ๋ฌธ์๋ ๋จผ์ UTF-8 ๋ฐ์ดํธ๋ก ๋ฐ๊พผ ๋ค ์ธ์ฝ๋ฉํ๋ฏ๋ก ํ ๊ธ์๊ฐ 3๋ฐ์ดํธ๋ก ๊ณ์ฐ๋ฉ๋๋ค.
Base64๋ ์ํธํ ๋ฐฉ์์ธ๊ฐ์?
์๋๋๋ค. Base64๋ '์ธ์ฝ๋ฉ(Encoding)' ๋ฐฉ์์ผ ๋ฟ, ๋ณด์์ ์ํ '์ํธํ(Encryption)'๊ฐ ์๋๋๋ค. ๋๊ตฌ๋ Base64 ๋ฌธ์์ด์ ์๋ณธ ๋ฐ์ดํฐ๋ก ๋ค์ ๋์ฝ๋ฉํ ์ ์์ผ๋ฏ๋ก, ๋น๋ฐ๋ฒํธ๋ ๊ฐ์ธ์ ๋ณด ๊ฐ์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ Base64๋ก๋ง ์ฒ๋ฆฌํด์ ๋
ธ์ถํ๋ฉด ์์ ํ์ง ์์ต๋๋ค. ๋ฐ๋์ ๊ฐ๋ ฅํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ์ฒ๋ฆฌ๋ฅผ ๋ณ๋๋ก ํด์ผ ํฉ๋๋ค.
URL-safe Base64์ JWT๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์?
ํ์ค Base64์ +์ /๋ URL์์ ํน๋ณํ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ฏ๋ก, URLยทํ์ผ ์ด๋ฆยทJWT ํ ํฐ์์๋ ์ด๋ฅผ -์ _๋ก ๋ฐ๊พธ๊ณ ๋์ =๋ฅผ ์๋ตํ URL-safe ํ์์ ์๋๋ค. ๋์ฝ๋ฉํ ๋๋ ๋ ํ์์ ์๋์ผ๋ก ๊ตฌ๋ถํ๊ณ , ๋น ์ง ํจ๋ฉ๊ณผ ์ค๋ฐ๊ฟยท๊ณต๋ฐฑ, data:image/png;base64, ๊ฐ์ ์ ๋์ด๋ ์์์ ์ ๋ฆฌํฉ๋๋ค. ์ (.)์ผ๋ก ๋๋ ์ธ ๋ถ๋ถ์ผ๋ก ๋ JWT๋ฅผ ๋ถ์ฌ๋ฃ์ผ๋ฉด ํค๋์ ํ์ด๋ก๋๋ฅผ ๊ฐ๊ฐ JSON์ผ๋ก ํ์ด ๋ณด์ฌ ์ค๋๋ค. ๋ค๋ง ์๋ช
์ ๊ฒ์ฆํ์ง ์์ผ๋ฏ๋ก ํ ํฐ์ด ์์กฐ๋์ง ์์๋ค๋ ๋ณด์ฅ์ ๋์ง ์์ต๋๋ค.
๋์ฝ๋ฉ ๊ฒฐ๊ณผ๊ฐ '๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ'๋ก ๋์ค๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
๋์ฝ๋ฉํ ๋ฐ์ดํธ๊ฐ ์ฌ๋ฐ๋ฅธ UTF-8 ํ
์คํธ๊ฐ ์๋๋ฉด ์ต์ง๋ก ๊ธ์๋ก ๋ฐ๊พธ์ง ์๊ณ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ก ์๋ดํฉ๋๋ค. ์ด๋ฏธ์ง๋ PDF๋ฅผ Base64๋ก ๋ง๋ ๋ฌธ์์ด์ด๋ผ๋ฉด ํ์ผ ๋จธ๋ฆฌ ๋ถ๋ถ์ ์๋ณ ๋ฐ์ดํธ๋ก PNGยทJPEGยทGIFยทWebPยทPDFยทZIP ๋ฑ์ ํ์์ ํ๋ณํด ์๋ง์ ํ์ฅ์๋ก ์ ์ฅํ ์ ์๊ฒ ํฉ๋๋ค. ํ
์คํธ์์ด์ผ ํ๋๋ฐ ๋ฐ์ด๋๋ฆฌ๋ก ๋์จ๋ค๋ฉด ๋ณต์ฌ ๊ณผ์ ์์ ๋ฌธ์์ด ์ผ๋ถ๊ฐ ์๋ ธ๊ฑฐ๋, UTF-8์ด ์๋ EUC-KR ๋ฑ ๋ค๋ฅธ ์ธ์ฝ๋ฉ์ผ๋ก ๋ง๋ค์ด์ง ๋ฌธ์์ด์ผ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
์ด๋ฏธ์ง๋ฅผ Base64๋ก ์ธ์ ์ฃผ๋ก ๋ณํํ๋์?
HTML ๋ฌธ์๋ ์ด๋ฉ์ผ ํ
ํ๋ฆฟ ์์ ์์ ๋ก๊ณ ์ด๋ฏธ์ง๋ ์์ด์ฝ์ ์ง์ ๋ฃ์ ๋ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค. ํ์ผ ํญ์์ ์ด๋ฏธ์ง๋ฅผ ๊ณ ๋ฅธ ๋ค ๋ณต์ฌ ํ์์ 'HTML <img> ํ๊ทธ'๋ 'CSS background-image'๋ก ๋ฐ๊พธ๋ฉด <img src="data:image/png;base64,..."> ํํ๋ฅผ ๋ฐ๋ก ๋ถ์ฌ๋ฃ์ ์ ์์ต๋๋ค. ๋ณ๋์ ์ด๋ฏธ์ง ์์ฒญ์ด ์ค์ด๋๋ ๋์ ๋ฌธ์ ์์ฒด๊ฐ ์ปค์ง๊ณ ๋ธ๋ผ์ฐ์ ์บ์๋ฅผ ๋ฐ๋ก ํ์ฉํ์ง ๋ชปํ๋ฏ๋ก, ์ ํฌ๋ก๋ฐ์ดํธ ์ดํ์ ์์ ์ด๋ฏธ์ง์๋ง ๊ถ์ฅ๋ฉ๋๋ค.
์ง์ ๋ฒ์์ ์ฃผ์ํ ํ๊ณ๋ ๋ฌด์์ธ๊ฐ์?
ํ
์คํธ ์
๋ ฅ์ ์ต๋ 100๋ง ์, Base64 ๋์ฝ๋ฉ ์
๋ ฅ์ ์ต๋ 800๋ง ์, ํ์ผ์ ํ์๊ณผ ๊ด๊ณ์์ด ์ต๋ 10MB๊น์ง ์ฒ๋ฆฌํฉ๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋งค์ฐ ๊ธธ๋ฉด ํ๋ฉด์๋ ์๋ถ๋ถ๋ง ๋ฏธ๋ฆฌ ๋ณด์ฌ ์ฃผ๊ณ , ๋ณต์ฌ์ ์ ์ฅ ๋ฒํผ์ ์ ์ฒด ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํฉ๋๋ค. Base64 ๊ฒฐ๊ณผ๋ ์๋ณธ๋ณด๋ค ์ฝ 33% ์ปค์ง๋ฏ๋ก ํฐ ํ์ผ ์ ์ก์ด๋ ์ ์ฅ ์ฉ๋๋ก๋ ์ ํฉํ์ง ์์ต๋๋ค. ๋ชจ๋ ๋ณํ์ ๋ธ๋ผ์ฐ์ ์์์ ์ฒ๋ฆฌ๋๋ฉฐ ์
๋ ฅํ ํ
์คํธ๋ ํ์ผ์ ์๋ฒ๋ก ์
๋ก๋ํ์ง ์์ต๋๋ค.