Base64 ์ธ์ฝ๋ฉ ์ฉ๋ ๊ณ์ฐ๊ธฐ๋?
Base64๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ ๊ฐ๋ฅํ 64๊ฐ์ ASCII ๋ฌธ์๋ก ํํํ๋ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ๋๋ค. HTML/CSS์ ์ด๋ฏธ์ง๋ฅผ ์ง์ ๋ฃ์ ๋(data URI), ์ด๋ฉ์ผ์ ํ์ผ์ ์ฒจ๋ถํ ๋(MIME), JSON์ด๋ ํ ํฐ ์์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๋ ํญ๋๊ฒ ์ฐ์ ๋๋ค. Base64๋ ์๋ณธ 3๋ฐ์ดํธ๋ฅผ ์ถ๋ ฅ 4๋ฌธ์๋ก ๋ณํํ๊ธฐ ๋๋ฌธ์ ์ธ์ฝ๋ฉ ๊ฒฐ๊ณผ๋ ํญ์ ์๋ณธ๋ณด๋ค ์ปค์ง๋ฉฐ, ๋๋ต 33%๊ฐ๋ ๋์ด๋ฉ๋๋ค. ์ด ๊ณ์ฐ๊ธฐ๋ ์ฌ๋ฌ๋ถ์ ๋ฐ์ดํฐ๊ฐ ์ธ์ฝ๋ฉ ํ ์ ํํ ์ผ๋ง๋ ์ปค์ง๋์ง ์๋ ค์ค๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ
์๋ณธ ํ์ผ์ด๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์
๋ ฅํ๊ณ ๋จ์(๋ฐ์ดํธ, KB, MB, GB)๋ฅผ ๊ณ ๋ฅธ ๋ค, ์ถ๋ ฅ์ ํ์ค ํจ๋ฉ(๋์ ๋ถ๋ = ๋ฌธ์)์ ํฌํจํ ์ง ์ ํํ์ธ์. ๊ณ์ฐ๊ธฐ๋ ์ธ์ฝ๋ฉ ํ ํฌ๊ธฐ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๋ณด์ฌ์ฃผ๊ณ , ์ธ์ฝ๋ฉ์ผ๋ก ๋์ด๋ ์ฉ๋์ ๋น์จ(%)๋ก๋ ์๋ ค์ค๋๋ค.
๊ณ์ฐ ๊ณต์ ํ์ด
ํ์ค Base64๋ ์
๋ ฅ์ 3๋ฐ์ดํธ ๋จ์๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๊ฐ ๊ทธ๋ฃน์ ์ ํํ 4๋ฌธ์๊ฐ ๋๊ณ , ๋ง์ง๋ง์ ๋จ๋ ๋ถ๋ถ ๊ทธ๋ฃน์ = ๋ฌธ์๋ก 4๋ฌธ์๊ฐ ๋๋๋ก ์ฑ์์ง๋๋ค. ๋ฐ๋ผ์ ํจ๋ฉ์ ํฌํจํ ํฌ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$\text{์ธ์ฝ๋ฉ\_๋ฐ์ดํธ} = 4 \times \left\lceil \frac{\text{์ ๋ ฅ\_๋ฐ์ดํธ}}{3} \right\rceil$$
ํจ๋ฉ์ ๋๋ฉด ์ค์ ๋ก ํ์ํ ๋ฌธ์๋ง ์์ฑ๋ฉ๋๋ค. \( \left\lceil \frac{4 \times \text{์ ๋ ฅ\_๋ฐ์ดํธ}}{3} \right\rceil \) ๊ณต์์ด ์ ์ฉ๋์ด, ์ธ์ฝ๋ฉ๋ง๋ค ๋ถ๋ 1~2๊ฐ์ ํจ๋ฉ ๋ฌธ์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
๊ณ์ฐ ์์
1,000๋ฐ์ดํธ์ง๋ฆฌ ํ์ผ์ด ์๋ค๊ณ ํด๋ด ์๋ค. 3์ผ๋ก ๋๋๋ฉด 333.33, ์ฌ๋ฆผ(ceil)ํ๋ฉด 334, ์ฌ๊ธฐ์ 4๋ฅผ ๊ณฑํ๋ฉด \( 334 \times 4 = 1{,}336 \)๋ฐ์ดํธ์ ๋๋ค. ๋์ด๋ ๋น์จ์ \( (1336 - 1000) / 1000 = 33.6\% \)๊ฐ ๋ฉ๋๋ค. ํจ๋ฉ์ ๋นผ๋ฉด \( \left\lceil 4000/3 \right\rceil = \left\lceil 1333.33 \right\rceil = 1{,}334 \)๋ฐ์ดํธ๊ฐ ๋ฉ๋๋ค.
์ฃผ์ ์ฉ์ด ์ค๋ช
- Base64
-
64๊ฐ์ ์ธ์ ๊ฐ๋ฅํ ASCII ๋ฌธ์(AโZ, aโz, 0โ9, ๊ทธ๋ฆฌ๊ณ
+์/)๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๋ ๋ฐ์ด๋๋ฆฌ-ํ ์คํธ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ๋๋ค. ์ด๋ฉ์ผ ๋ณธ๋ฌธ, JSON, XML, URL ๋ฑ ํ ์คํธ ์ ์ฉ ์ฑ๋์ ํตํด ๋ฐ์ด๋๋ฆฌ ์ฝํ ์ธ ๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ ์ ์๊ฒ ํฉ๋๋ค. - 3๋ฐ์ดํธ ๊ทธ๋ฃน / 4๋ฌธ์ ๋ธ๋ก
- Base64๋ ๊ณ ์ ๋ ๊ทธ๋ฃน์ผ๋ก ์๋ํฉ๋๋ค. ์ ๋ ฅ์ ๋ชจ๋ 3๋ฐ์ดํธ(24๋นํธ)๊ฐ 4๊ฐ์ 6๋นํธ ์ฒญํฌ๋ก ๋ถํ ๋๋ฉฐ, ๊ฐ๊ฐ ํ๋์ Base64 ๋ฌธ์๋ก ๋งคํ๋ฉ๋๋ค. ๋ฐ๋ผ์ 3๊ฐ์ ์ ๋ ฅ ๋ฐ์ดํธ๋ ํญ์ 4๊ฐ์ ์ถ๋ ฅ ๋ฌธ์๊ฐ ๋๋ฉฐ, ์ด๊ฒ์ด ์ธ์ฝ๋ฉ์ ํฌ๊ธฐ ์ฆ๊ฐ์ ๊ทผ๋ณธ ์์ธ์ ๋๋ค.
-
ํจ๋ฉ(
=) -
์
๋ ฅ ๊ธธ์ด๊ฐ 3์ ์ ํํ ๋ฐฐ์๊ฐ ์๋ ๊ฒฝ์ฐ, ์ต์ข
๊ทธ๋ฃน์ด ๋ถ์์ ํฉ๋๋ค. ์ธ์ฝ๋๋ ํ๋ ๋๋ ๋ ๊ฐ์
=๋ฌธ์๋ฅผ ์ถ๊ฐํ์ฌ ์ถ๋ ฅ ๊ธธ์ด๊ฐ 4์ ๋ฐฐ์๋ก ์ ์ง๋๋๋ก ํฉ๋๋ค. ๋จ์ ๋ฐ์ดํธ 1๊ฐ๋=2๊ฐ๋ฅผ ์์ฑํ๊ณ , ๋จ์ ๋ฐ์ดํธ 2๊ฐ๋=1๊ฐ๋ฅผ ์์ฑํฉ๋๋ค. - ์ค๋ฒํค๋
- Base64๊ฐ ์๋ณธ ๋ฐ์ดํฐ์ ๋น๊ตํ์ฌ ์ถ๊ฐํ๋ ์ฌ๋ถ์ ํฌ๊ธฐ์ ๋๋ค. 3๋ฐ์ดํธ๊ฐ 4๋ฌธ์๊ฐ ๋๋ฏ๋ก, ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ ์ฝ \(4/3 \approx 1.333\)๋ฐฐ ๋ ํฌ๋ฉฐ, ์ด๋ ๋๋ต 33%์ ์ฆ๊ฐ์ ๋๋ค(ํจ๋ฉ๊ณผ ์ค ๋ฐ๊ฟ์ด ํฌํจ๋๋ฉด ์ฝ๊ฐ ๋ ๋ง์ต๋๋ค).
- ๋ฐ์ดํฐ URI
-
ํ์ผ์ Base64 ์ธ์ฝ๋ฉ๋ ์ฝํ
์ธ ๋ฅผ ๋ฌธ์์ ์ง์ ํฌํจ์ํค๋ URL ์คํด(์:
data:image/png;base64,iVBORw0KGgoโฆ)์ผ๋ก, ์์ ์์ฐ์ ๋ํ ๋ณ๋์ ๋คํธ์ํฌ ์์ฒญ์ ํ์์ฑ์ ์ ๊ฑฐํฉ๋๋ค. - MIME ์ค ๋ํ
- ์ด๋ฉ์ผ(MIME) ์ธ์ฝ๋ฉ์์ Base64 ์ถ๋ ฅ์ ์ต๋ 76๋ฌธ์์ ์ค๋ก ๋ถํ ๋๋ฉฐ, ๊ฐ๊ฐ์ CRLF๋ก ๋๋ฉ๋๋ค. ์ด๋ฌํ ์ค ๋ฐ๊ฟ์ ๊ธฐ๋ณธ 33% ํ์ฅ ์ด์์ ์๋์ ์ถ๊ฐ ํฌ๊ธฐ๋ฅผ ๋ํฉ๋๋ค.
- ASCII ๋ฌธ์
- 7๋นํธ ASCII ์งํฉ์ ๋จ์ผ ๋ฌธ์๋ก, 1๋ฐ์ดํธ๋ก ์ธ์ฝ๋ฉ๋ฉ๋๋ค. Base64 ์ถ๋ ฅ์ ๋ชจ๋ ๋ฌธ์๋ ASCII ๋ฌธ์์ด๋ฏ๋ก, ๋ฌธ์ ๋จ์์ ์ธ์ฝ๋ฉ๋ ๊ธธ์ด๋ ๋ฐ์ดํธ ๋จ์์ ๊ธธ์ด์ ๊ฐ์ต๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Base64๋ ์ ํญ์ ๋ ์ปค์ง๋์? 6๋นํธ ๋ฐ์ดํฐ๋ฅผ 8๋นํธ์ง๋ฆฌ ASCII ๋ฌธ์ ํ๋๋ก ํํํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ด 25% ๋จ์ด์ง๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฝ 33% ๋ ๋ง์ ๋ฐ์ดํธ๊ฐ ์๊น๋๋ค.
์ค๋ฐ๊ฟ(line break)๋ ํฌํจ๋๋์? ์๋์. ์ผ๋ถ MIME ์ธ์ฝ๋๋ 76์๋ง๋ค ์ค๋ฐ๊ฟ์ ๋ฃ์ด ์์ฃผ ์ฝ๊ฐ์ ์ฉ๋์ด ์ถ๊ฐ๋์ง๋ง, ์ด ๋๊ตฌ๋ ์์ํ ์ธ์ฝ๋ฉ ํฌ๊ธฐ๋ง ๊ณ์ฐํฉ๋๋ค.
data URI๋ ์ด๋ค๊ฐ์? data URI์๋ data:image/png;base64, ๊ฐ์ ์ ๋์ฌ๊ฐ ์ถ๊ฐ๋ก ๋ถ์ต๋๋ค. ์ ์ฒด URI ๊ธธ์ด๋ฅผ ์๊ณ ์ถ๋ค๋ฉด ์ด ์ ๋์ฌ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ธ์ฝ๋ฉ ํฌ๊ธฐ์ ๋ํ๋ฉด ๋ฉ๋๋ค.