๐Ÿ”

Base64 ์ธ์ฝ”๋”ฉ / ๋””์ฝ”๋”ฉ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Q: Base64 ์ธ์ฝ”๋”ฉ์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ ์–ด๋–ค ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋‚˜์š”?

A: Base64๋Š” 64๊ฐœ์˜ ๋ฌธ์ž(A-Z, a-z, 0-9, +, /)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ASCII ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ด์ง„-ํ…์ŠคํŠธ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ HTTP, SMTP์™€ ๊ฐ™์€ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ์ด๋‚˜ JSON ํŽ˜์ด๋กœ๋“œ๋ฅผ ํ†ตํ•ด ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋กœ๋Š” MIME์„ ํ†ตํ•œ ์ด๋ฉ”์ผ ์ฒจ๋ถ€ ํŒŒ์ผ, ๋ฐ์ดํ„ฐ URL๋กœ HTML ๋ฐ CSS์— ์ด๋ฏธ์ง€ ์ž„๋ฒ ๋”ฉ, JSON Web Token(JWT)์˜ ํŽ˜์ด๋กœ๋“œ ์ธ์ฝ”๋”ฉ, ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ด์— ์ด์ง„ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Q: Base64๋Š” ์•”ํ˜ธํ™”์ธ๊ฐ€์š”? ์•ˆ์ „ํ•œ๊ฐ€์š”?

A: ์•„๋‹™๋‹ˆ๋‹ค. Base64๋Š” ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์ด์ง€ ์•”ํ˜ธํ™”๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฌธ์ž์—ด์€ ๋ˆ„๊ตฌ๋“ ์ง€ ํ‚ค, ๋น„๋ฐ€๋ฒˆํ˜ธ, ๋น„๋ฐ€ ์ •๋ณด ์—†์ด๋„ ์ฆ‰์‹œ ์›๋ž˜ ๋ฐ์ดํ„ฐ๋กœ ๋””์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ฐ€์„ฑ, ๋ฌด๊ฒฐ์„ฑ, ์ธ์ฆ ๊ธฐ๋Šฅ์„ ์ „ํ˜€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์˜์–ด๋ฅผ ๋ชจ์Šค ๋ถ€ํ˜ธ๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋จผ์ € ์ ์ ˆํ•œ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜(์˜ˆ: AES)์„ ์‚ฌ์šฉํ•œ ํ›„, ์„ ํƒ์ ์œผ๋กœ ์•”ํ˜ธํ™”๋œ ๋ฐ”์ดํŠธ๋ฅผ Base64๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q: Base64๊ฐ€ ๋•Œ๋•Œ๋กœ = ๋˜๋Š” == ๊ธฐํ˜ธ๋กœ ๋๋‚˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

A: = ๋ฌธ์ž๋Š” ํŒจ๋”ฉ์ž…๋‹ˆ๋‹ค. Base64๋Š” ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ 3๋ฐ”์ดํŠธ(24๋น„ํŠธ) ๊ทธ๋ฃน์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ทธ๋ฃน๋‹น 4๊ฐœ์˜ Base64 ๋ฌธ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ ๊ธธ์ด๊ฐ€ 3๋ฐ”์ดํŠธ์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ, ์ธ์ฝ”๋”ฉ ๊ฒฐ๊ณผ์— ํŒจ๋”ฉ = ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ถœ๋ ฅ์ด 4์ž์˜ ๋ฐฐ์ˆ˜๊ฐ€ ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. 2๋ฐ”์ดํŠธ๊ฐ€ ๋‚จ์œผ๋ฉด = ํ•˜๋‚˜๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ , 1๋ฐ”์ดํŠธ๋งŒ ๋‚จ์œผ๋ฉด = ๋‘ ๊ฐœ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "Man"(3๋ฐ”์ดํŠธ)์€ ํŒจ๋”ฉ ์—†์ด "TWFu"๋กœ ์ธ์ฝ”๋”ฉ๋˜์ง€๋งŒ, "Ma"(2๋ฐ”์ดํŠธ)๋Š” "TWE="๋กœ, "M"(1๋ฐ”์ดํŠธ)์€ "TQ=="๋กœ ์ธ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค.

Q: Base64๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋” ํฌ๊ฒŒ ๋งŒ๋“ค๊นŒ์š”? ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋‚˜์š”?

A: ๋„ค, Base64 ์ธ์ฝ”๋”ฉ์€ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ์•ฝ 33% ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. 3๋ฐ”์ดํŠธ์˜ ์ด์ง„ ์ž…๋ ฅ๋งˆ๋‹ค 4๋ฐ”์ดํŠธ์˜ ์ถœ๋ ฅ์ด ์ƒ์„ฑ๋˜๋ฉฐ, ์—ฌ๊ธฐ์— ์„ ํƒ์  ํŒจ๋”ฉ์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 3MB ์ด์ง„ ํŒŒ์ผ์€ Base64๋กœ ์ธ์ฝ”๋”ฉํ•˜๋ฉด ์•ฝ 4MB๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ…์ŠคํŠธ ์ „์šฉ ์ฑ„๋„์„ ํ†ตํ•ด ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋Œ€๊ฐ€์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ด์ง„-ํ…์ŠคํŠธ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹๊ณผ ๋น„๊ตํ•˜๋ฉด Base64๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 16์ง„์ˆ˜ ์ธ์ฝ”๋”ฉ์€ 100%์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Q: ํ‘œ์ค€ Base64์™€ Base64url์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

A: ํ‘œ์ค€ Base64๋Š” ์•ŒํŒŒ๋ฒณ์— +์™€ /๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  =๋ฅผ ํŒจ๋”ฉ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Base64url(URL ์•ˆ์ „ Base64)์€ +๋ฅผ -๋กœ, /๋ฅผ _๋กœ ๋Œ€์ฒดํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ํŒจ๋”ฉ์„ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด Base64url์€ ์ถ”๊ฐ€์ ์ธ ํผ์„ผํŠธ ์ธ์ฝ”๋”ฉ ์—†์ด URL, ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜, ํŒŒ์ผ ์ด๋ฆ„์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Base64url์€ RFC 4648์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ JSON Web Token(JWT), OAuth ํ† ํฐ, ์›น API์—์„œ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ‘œ์ค€ Base64 ๋ฌธ์ž์—ด Pj4+Pz8/Pw==๋Š” Base64url์—์„œ Pj4-Pz8_Pw๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

Q: Base64 ๋ฐ์ดํ„ฐ URL์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ HTML๊ณผ CSS์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋‚˜์š”?

A: ๋ฐ์ดํ„ฐ URL์€ ์›น ๋ฌธ์„œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ž„๋ฒ ๋”ฉํ•˜๋Š” URI ์Šคํ‚ด์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ ํ˜•์‹์€ data:image/png;base64,iVBORw0KGgo...์ž…๋‹ˆ๋‹ค. HTML <img> ํƒœ๊ทธ์™€ CSS background-image ์†์„ฑ์—์„œ ํŒŒ์ผ URL ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ URL์€ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•œ ๋ณ„๋„์˜ HTTP ์š”์ฒญ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ž‘์€ ์• ์…‹(์ผ๋ฐ˜์ ์œผ๋กœ 10KB ๋ฏธ๋งŒ)์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ HTML/CSS ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์•ฝ 33% ์ฆ๊ฐ€ํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์บ์‹œํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Q: ๋ชจ๋“  ํŒŒ์ผ์„ Base64๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

A: ๋„ค โ€” ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€, ์˜ค๋””์˜ค, ๋น„๋””์˜ค, PDF, ์••์ถ• ์•„์นด์ด๋ธŒ ๋“ฑ ๋ชจ๋“  ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ Base64๋กœ ์ธ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์˜ ์›์‹œ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ๊ณ  Base64 ์ธ์ฝ”๋”ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. Base64 ๋ฌธ์ž์—ด์„ ๋””์ฝ”๋”ฉํ•˜๋ฉด ์ •ํ™•ํžˆ ์›๋ž˜ ๋ฐ”์ดํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด๋ฉ”์ผ ์ฒจ๋ถ€ ํŒŒ์ผ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด์ง„ ํŒŒ์ผ์ด SMTP๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๊ธฐ ์ „์— Base64๋กœ ์ธ์ฝ”๋”ฉ๋˜๊ณ , ์ˆ˜์‹  ์ธก์—์„œ ์›๋ž˜ ํŒŒ์ผ๋กœ ๋‹ค์‹œ ๋””์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค.

Q: JavaScript์—์„œ Base64๋ฅผ ์ธ์ฝ”๋”ฉํ•  ๋•Œ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž(์ด๋ชจ์ง€๋‚˜ ํ•œ์ž ๋“ฑ)๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋‚˜์š”?

A: ๋‚ด์žฅ btoa() ํ•จ์ˆ˜๋Š” Latin-1 ๋ฌธ์ž(๋‹จ์ผ ๋ฐ”์ดํŠธ ๋ฌธ์ž)๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ชจ์ง€, ํ•œ์ž ๋˜๋Š” ๊ธฐํƒ€ ๋ฉ€ํ‹ฐ๋ฐ”์ดํŠธ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์—ด์˜ ๊ฒฝ์šฐ, TextEncoder API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋จผ์ € ๋ฐ”์ดํŠธ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

function unicodeToBase64(str) {
  const bytes = new TextEncoder().encode(str);
  const binaryString = String.fromCharCode(...bytes);
  return btoa(binaryString);
}

function base64ToUnicode(base64) {
  const binaryString = atob(base64);
  const bytes = Uint8Array.from(binaryString, c => c.charCodeAt(0));
  return new TextDecoder().decode(bytes);
}

Node.js์—์„œ๋Š” Buffer ํด๋ž˜์Šค๊ฐ€ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค: Buffer.from('Hello ไฝ ๅฅฝ ๐Ÿš€').toString('base64')๋Š” ํŠน๋ณ„ํ•œ ์ฒ˜๋ฆฌ ์—†์ด๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Base64 ์ธ์ฝ”๋”ฉ / ๋””์ฝ”๋”ฉ FAQ - CoolTool