์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ ์
- ๋คํธ์ํฌdmz
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- Java
- dmz๋คํธ์ํฌ
- ์นํผ๋ธ๋ฆฌ์ฑ
- html
- ๊ฐ๋ฐ
- ํ์ด์ฌ
- ํ๋ก๊ทธ๋๋ฐ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- Python
- JavaScript
- ์ค๋ผํด
- ์ค๋ธ์
- ์ ๋ฆฌํธ๋ฆฌํธ
- ์ฑ
- dmz๊ตฌ์ฑ
- ๋ฐฉํ๋ฒฝdmz
- ๋๊ฐ
- css
- database
- ์ฝ๋ฉ
- ํ์ฒ์ ๋ฆฌํธ๋ฆฌํธ
- ์ํ
- ์๋ฐ
- ๋ฐฐ์์ ๋ฐฐ์
- ์นดํ๋๊ฐ
- dmz๋
- Today
- Total
JiYoung Dev ๐ฅ
Base64 Encoding vs Base64UrlSafe vs FormData ๋ณธ๋ฌธ
์ด์ํ๊ฒฝ์ ์ ์ฉ๋ ์๋ฃจ์ ์ค Rest API๋ฅผ ํตํด ๋ฑ๋ก๊ณผ ์กฐํ๋ฅผ ์งํํ๋ ๋ก์ง์์ ๋ฑ๋ก์ ์ ์์ ์ผ๋ก ์งํ๋์ง๋ง, ๋ฑ๋ก๋ ์ ๋ณด๋ก ์กฐํ ์ ์กฐํ๊ฐ ์๋๋ ํ์์ด ๋ฐ์ํ์๋ค.
ํ์ธ ๊ฒฐ๊ณผ, ์ฐ๊ณ ์๋น์ค์์ ์ฐ๋ฆฌ ์๋ฃจ์ ์ RestAPI ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ผ ๋ URL์ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ ๋ณด๋ด๊ฒ ๋๋๋ฐ ์ด ๋ user์ id๋ฅผ Base64 ์ธ์ฝ๋ฉํ์ฌ ๋ณด๋ด๋ ๊ฒฐ๊ณผ, Base64 ์ธ์ฝ๋ฉ์ ํฌํจ๋๋ ๋ฌธ์์ด ์ค + ๋ฌธ์์ด์ด URL์์ ์ฌ์ฉํ ๊ฒฝ์ฐ Space๋ก ์ธ์๋๊ธฐ ๋๋ฌธ์ ์ ์์ ์ธ ์กฐํ๊ฐ ์งํ๋์ง ์์๋ค.
ํด๋น ๋ฌธ์ ์ ๊ด๋ จํ์ฌ ์ด๋ฒ์๋ Base64์ ๊ด๋ จ๋ ํฌ์คํ ์ ์งํํด ๋ณด์๋ค.
๐ Base64 Encoding
Base64 ์ธ์ฝ๋ฉ์ด๋ ์ด์ง(binary) ๋ฐ์ดํฐ๋ฅผ 6bit์ฉ ์๋ผ์ 64๊ฐ์ ๋ฌธ์(์์คํค์ฝ๋)๋ก ๋งคํํ๋ ๊ฒ์ ๋งํ๋ค. Base64๋ 6bit๋น 2bit์ OverHead ๋ฐ์์ผ๋ก ๊ธฐ์กด ๋ฐ์ดํฐ๋ณด๋ค 30% ์ด์ ๊ธธ์ด์ง๊ฒ ๋๋ค.
โ Base64 Encoding ์๋ฆฌ
์๋ฅผ ๋ค์ด apple ์ด๋ผ๋ ๋จ์ด๋ฅผ Base64 Encoding์ ํด๋ณด์.
์์คํค์ฝ๋ํ์์ a๋ ์ด์ง์๋ก 01100001, p๋ 01110000, l์ 01101100, e๋ 01100101์ด๋ค.
์์ ์ด์ง์๋ฅผ ๋ชจ๋ ์ฐ๊ฒฐํ๋ฉด 0110000101110000011100000110110001100101์ด ๋๋ค.
์ด ์ด์ง์๋ฅผ 6bit ๋จ์๋ก ๋๋๋ฉด
011000 | 010111 | 000001 | 110000 | 011011 | 000110 | 010100 | |
24 | 23 | 1 | 48 | 27 | 6 | 20 | padding |
Y | X | B | w | b | G | U | = |
์์ ๊ฐ์ด ๋ฐ๋๊ณ , ๊ฐ 6bit๋ก ๋๋ ์ด์ง์๋ฅผ ์ญ์ง์๋ก ๋ณํํ ํ Base64 ์์ธํ์ ๋ฐ๋ผ ๋ฌธ์์ด๋ก ๋ณํํ๋ฉด YXBwbGU=์ด ๋๋ค.
โ Base64 Encoding์ ์ฌ์ฉํ๋ ์ด์
์ด๋ ๊ฒ Base64 ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ด์ ๋ ํต์ ๊ณผ์ ์์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ์ ์์ค์ ๋ง๊ธฐ ์ํจ์ด๋ค.
ํ๋ซํผ ๋ ๋ฆฝ์ ์ผ๋ก Binary Data(์ด๋ฏธ์ง๋ ์ค๋์ค)๋ฅผ ์ ์กํ ํ์๊ฐ ์์ ๋, ASCII๋ก Encodingํ์ฌ ์ ์กํ๊ฒ ๋๋ฉด ์๋์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ASCII๋ 7bits Encoding์ธ๋ฐ ๋๋จธ์ง 1bit๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด ์์คํ ๋ณ๋ก ์์ดํ๋ค.
- ์ผ๋ถ ์ ์ด ๋ฌธ์์ ๊ฒฝ์ฐ ์์คํ ๋ณ๋ก ๋ค๋ฅธ ์ฝ๋๊ฐ์ ๊ฐ์ง๋ค.
์์ ๊ฐ์ ๋ฌธ์ ๋ก ASCII๋ ์์คํ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ์ ์์ ํ์ง ์๋ค. Base64๋ ASCII ๋ฌธ์์ด ์ค ์ ์ด ๋ฌธ์์ ์ผ๋ถ ํน์๋ฌธ์๋ฅผ ์ ์ธํ 64๊ฐ์ ์์ ํ ์ถ๋ ฅ ๋ฌธ์๋ง ์ฌ์ฉํ์ฌ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๊ฐ ์์คํ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ผํ๊ฒ ์ ์ก ๋๋ ์ ์ฅ๋๋ ๊ฑธ ๋ณด์ฅํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
๐ Base64UrlSafe
์ฐ๋ฆฌ ์๋ฃจ์ ๊ณผ ์ฐ๊ณ๋ ์๋ฒ์์ user_id๋ฅผ Base64๋ก ์ธ์ฝ๋ฉํ์ฌ ์ ์ฅํ ๋๋ ๋ฌธ์ ๊ฐ ์๋ค. ์๋ํ๋ฉด ์ ์ฅํ๋ ๋ก์ง์ ๊ฒฝ์ฐ POST ๋ฉ์๋๋ก request body ๋ด์ user_id ๊ฐ์ด ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ +, /๊ณผ ๊ฐ์ ๋ฌธ์๊ฐ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
๊ทธ๋ฌ๋ Base64๋ก ์ธ์ฝ๋ฉํ ๋ฐ์ดํฐ๋ฅผ URL Param์ ํตํด ๋ณด๋ด๊ฒ ๋๋ค๋ฉด, +, / ๋ฌธ์์ด์ ์ธ์ํ๋๋ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
URL์์ +๋ ๋์ด์ฐ๊ธฐ๋ฅผ ์๋ฏธํ๋ฉฐ, /๋ ๊ฒฝ๋ก๊ตฌ๋ถ์ ๊ธฐํธ๋ก ์ธ์ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ Base64UrlSafe๋ URL์์ ์ฌ์ฉํ๋ ์์ฝ ๊ธฐํธ๋ค์ ์ ์์ ์ผ๋ก ์ ์กํ๊ธฐ ์ํด +, /๋ฅผ -, _๋ก ๋์ฒดํ์ฌ URL์์๋ Base64 ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ ๊ฒ์ด๋ค.
MEMO
์ค์ ๋ก ์ด์ ํ๊ฒฝ์์๋ /๋ ์ธ์์ด ๋๊ณ =๋ง ๊ณต๋ฐฑ์ผ๋ก ๋ค์ด์๋๋ฐ, ๊ทธ ์ด์ ๋ param์ value๊ฐ์ผ๋ก ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ํน๋ณํ ์ฒ๋ฆฌ๊ฐ ์์ด๋ ๋ฌธ์์ด์ ์ผ๋ถ๋ก ์ธ์๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
Base64UrlSafe๊ฐ ์๋ ์ผ๋ฐ Base64์์ URL์ ํตํด + ํน์ / ๊ธฐํธ๋ฅผ ๋ณด๋ด๊ณ ์ถ์ ๋๋ URL ์ธ์ฝ๋ฉ ํ์ ๊ฐ์ผ๋ก ๋์ฒดํ์ฌ ์ ์กํ๋ฉด ๋๋ค.
๐ Base64 vs ForData
์ด์ ์ ์ฌ๋ฆฐ React ๊ด๋ จ ํฌ์คํ ์์ binary ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ Form Data๋ฅผ ์ด์ฉํ์ฌ ์ ์กํ๋๋ฐ Base64๋ก ์ธ์ฝ๋ฉํ์ฌ ์ ์กํ๋ ๊ฒ๊ณผ ๋ฌด์จ ์ฐจ์ด๊ฐ ์๋์ง ๊ถ๊ธํด์ก๋ค.
- ๋ฐ์ดํฐ ํ์
- Base64 ์ธ์ฝ๋ฉ์ Binary ๋ฐ์ดํฐ๋ฅผ ํ ์คํธ ํํ๋ก ๋ณํ
- FormData๋ Binary ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ ์ก
- ์ฉ๋
- Base64 ์ธ์ฝ๋ฉ์ ๋ฐ์ดํฐ์ ์ฉ๋์ ์ฆ๊ฐ์ํด(์ฝ 33%)
- FormData๋ Binary ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์ ์กํ์ฌ ์ฉ๋ ์ฆ๊ฐ ์์
- ์ง์ ๋ฒ์
- Base64 ์ธ์ฝ๋ฉ์ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํ๋ซํผ์์ ์ง์
- FormData๋ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์ฃผ๋ก ์ฌ์ฉ. Node.js์ ๊ฐ์ ์๋ฒ์ฌ์ด๋ ํ๊ฒฝ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ → ์ฃผ๋ก ๋ธ๋ผ์ฐ์ API์ ์ต์ ํ
- ์ฌ์ฉ ์ฉ๋
- Base64 ์ธ์ฝ๋ฉ์ ํ ์คํธ ๋ฐ์ดํฐ์ ํจ๊ป ์ ์กํ ๋ ์ ์ฉํ๋ฉฐ, ์ด๋ฏธ์ง๋ ํ์ผ ๋ฐ์ดํฐ๋ฅผ ํ ์คํธ ํํ๋ก ์ ์กํ ๋ ์ฃผ๋ก ์ฌ์ฉ
- FormData๋ ํ์ผ ์ ๋ก๋๋ multipart ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ ์ฉํ๋ฉฐ, ์๋ฒ์์ ์ํธ์์ฉ์์ ์ฃผ๋ก ์ฌ์ฉ
- ๋ณด์
- Base64๋ ๋ฐ์ดํฐ๋ฅผ ํ ์คํธ๋ก ๋ณํํด ๋ค๋ฅธ ์์คํ ์์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํ์ง๋ง, ๋ฐ์ดํฐ๊ฐ ์ฝ๊ฒ ๋์ฝ๋ฉ๋ ์ ์์ผ๋ฏ๋ก ๋ฏผ๊ฐํ ์ ๋ณด์๋ ์ ํฉํ์ง ์์
- FormData๋ HTTPS๋ฅผ ํตํ ์ํธํ ํ์
๋ฆฌ์กํธ์์ ์ ๋ก๋ํ ํ์ผ์ ์๋ฒ๋ก ์ ์กํ๊ธฐ ์ํด์๋ FormData๋ฅผ ์ฐ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๊ณ , ์๋ฒ์์ DB์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋์๋ Base64๋ก ์ธ์ฝ๋ฉํ์ฌ ํ ์คํธ๋ก ์ ์ฅํ๋ ๊ฒ์ด ์ ๋ฆฌํ๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
https://warpgate3.tistory.com/entry/Base64-Encoding
https://namu.wiki/w/URL escape code