Base64๋ ๋ฌด์์ธ๊ฐ์? ์ด๋ณด์๋ฅผ ์ํ ์๋ฒฝ ๊ฐ์ด๋
Base64 ์ธ์ฝ๋ฉ์ด๋?
Base64๋ 64์ ์ํ๋ฒณ์ ์ฌ์ฉํ์ฌ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ASCII ๋ฌธ์์ด ํ์์ผ๋ก ๋ํ๋ด๋ ์ด์ง-ํ ์คํธ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ๋๋ค. ์๋ MIME(Multipurpose Internet Mail Extensions)์ ํตํ ์ด๋ฉ์ผ ์ฒจ๋ถ ํ์ผ์ ์ํด ์ค๊ณ๋์์ผ๋ฉฐ, ์น์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ ์ค ํ๋๋ก ๋จ์ ์์ต๋๋ค.
์ด๋ฏธ์ง, ํ์ผ, ์์ถ๋ ๋ฐ์ดํธ์ ๊ฐ์ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ํ ์คํธ์ฉ์ผ๋ก ๊ตฌ์ถ๋ ์ฑ๋์ ํตํด ์ ์กํด์ผ ํ ๋, Base64๊ฐ ๊ฐ์ฅ ์ ํฉํ ์๋ฃจ์ ์ ๋๋ค. ์์์ ๋ฐ์ดํธ๋ฅผ ๊ฐ์ ธ์ ๋ฌธ์, ์ซ์ ๋ฐ ๋ช ๊ฐ์ ํน์ ๋ฌธ์๋ก ๊ตฌ์ฑ๋ ์์ ํ๊ณ ์ด์ ๊ฐ๋ฅํ ๋ฌธ์์ด๋ก ๋ณํํฉ๋๋ค.
Base64์ ์๋ ๋ฐฉ์
Base64๋ ์ด์ง ๋ฐ์ดํฐ๋ฅผ 3๋ฐ์ดํธ(24๋นํธ) ๊ทธ๋ฃน์ผ๋ก ์ฒ๋ฆฌํ๊ณ ๊ฐ ๊ทธ๋ฃน์ 4๊ฐ์ Base64 ๋ฌธ์๋ก ๋ณํํ๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. "Base64"๋ผ๋ ์ด๋ฆ์ ์ธ์ฝ๋ฉ ์ํ๋ฒณ์ด 64๊ฐ์ ์๋ก ๋ค๋ฅธ ๋ฌธ์(A-Z, a-z, 0-9, +, /)๋ฅผ ์ฌ์ฉํ๋ค๋ ์ฌ์ค์์ ์ ๋ํ์ต๋๋ค.
์ธ์ฝ๋ฉ ์๊ณ ๋ฆฌ์ฆ ๋จ๊ณ๋ณ ์ค๋ช
- ์ ๋ ฅ ๋ฐ์ดํฐ์ 3๋ฐ์ดํธ(24๋นํธ)๋ฅผ ๊ฐ์ ธ์ต๋๋ค
- ์ด๋ฅผ 4๊ฐ์ 6๋นํธ ๊ทธ๋ฃน์ผ๋ก ๋ถํ ํฉ๋๋ค
- ๊ฐ 6๋นํธ ๊ฐ(0-63)์ Base64 ์ํ๋ฒณ ํ ์ด๋ธ์ ๋งคํํฉ๋๋ค
- ์
๋ ฅ ๊ธธ์ด๊ฐ 3์ผ๋ก ๋๋์ด ๋จ์ด์ง์ง ์์ผ๋ฉด ํจ๋ฉ(
=)์ ์ถ๊ฐํฉ๋๋ค
๋ค์์ ๊ตฌ์ฒด์ ์ธ ์์ ์
๋๋ค. ๋ฌธ์์ด "Man"์ ๋ค์๊ณผ ๊ฐ์ด ์ธ์ฝ๋ฉ๋ฉ๋๋ค:
M(ASCII 77) =01001101a(ASCII 97) =01100001n(ASCII 110) =01101110
๊ฒฐํฉ: 01001101 01100001 01101110 โ 6๋นํธ ๊ทธ๋ฃน์ผ๋ก ๋ถํ :
010011= 19 โT010110= 22 โW000101= 5 โF101110= 46 โu
๋ฐ๋ผ์ "Man"์ "TWFu"๊ฐ ๋ฉ๋๋ค.
ํจ๋ฉ์ด๋?
์
๋ ฅ ๊ธธ์ด๊ฐ 3๋ฐ์ดํธ์ ๋ฐฐ์๊ฐ ์๋ ๊ฒฝ์ฐ, Base64๋ ์ถ๋ ฅ์ด 4์์ ๋ฐฐ์๊ฐ ๋๋๋ก ํจ๋ฉ ๋ฌธ์(=)๋ฅผ ์ถ๊ฐํฉ๋๋ค:
- 1๋ฐ์ดํธ ์
๋ ฅ โ 2๊ฐ์ Base64 ๋ฌธ์ + 2๊ฐ์ ํจ๋ฉ ๋ฌธ์ (
==) - 2๋ฐ์ดํธ ์
๋ ฅ โ 3๊ฐ์ Base64 ๋ฌธ์ + 1๊ฐ์ ํจ๋ฉ ๋ฌธ์ (
=)
์๋ฅผ ๋ค์ด, "M"์ ํด๋นํ๋ ๋จ์ผ ๋ฐ์ดํธ๋ TQ==๋ก ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
Base64 ์ํ๋ฒณ ํ ์ด๋ธ
| ๊ฐ | ๋ฌธ์ | ๊ฐ | ๋ฌธ์ | ๊ฐ | ๋ฌธ์ | ๊ฐ | ๋ฌธ์ | |-------|------|-------|------|-------|------|-------|------| | 0 | A | 16 | Q | 32 | g | 48 | w | | 1 | B | 17 | R | 33 | h | 49 | x | | 2 | C | 18 | S | 34 | i | 50 | y | | 3 | D | 19 | T | 35 | j | 51 | z | | 4 | E | 20 | U | 36 | k | 52 | 0 | | 5 | F | 21 | V | 37 | l | 53 | 1 | | 6 | G | 22 | W | 38 | m | 54 | 2 | | 7 | H | 23 | X | 39 | n | 55 | 3 | | 8 | I | 24 | Y | 40 | o | 56 | 4 | | 9 | J | 25 | Z | 41 | p | 57 | 5 | | 10 | K | 26 | a | 42 | q | 58 | 6 | | 11 | L | 27 | b | 43 | r | 59 | 7 | | 12 | M | 28 | c | 44 | s | 60 | 8 | | 13 | N | 29 | d | 45 | t | 61 | 9 | | 14 | O | 30 | e | 46 | u | 62 | + | | 15 | P | 31 | f | 47 | v | 63 | / |
Base64 ์ธ์ฝ๋ฉ์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก
์ด๋ฉ์ผ ์ฒจ๋ถ ํ์ผ (MIME)
Base64๋ MIME(Multipurpose Internet Mail Extensions)์ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. SMTP์ ๊ฐ์ ์ด๋ฉ์ผ ํ๋กํ ์ฝ์ 7๋นํธ ASCII ํ ์คํธ์ฉ์ผ๋ก ์ค๊ณ๋์์ผ๋ฏ๋ก, PDF, ์ด๋ฏธ์ง, ZIP ํ์ผ๊ณผ ๊ฐ์ ์ด์ง ์ฒจ๋ถ ํ์ผ์ ์ด๋ฉ์ผ๋ก ์ ์ก๋๊ธฐ ์ ์ Base64๋ก ์ธ์ฝ๋ฉ๋์ด์ผ ํฉ๋๋ค.
HTML ๋ฐ CSS์ ๋ฐ์ดํฐ URL
Base64๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ URL์ ํตํด ์ด๋ฏธ์ง, ๊ธ๊ผด ๋ฐ ๊ธฐํ ๋ฏธ๋์ด๋ฅผ HTML ๋๋ CSS ํ์ผ์ ์ง์ ์๋ฒ ๋ฉํ ์ ์์ต๋๋ค:
<img src="data:image/png;base64,iVBORw0KGgo..." alt="Embedded Image" />
์ด๋ ๊ฒ ํ๋ฉด ์ถ๊ฐ HTTP ์์ฒญ์ด ํ์ ์์ด์ ธ ์์ ์ ์ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
JSON Web Token (JWT)
JWT๋ URL ์์ ๋ณํ์ธ Base64(Base64url)๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ํ ํฐ์ ํค๋, ํ์ด๋ก๋ ๋ฐ ์๋ช
์ ์ธ์ฝ๋ฉํฉ๋๋ค. ์ด๊ฒ์ด ์ธ์ฆ ์์คํ
์์ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9์ ๊ฐ์ ๋ฌธ์์ด์ ๋ณด๊ฒ ๋๋ ์ด์ ์
๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด์ง ๋ฐ์ดํฐ ์ ์ฅ
๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์คํธ ์ ์ฅ์ ์ต์ ํ๋์ด ์์ผ๋ฉฐ ์์ ๋ฐ์ดํธ๋ฅผ ์ ๋๋ก ์ฒ๋ฆฌํ์ง ๋ชปํ ์ ์์ต๋๋ค. ์ด์ง ๋ฐ์ดํฐ๋ฅผ Base64๋ก ์ธ์ฝ๋ฉํ๋ฉด ์ด๋ฏธ์ง, ์ง๋ ฌํ๋ ๊ฐ์ฒด ๋๋ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ํ ์คํธ ์ด์ ์ ์ฅํ ์ ์์ต๋๋ค.
API ํ์ด๋ก๋
REST ๋๋ GraphQL API๋ฅผ ํตํด ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋, ํนํ JSON ํ์์์๋ Base64๊ฐ ํ์ค ์ ํ์ ๋๋ค. JSON์ ์์ ๋ฐ์ดํธ๋ฅผ ๋ค์ดํฐ๋ธํ๊ฒ ํํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
Base64๋ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํค๋์?
๋ค. Base64 ์ธ์ฝ๋ฉ์ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์ฝ 33% ์ฆ๊ฐ์ํต๋๋ค. 3๋ฐ์ดํธ์ ์ ๋ ฅ๋ง๋ค 4๋ฐ์ดํธ์ ์ถ๋ ฅ์ด ์์ฑ๋ฉ๋๋ค. ์ด ์ค๋ฒํค๋๋ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ํ ์คํธ ์ ์ฉ ์ฑ๋์ ํตํด ์ ์ก ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๋๊ฐ์ ๋๋ค.
Base64๋ ์ํธํ์ธ๊ฐ์?
์๋๋๋ค. ์ด๋ ํํ ์คํด์ ๋๋ค. Base64๋ ์ธ์ฝ๋ฉ ๋ฐฉ์์ด์ง ์ํธํ๊ฐ ์๋๋๋ค. Base64 ๋ฌธ์์ด์ ๋ฐ์ ์ฌ๋์ ๋๊ตฌ๋ ์ง ํค ์์ด๋ ์๋ ๋ฐ์ดํฐ๋ก ๋์ฝ๋ฉํ ์ ์์ต๋๋ค. ์ด๋ ํ ๋ณด์์ด๋ ๊ธฐ๋ฐ์ฑ๋ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํด์ผ ํ๋ค๋ฉด ์ํธํ(์: AES)๋ฅผ ์ฌ์ฉํ ํ, ์ ํ์ ์ผ๋ก ์ํธํ๋ ๋ฐ์ดํธ๋ฅผ Base64๋ก ์ธ์ฝ๋ฉํ์ฌ ์ ์กํ์ธ์.
Base64 vs ๊ธฐํ ์ด์ง-ํ ์คํธ ์ธ์ฝ๋ฉ
| ์ธ์ฝ๋ฉ | ์ํ๋ฒณ ํฌ๊ธฐ | ์ค๋ฒํค๋ | ๊ฐ์ฅ ์ ํฉํ ์ฉ๋ | |----------|--------------|----------|----------| | Base64 | 64์ | ~33% | ๋ฐ์ดํฐ ์ ์ก ๋ฐ ์๋ฒ ๋ฉ | | Base32 | 32์ | ~60% | ์ฌ๋์ด ์ฝ์ ์ ์๊ณ ๋์๋ฌธ์ ๊ตฌ๋ถ์ด ์๋ ์ปจํ ์คํธ | | Base16 (Hex) | 16์ | 100% | ๋๋ฒ๊น , ๋ฉ๋ชจ๋ฆฌ ๋คํ, ์์ ์ฝ๋ | | Ascii85 | 85์ | ~25% | Adobe PostScript, PDF ์คํธ๋ฆผ |
Base64๋ ๊ณต๊ฐ ํจ์จ์ฑ๊ณผ ๊ด๋ฒ์ํ ํธํ์ฑ ์ฌ์ด์ ๊ท ํ ์กํ ์ ์ถฉ์์ ์ ๊ณตํ์ฌ, ์น์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์ด์ง-ํ ์คํธ ์ธ์ฝ๋ฉ์ด ๋์์ต๋๋ค.
์จ๋ผ์ธ์ผ๋ก Base64 ์ธ์ฝ๋ฉ ์ฒดํํ๊ธฐ
์ง์ ๋ฐ์ดํฐ๋ฅผ ์ธ์ฝ๋ฉํ ์ค๋น๊ฐ ๋์ จ๋์? ๋ฌด๋ฃ ์จ๋ผ์ธ Base64 ์ธ์ฝ๋ ๋ฐ ๋์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ํ ์คํธ๋ ํ์ผ์ ์ฆ์ ๋ณํํ์ธ์. ์ค์น๋ ๊ฐ์ ์ด ํ์ํ์ง ์์ต๋๋ค.