๐ ํด๋น ํฌ์คํ ์ ๊ฐ์ธ์ ์ผ๋ก ๊ตฌ๋ ํ๊ณ ์๋ ๋๋ํ ๊ฐ๋ฐ์๋์ ๋ฌด๋ฃ ์ ํฌ๋ธ ๊ฐ์์ธ ๋ฌธ์์ด ์ธ์ฝ๋ฉ๊ณผ base64 ์ธ์ฝ๋ฉ ์์์ ๋ณด๊ณ ๊ฐ์ธ์ ์ธ ๋ชฉ์ ํ์ ์์ฑ๋๋ ๊ธ์ ๋๋ค. ํฌ์คํ ์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์๋ฃ๋ ์ ๊ฐ ์ง์ ์ฌ๊ตฌ์ฑํ์์์ ์๋ฆฝ๋๋ค.
์ต๊ทผ์ C ์ธ์ด์ Go ์ธ์ด๋ฅผ ์กฐ๊ธ์ฉ ์ ํ๊ธฐ ์์ํ๋ฉด์ ์ํด๋ก ์ฌ์ฉํด์ค๋ Python ์ธ์ด์ ๋นํด ๋ค๋ฅด๊ฒ ๋๊ปด์ง๋ ์ ์ด ๋ฌด์ํ ๋ง์๋ค. ๊ทธ ์ค์ ํ๋๋ก์ ์ปดํจํฐ๊ฐ ๋ฌธ์ ๋๋ ๋ฌธ์์ด์ ํํํ๋ ๋ฐฉ๋ฒ์ธ ๋ฌธ์์ด ์ธ์ฝ๋ฉ์ ๋ํด์ ํ์คํ ์์๋์ด์ผ ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋ค๋ฅธ ์๋งคํ(?)์ผ๋ก base64 ์ธ์ฝ๋ฉ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ ์ฌ์ฉ๋๋์ง์ ๋ํด์๋ ๊ฐ์ด ๊ณต๋ถํ๋ฉด ์ข๊ฒ ๋ค ์ถ์๋ค.
1. ๋ฌธ์ ์ธ์ฝ๋ฉ์ ์์: ASCII(์์คํค) ์ฝ๋
ํ๋ก๊ทธ๋๋ฐ์ ํด๋ณด๊ฑฐ๋ ์ฝ๋ฉ ํ ์คํธ๋ฅผ ์ค๋นํด ๋ณธ ์ฌ๋์ด๋ผ๋ฉด ASCII ์ฝ๋ ์ฒด๊ณ๋ผ๋ ๊ฒ์ ํ ๋ฒ์ฏค์ ๋ค์ด๋ดค์ ๊ฒ์ด๋ค. ๋ฐ๋ก ์๋์ ๊ฐ์ ํ์ด๋ค.
์ ํ๋ฅผ ๋ณด๋ฉด ์๊ฒ ์ง๋ง ํน์ ์ซ์(10์ง์, 16์ง์, 8์ง์)๊ฐ ์ด๋ค ๋ฌธ์๋ก ๋งคํ๋๋์ง ๋ํ๋ธ ํ์ด๋ค. ์๋ฅผ ๋ค์ด, ์๋ฌธ์ ์ํ๋ฒณ a๋ 10์ง์๋ก 97์ด์ 16์ง์๋ก 61, 8์ง์๋ก๋ 141์ด๋ค. ๋ฐ๊พธ์ด ๋งํด์ 10์ง์ 97์ ์ปดํจํฐ์๊ฒ ๋ฌธ์ a๊ฐ ๋๋ ๊ฒ์ด๋ค.
ASCII ์ฝ๋ํ์ ๋์ด๋ ๊ฐ์๋ฅผ ๋ณด๋ฉด 0๋ถํฐ 127๊น์ง, ์ด 128๊ฐ์ง์์ ๋ณผ ์ ์๋ค. 128์ $2^7$์ด๋ฏ๋ก ๊ฒฐ๊ตญ 7๋นํธ์ธ ์ ์ด๋ค. ๋ค์ ๋งํด์, ASCII ์ฝ๋ํ๋ ๋ฌธ์๋ฅผ 7๋นํธ๋ก ํํํ๋ ๊ฒ์ด๋ค. ์ค์ ์์ 8๋นํธ ์ปดํจํฐ์์๋ ASCII ์ฝ๋ํ๋ฅผ ํ์ฉํด์ ๋ฌธ์๋ฅผ ํํํ๋ค. ์ ๊ทธ๋ฐ๋ฐ ๋ฐฉ๊ธ ASCII ์ฝ๋ํ๊ฐ 7๋นํธ๋ผ๊ณ ํ๋๋ฐ, 8๋นํธ ์ปดํจํฐ์ ์ฐ์ธ๋ค๋ฉด ๋๋จธ์ง 1๋นํธ๋ ์ด๋์ ์ฐ์ด๋ ๊ฑด๊ฐ? ์ถ์ ์ ์๋ค. ๋๋จธ์ง 1๋นํธ๋ ํต์ ์๋ฌ ๊ฒ์ถ์ ํํํ๊ฑฐ๋ ASCII ์ฝ๋ ํ์๋ ์๋ ํน์ ๋ฌธ์๋ฅผ ํํํ๊ธฐ ์ํด ์ฌ์ฉํ๊ธฐ๋ ํ๋ค๊ณ ํ๋ค.(๋๋ฌด์ํค)
์ด ๋, ASCII ์ฝ๋ํ๋ฅผ ์ ๋ณด๋ฉด ๋ชจ๋ ์์ด ์ํ๋ฒณ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฆ, ์์ ํนํ, ์์ด๋ฅผ ๋ชจ๊ตญ์ด๋ก ์ฌ์ฉํ๋ ๊ตญ๊ฐ์ ๋ฌธํ ๊ธฐ์ค์ผ๋ก ๋ง๋ค์ด์ง ์ฒด๊ณ์ธ ์ ์ด๋ค. ๋น์๋ง ํด๋ ์ปดํจํฐ๋ฅผ ์ฐ๊ตฌํ๊ณ ๋ฐ์ ์ํค๊ณ ์๋ ๊ตญ๊ฐ๋ ์์๊ถ์ด์๋ค. ๊ทธ๋์ ์ด ASCII ์ฝ๋ํ๋ ๋ํ๋ฏผ๊ตญ์ด๋ ์ผ๋ณธ, ์ค๊ตญ ๋ฑ๊ณผ ๊ฐ์ด ๋์์์๊ถ ๊ตญ๊ฐ๋ค์ ์ธ์ด ์ฒด๊ณ๋ฅผ ๋ฐ์ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์กฐ์ฐจ ํ์ง ๋ชปํ ๊ฒ์ด๋ค.
2. ๋ค๋ฅธ ๊ตญ๊ฐ์ ์ธ์ด๋ ๋ฐ์ํ์: Unicode
๋ํ๋ฏผ๊ตญ๋ ์ปดํจํฐ์ ์กด์ฌ๋ฅผ ์ ์ง์ ์ผ๋ก ์๊ฒ๋๊ณ ์ฐ๊ตฌ๋ฅผ ์์ํจ์ ๋ฐ๋ผ ํ๊ธ์ ์ปดํจํฐ์ ํํํ๊ธฐ ์ํ ์ฝ๋์ฒด๊ณ๋ฅผ ์๋ฆฝํ๊ธฐ ์ํ ์์ง์์ด ์์๋์๋ค. ์ปดํจํฐ์ ํ๊ธ์ ์ด๋ป๊ฒ ์ธ์ฝ๋ฉ์์ผ ํํํ ์ง์ ๋ํด์ ์ด๊ธฐ์ ์กฐํฉํ๊ณผ ์์ฑํ์ ๋ํ ๋ ผ์์ด ์์๋ค. ์กฐํฉํ๊ณผ ์์ฑํ์ ์ฐจ์ด๊ฐ ๋ฌด์์ผ๊น? ์๋ฅผ ๋ค์ด๋ณด์.
์กฐํฉํ์ ํ๊ธ์ ์์๊ณผ ๋ชจ์ ๊ฐ๊ฐ์ ํ๋์ ์ซ์๋ก ๋งคํํ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, '์ค' ์ด๋ผ๋ ๊ธ์๋ฅผ ์กฐํฉํ์ผ๋ก ํํํ๋ค๋ฉด ใ , ใ , ใน ์ด๋ ๊ฒ ์ด 3๊ฐ์ ๋ฌธ์๋ก ํํํ๊ณ , ๊ฐ๊ฐ์ ํ๋์ ์ซ์๋ก ๋งคํํ๋ ๊ฒ์ด๋ค. ใ ์ ์ซ์ 1๋ก, ใ ๋ ์ซ์ 20์ผ๋ก, ใน์ ์ซ์ 5๋ก ๋งคํํด์ '์ค' ์ด๋ผ๋ ๊ธ์๋ฅผ (1, 20, 5) ๋ผ๋ ์กฐํฉ์ผ๋ก ๋งคํํ๋ ๊ฒ์ด๋ค.(์ฌ๊ธฐ์ 1, 20, 5๋ผ๋ ์ซ์๋ ์์๋ก ์์๋ฅผ ๋ ๊ฒ์ด๋ฉฐ ์ค์ (1, 20, 5)๋ก ๋งคํ๋์ง ์๋๋ค. ์ด๋ ํ ๋ค๋ฅธ ์ซ์๋ก ๋งคํ๋๋ค. ํน์ ๊ถ๊ธํ๋ฉด ์ฐพ์๋ณด๋ ๊ฒ๋ ์ข์ ๋ฏ ํ๋ค)
๋ฐ๋ฉด์, ์์ฑํ์ '์ค' ์ด๋ผ๋ ๊ธ์ ์์ฒด๋ฅผ ํน์ ํ๋์ ์ซ์์ ๋งคํํ๋ ๊ฒ์ด๋ค. ์ฆ, ํ๊ธ์ ๋ชจ๋ ๋ฌธ์๊ฐ ํน์ ํ๋์ ์ซ์๋ก 1:1 ๋งคํ๋๋ ๊ฒ์ด๋ค.
์ค์ '์ค'์ด๋ผ๋ ๊ธ์๋ Unicode ํ๊ธ ์ฒด๊ณ ํ์ ๋ฐ๋ฅด๋ฉด 16์ง์ BCB3์ ๋งคํ๋๋ค. ๊ทธ๋ฆฌ๊ณ 16์ง์์ธ BCB3์ 10์ง์๋ก ํํํ๋ฉด 48307(4๋ง7์ฒ3๋ฐฑ7)์ด๋ค. ํ๊ธ์ ์กฐํฉํ์ผ๋ก ํ ์ง, ์์ฑํ์ผ๋ก ํ ์ง ๋ฌด์ํ ๋ ผ์์ด ๋ง์์ง๋ง, ๊ฒฐ๊ตญ์ ์์ฑํ์ผ๋ก ๊ฒฐ์ ์ด ๋์๊ณ ํ์ฌ ์ปดํจํฐ๋ ํ๊ธ์ ์์ฑํ ๋ฐฉ์์ ์ฌ์ฉํด์ ํํ๋๊ณ ์๋ค. ์ด ์์ฑํ ๋ฐฉ์์ ํ๊ธ ์ธ์ฝ๋ฉ์ EUC-KR์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
ASCII ์ฝ๋๋ 7๋นํธ(ํน์๋ฌธ์๊น์ง ํ๋ฉด 8๋นํธ)๋ก ํํ๋๋ค๊ณ ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ ๋์ฝ๋๋ ๊ธ์ ํ๋๋ฅผ ๋ช ๋นํธ๋ก ํํํ ๊น? ์ด "๋ช ๋นํธ๋ก ํํํ ๊น" ๋ฅผ ๋ค๋ฅธ ๋ง๋ก ๋ฐ๊พธ์ด ๋งํ๋ฉด "ํ๊ธ ๋ฌธ์ ํ๋๋ฅผ ํํํ๋ ๊ฒฝ์ฐ์ ์๋ ์ด ๋ช ๊ฐ์ง์ธ๊ฐ?" ์ด๋ค. ํ์ง๋ง ์ปดํจํฐ๋ ๋ํ๋ฏผ๊ตญ๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์๋๋ค. ์ค๊ตญ์ด๋ ์ผ๋ณธ, ๊ธฐํ ๋ค๋ฅธ ๋์์์๊ถ ๊ตญ๊ฐ๋ค์์๋ ์ปดํจํฐ๋ฅผ ์ฌ์ฉํด์ ์์ ๋ค์ ์ธ์ด๋ฅผ ํํํ ์ ์๋ค. ์ด๋ฌํ ๊ตญ๊ฐ๋ค์ ์ธ์ด๊น์ง ๋ชจ๋ ํฌํจํ์ ๋, ๋ช ๋นํธ ์ฒด๊ณ๋ก ํด์ผ ๋ชจ๋ ๊ตญ๊ฐ๋ค์ ์ธ์ด๋ฅผ ํํํ ์ ์๊ฒ ๋ ๊น?
์ด์ ๋ํด์ ํฉ์ํ์ฌ ๊ฒฐ์ ํ ๋นํธ์๊ฐ ๋ฐ๋ก 16๋นํธ์ด๋ค. 16๋นํธ๋ $2^16$์ผ๋ก ๋๋ต 65,536์ด๋ค. ๋ฐ๋ผ์ ์ ๋์ฝ๋๋ ๋ฌธ์ ํ๋๋ฅผ 16๋นํธ๋ก ํํํ๋ค.
3. Microsoft๊ฐ ๋ง๋ Unicode์ ๋ ๋ค๋ฅธ ์ด๋ฆ: MBCS
์ ๋์ฝ๋์ ๋ํ ํฉ์๊ฐ ์ด๋ฃจ์ด์ง ํ, 2000๋
๋ ์ด๋ฐ ๋ง์ดํฌ๋ก์ํํธ๊ฐ ์๋์ฐ ์ด์์ฒด์ ๋ฅผ ๋ํ๋ฏผ๊ตญ์ ๋๋ฆฌ ๋ณด๊ธํ์ฌ ๋ชจ๋ ๊ฐ์ ์๋ ๋๋ถ๋ถ ์๋์ฐ ์ด์์ฒด์ ๋ฅผ ๊ฐ๋ ์ปดํจํฐ ํ ๋์ฉ ๊ฐ๊ธฐ ์์ํ๋ค. ๊ทธ๋ฌ๋ฉด์ ๋ง์ดํฌ๋ก์ํํธ๊ฐ ์ ๋์ฝ๋ ์ฒด๊ณ๋ฅผ ๋ค๋ฅธ ์ฉ์ด๋ก ๋ถ๋ฅด๊ธฐ๋ ํ๋๋ฐ, ๋ฐ๋ก MBCS(Multi Byte Character Stream)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด๋ ค์ด ๊ฒ์ ์๋๊ณ , Character์ธ ๋ฌธ์๋ฅผ Multi Byte ์ฆ, ๋ฉํฐ ๋ฐ์ดํธ๋ก ํํํ๋ค๋ ์๋ฏธ์ด๋ค. 1๋ฐ์ดํธ๋ 8๋นํธ์ด๋ค. ๋ฉํฐ ๋ฐ์ดํธ๋ 1๋ฐ์ดํธ ์ด์ ์ฆ, 2๋ฐ์ดํธ์ธ ์
์ธ๋ฐ 2๋ฐ์ดํธ๋ 16๋นํธ์ด๋ค. ๋ค์ ๋งํด, MBCS๋ ๋ฌธ์๋ฅผ 2๋ฐ์ดํธ ์ด์์ผ๋ก ํํํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๋ ์ง์ ๋ชฉ์ฐจ์์ ์ ๋์ฝ๋๊ฐ 16๋นํธ๋ก ํํ๋๋ค๊ณ ํ๋ค. ๊ณ ๋ก ๊ธ์ ํ๋๋ฅผ 16๋นํธ๋ก ํํํ๋ค๊ณ ํด์ ๋จ์ํ ๋ฉํฐ ๋ฐ์ดํธ๋ก ํํํ๋ค๊ณ ํ ๊ฒ์ด๋ค.(์ผ๋ถ๋ฌ ์ด๋ ต๊ฒ ์ฉ์ด๋ฅผ ํด๋์ ๋ฏ..) MBCS๋ผ๋ ๊ฒ์ ์ ๋์ฝ๋๋ 100% ๋์ผํ ๊ฒ์ ์๋์ง๋ง ๊ฑฐ์ ์ ์ฌํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
MBCS๋ฅผ ๋ง๋ค๊ณ , ๋ง์ดํฌ๋ก์ํํธ๋ ํ๊ธ ์ฒ๋ฆฌ๋ฅผ ์ํด EUC-KR์ ํ์ฅํ์ฌ CP949 ๋ผ๋ ๊ฒ์ ์ ์ํ๊ธฐ๋ ํ๋ค. CP๋ Code Page์ ์ค์๋ง์ธ๋ฐ, ASCII ์ฝ๋ํ์ฒ๋ผ ๋ฌธ์์ ์ซ์๋ฅผ ๋งคํํ ํ ์ด๋ธ์ ์๋ฏธํ๋ ๊ฒ์ด๋ค. CP949๋ ํ์ฌ ์๋์ฐ ์ด์์ฒด์ ์์๋ ์์ฃผ ๋ณด์ด๋ ์ธ์ฝ๋ฉ ํ์์ผ๋ก, ์๋์ฐ์์ ํด๋น ์ธ์ฝ๋ฉ ์ฒด๊ณ๋ก ์ ์ฅํ ํ ์คํธ๋ csv ํ์ผ์ ๋งฅ๋ถ์ ์ฎ๊ฒจ ํ์ผ์ ์ด๋ฉด ํ์ผ ๋ด์ฉ์ด ๊นจ์ง๊ฒ ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
4. ์ธํฐ๋ท๊ณผ Web, ๊ทธ๋ฆฌ๊ณ HTML์ ๋ฑ์ฅ: UTF-8
2000๋ ๋ ์ด๋ฐ์ด ๋๋ฉด์ ๋ํ๋ฏผ๊ตญ์ ์ธํฐ๋ท์ ๋ณด๊ธํ๊ฐ ์ด๋ฃจ์ด์ก๋ค. ์ง ์ฃผ๋ณ์ PC๋ฐฉ์ด ์๊ธฐ๊ณ , ํ์ฐฝ์์ ํ๊ต๊ฐ ๋๋๊ณ ์น๊ตฌ๋ค๊ณผ ๊ฒ์์ด๋ ๋ฉ์ ์ ์ ๊ฐ์ ์ธํฐ๋ท ๊ณต๊ฐ์์ ๋ง๋๊ธฐ ์์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋๋ถํฐ ๋๋ถ๋ถ์ Web ํต์ ์ ์ํํจ์ ๋ฐ๋ผ, HTML ๋ฌธ์๊ฐ ๋ณด๊ธํ๋๊ธฐ ์์ํ๋ค. ์ฌ์ง์ด ์ง๊ธ ๋ณด๊ณ ์๋ ์ด ๋ธ๋ก๊ทธ ๊ธ๋ HTML ๋ฌธ์์ด๋ค. ๊ทธ๋ฌ๋ค ๋ณด๋, ๋ณด๊ธํ๋ ์ธํฐ๋ท์ ์ด์ฉํ๋ ์ ๊ตญ, ์ฌ์ง์ด ์ ์ธ๊ณ ์ฌ๋๋ค์ด ์๋ก ๋ค๋ฅธ ์น๋ธ๋ผ์ฐ์ ๋ก ์ ์ํ๊ฒ ๋๋ฉด์ ๋์ผํ HTML ๋ฌธ์์ ๋ด์ฉ๋ฌผ์ ๋ณด์ง๋ง ๊ฐ ์น ๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ผ HTML์ ๋ฌธ์์ด๋ค์ด ๊นจ์ง๋ ํ์์ด ๋ฐ์ํ๊ณค ํ๋ค.
๊ฒฐ๊ตญ, Web์์์ ๋ฌธ์์ด์ ์ด๋ ํ ์ธ์ฝ๋ฉ ์ฒด๊ณ๋ก ํต์ผํ์๊ฐ ๋์๋๋ฐ, ๊ทธ๊ฒ์ด ๋ฐ๋ก UTF-8 ์ฒด๊ณ์ด๋ค. UTF-8์ [๋ชฉ์ฐจ 2๋ฒ]์์ ๋ฐฐ์ด ์ ๋์ฝ๋์ ๊ฑฐ์ ๋์ผํ๋ค. ์ฐจ์ด์ ์ ๋ฐ๋ก ์ ๋์ฝ๋๋ ๋ชจ๋ ๋ฌธ์๋ฅผ 2๋ฐ์ดํธ(16๋นํธ)๋ก ํํํ๊ธฐ๋ก ํ์์ง๋ง, UTF-8์ 3๋ฐ์ดํธ(24๋นํธ)๋ก ํํํ๊ธฐ๋ก ํ๋ค๋ ์ ์ด๋ค. ๋ค๋ง, UTF-8์ ASCII ์ฝ๋๋ก ํํํ ์ ์๋ ์์ด๋ฌธ์์ ๋ํด์๋ 1๋ฐ์ดํธ(8๋นํธ)๋ก ํํํ๊ธฐ๋ก ํ๋ค.
์ด๋ ๊ฒ Web์์๋ ๋ฌธ์์ด ํํ ๋ฐฉ์์ UTF-8 ์ธ์ฝ๋ฉ์ผ๋ก ํต์ผํ๊ฒ ๋จ์ ๋ฐ๋ผ URL ์ธ์ฝ๋ฉ ๋ฐฉ์๋ UTF-8์ ์๋์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ค. ์ค์ ๋ก URL ์ธ์ฝ๋ฉ ์ฌ์ดํธ์ ๊ฐ์ ์ ๋ ๋ผ๋ ํ๊ธ ๋จ์ด๋ฅผ ์ ๋ ฅํ๋ฉด %EC%A0%9C%EB%93%9C ๋ผ๋ ์ธ์ฝ๋ฉ๋ ๊ฐ์ด ๋ฑ์ฅํ๋ค. ์ด ์ธ์ฝ๋ฉ๋ ๊ฐ์ %๋ 16์ง์ ๋จ์๋ก ๋ฑ์ฅํ๋๋ฐ, ์ด ์์์์๋ EC๊ฐ 16์ง์ 1๊ฐ, A0์ด 16์ง์ 1๊ฐ, ... ์ด๋ฐ์์ด๋ค.
๋ด๊ฐ ์ ๋ ฅ์ '์ ๋'๋ผ๊ณ ํ๊ธ๋ก ์ ๋ ฅํ๊ณ , ํ๊ธ ๊ธ์ ํ๋๋ 3๋ฐ์ดํธ๋ผ๊ณ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก EC, A0, 9C ์ฆ, ECA09C๊ฐ ๋ฐ๋ก ํ๊ธ '์ '๋ฅผ ์๋ฏธํ๊ฒ ๋๋ค. ์ฌ๊ธฐ์ ๋ค์ด๊ฐ์ '์ ' ๋ผ๋ ๊ธ์์ ๋ํ UTF-8 ๊ฐ์ ๋ณด๋ฉด (236, 160, 144)์ C์์ ์์ ์๋ค. ๋จผ์ (236, 160, 144)๋ฅผ 16์ง์๋ก ๋ฐ๊พธ๋ฉด (EC, A0, 90)์ด ๋๊ณ , ๋ง์ง๋ง 90์ C๋ฅผ ๋ถ์ด๋ฉด 90C ์ด์ง๋ง, 0์ ์ด์ฐจํผ 0์ด๋ฏ๋ก 9C๊ฐ ๋จ์ ์ ์ ์๋ค. ๊ทธ๋์ ์ต์ข ์ ์ผ๋ก EC, A0, 9C๊ฐ ๋๊ณ ์ด ๊ฐ์ URL ์ธ์ฝ๋ฉ๋ ๊ฐ์ "%EC%A0%9C" ์ ๊ฐ๊ณผ ๋์ผํจ์ ์ ์ ์๋ค.
๋๋จธ์ง ๊ธ์์ธ '๋'๋ ๋๊ฐ์ด ์ฐพ์๋ณด๊ณ ๊ฐ์ด ๋์ผํ์ง ์ดํด๋ณด์.
5. ์ด๊ฑฐ "UTF-8๋ก ์ธ์ฝ๋ฉ ๋๊ฑฐ์ผ!" ๋ผ๊ณ ์ธ์ฆ: UTF-8(BOM)
๋ฐฉ๊ธ Web ํต์ ์์์ ๋ฌธ์์ด ์ธ์ฝ๋ฉ์ ๋ชจ๋ UTF-8 ์ธ์ฝ๋ฉ์ผ๋ก ๋๋๋จ๊ฒฐํ๋ค๊ณ ํ์๋ค. ๊ทธ๋ฐ๋ฐ ๋ง๋ง๋ก, ์ด๋ค ๋ฌธ์์ด ์์ฒด๋ง ๋ณด๊ณ ์ด๊ฒ UTF-8๋ก ์ธ์ฝ๋ฉ๋ ๊ฑฐ์ผ! ๋ผ๊ณ ์ด๋ป๊ฒ ์ฆ๋ช ํ ์ ์์๊น? ์ด๋ฐ ๊ด์ ์์ ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก UTF-8(BOM)์ด๋ค. BOM์ Byte Order Mark์ ์ค์๋ง์ธ๋ฐ, ์ฝ๊ฒ ํํํ๋ฉด ์ด BOM์ด "์ด ๋ฌธ์์ด UTF-8๋ก ์ธ์ฝ๋ฉ ๋ ๊ฒ์"์ ์ฆ๋ช ํ๋ ๋ฌธ์์ธ ๊ฒ์ด๋ค. ๋ฌธ์์ด์ ๊ฐ์ฅ ์๋ถ๋ถ 3๋ฐ์ดํธ ๋งํผ ๊ณต๊ฐ์ ์ด BOM์ ํํํด์ฃผ๋ ๊ฒ์ด๋ค. ์ด 3๋ฐ์ดํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ "์ ์ด ๋ฌธ์์ด์ด UTF-8๋ก ์ธ์ฝ๋ฉ ๋ ๊ฒ์ด๊ตฌ๋~" ๋ผ๊ณ ์ธ์งํ๋ ๊ฒ์ด๋ค.
์ด ๋ถ๋ถ์ ํ์ ์ปดํจํฐ MacOS์์ ํ ์คํธํด๋ณด๋ ค ํ์ผ๋, UTF-8(BOM) ์ธ์ฝ๋ฉ ํ์์ด ์ง์์ด ๋์ง ์์์, ๋๋ํ ๊ฐ๋ฐ์๋ ๊ฐ์์ 32๋ถ 00์ด๋ถํฐ ๋ณด๋ฉด ๋๋ค.
6. ๋ชจ๋ ๋ฌธ์๋ฅผ 16๋นํธ๋ก ํํ: UTF-16
UTF-8์ ASCII ์ฝ๋๋ 1๋ฐ์ดํธ, ๊ทธ ์ธ ๋ฌธ์๋ 3๋ฐ์ดํธ๋ก ํํํ๋ค๊ณ ํ์๋ค. ํ์ง๋ง UTF-16์ ๋ชจ๋ ๋ฌธ์๋ฅผ 2๋ฐ์ดํธ ์ฆ, 16๋นํธ๋ก ํํํ๋ ์ธ์ฝ๋ฉ ๋ฐฉ์์ด๋ค. ๊ทธ๋ฐ๋ฐ UTF-16์๋ ํฌ๊ฒ BE, LE ๋ฐฉ์์ด ์กด์ฌํ๋ค. BE๋ Big Endian์ด๊ณ , LE๋ Little Endian์ด๋ค. ์์ C ์ธ์ด ๊ด๋ จ ํฌ์คํ ์ ํ ๋, ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ๋ฐฉ์๋ค์ ๋ํด ๋ฐฐ์ธ ๋๋ ๋๊ฐ์ด ๋ฑ์ฅํ์๋ค. ๊ทธ ๋ ๋น์์ ๋ฐฐ์ด ๊ฐ๋ ์ด 100% ๋์ผํ ์๋ฏธ๋ ์๋์ง๋ง ๋๋์ ๋น์ทํ๋ค.
๊ทธ๋ฐ๋ฐ ์ UTF-16๋ BE, LE ๋ฐฉ์์ด ๋ฐ๋ก ์กด์ฌํ ๊น? ์ด์ ๋ ๋ฐ๋ก ASCII ์ฝ๋์ ์๋ค. ASCII ์ฝ๋๋ 1๋ฐ์ดํธ ์ฒด๊ณ๋ก 8๋นํธ๋ก ํํ์ด ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ UTF-16์์๋ ์ด ASCII ์ฝ๋๋ 16๋นํธ๋ก ํํํ๋ค๊ณ ํ๋ค. ๊ทธ๋ฌ๋ฉด ๊ฒฐ๊ตญ 8๋นํธ๋ก ํํ๊ฐ๋ฅํ ๊ฒ์ 16๋นํธ๋ก ๋๋ ค์ ํํํ๋ค๋ ๊ฒ์ธ๋ฐ, 16๋นํธ๋ก ๋๋ฆผ์ ๋ฐ๋ผ ๋น ๊ณต๊ฐ์ด ์๊ธธ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, ์ํ๋ฒณ ์๋ฌธ์ a๋ฅผ ASCII ์ฝ๋๋ก ํํํ๋ฉด 10์ง์๋ก๋ 97์ด๊ณ ์ด๋ฅผ 8๋นํธ ์ด์ง์๋ก ๋ฐ๊พธ๋ฉด 0110 0001์ด๋ค. ์ด๋ฒ์ a๋ฅผ UTF-16์ผ๋ก ์ธ์ฝ๋ฉํ๋ค๋ฉด 8๋นํธ๊น์ง์ ๊ฐ์ ๋์ผํ๋ ์ ๊ทธ๋ฆผ์ ํ์ ๋ถ๋ถ ์ฒ๋ผ 8๋นํธ๋งํผ์ ๊ณต๊ฐ์ ๋ ์ญ ๋๋ ค๋ฒ๋ฆฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋์ด๋ 8๋นํธ ์ถ๊ฐ ๊ณต๊ฐ์๋ null๊ณผ ๊ฐ์ ์ฐ๋ ๊ธฐ ๊ฐ์ ๋ฃ์ด๋ฒ๋ฆฐ๋ค.
๋ฐ๋ก ์ด ๋์ด๋ ๊ณต๊ฐ์ด ์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ค์ชฝ ๋ถ๋ถ์ ๋๋ ค๋ฒ๋ฆฌ๋ฉด Little Endian(LE) ๋ฐฉ์, ์์ชฝ ๋ถ๋ถ์ ๋๋ ค๋ฒ๋ฆฌ๋ฉด Big Endian(BE) ๋ฐฉ์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ทธ๋ฆฌ๊ณ BE ๋ฐฉ์์ธ์ง, LE ๋ฐฉ์์ธ์ง ์ถ๊ฐ๋ก ํ์ํ๊ธฐ ์ํด UTF-8(BOM)์ฒ๋ผ ๋งจ ์์ 2๋ฐ์ดํธ ๋งํผ์ ๊ณต๊ฐ์ ์๋ณ์๋ฅผ ๋ฃ์ด์ค๋ค.
์ด๋ ๊ฒ ํด์ ์ปดํจํฐ์์ ๋ฌธ์์ด์ ์ธ์ฝ๋ฉํ๋ ๋ํ์ ์ธ ์ธ์ฝ๋ฉ ๋ฐฉ์๋ค์ ์์๋ณด์๋ค. ๋ง์ง๋ง์ผ๋ก๋ ์น ํต์ ํ ๋ ์ฌ์ฉํ๋ UTF-8 ์ธ์ฝ๋ฉ ๋ง๊ณ ๋ base64 ์ธ์ฝ๋ฉ์ด๋ผ๋ ๊ฒ๋ ์กด์ฌํ๋๋ฐ, ์ด์ ๋ํด์ ์์๋ณด๊ณ ๊ธ์ ๋ง๋ฌด๋ฆฌํ๋๋ก ํ์.
7. ๋ฌธ์๋ก ํํํ ์ ์๋ ๊ฒ์ ๋ฌธ์๋ก ํํํ์: base64 ์ธ์ฝ๋ฉ
๋จผ์ base64 ์ธ์ฝ๋ฉ์ด ๋์ํ๋ ๊ณผ์ ์ ๋ํด์ ์ดํด๋ณด์. base64 ์ธ์ฝ๋ฉ์ ์๋ณธ ์๋ฃ๋ฅผ 6๋นํธ์ฉ ๋์ด์ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค. ์๋ ๊ทธ๋ฆผ์ผ๋ก ๋์ ๊ณผ์ ์ ์์๋ณด์.
๋จผ์ ๊ฐ ๋ฌธ์๋ฅผ 10์ง์ ๋๋ 16์ง์๋ก ๋ณํํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ ์ต์ข ์ ์ผ๋ก 2์ง์๋ก ๋ณํํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด 2์ง์ ๊ฐ๋ค์ ์ญ ์ด์ด๋ถํ๋ค. ์ด์ 6๋นํธ์ฉ ๋จ์๋กํด์ ๋๋๋ค. ๊ทธ๋ฆฌ๊ณ 6๋นํธ์ฉ ๋์ ๊ฐ์ base64 ๋ฐ์ด๋๋ฆฌ ํ ์ด๋ธ์์ ๋งคํ๋๋ ๋ฌธ์๋ก ๋ณํํ๋ค. ์ฐธ๊ณ ๋ก, ์์ ์์์ ๊ฒฝ์ฐ CHS๋ผ๋ ๊ธ์๊ฐ 6๋นํธ ๋จ์๋ก ๋ฑ ๋จ์ด์ ธ์ ๋์ด์ก์ง๋ง ๋ง์ฝ ์๋ณธ ๊ธธ์ด๊ฐ 6๋นํธ ๋จ์๋ก ๋ฑ ๋์ด์ง์ง ์๊ณ ๋์ ์ฌ๋ถ์ด ๋จ๋๋ค๋ฉด ๋์ ๋จ๋ ๋ถ๋ถ์ 6๋นํธ๋ก ๋๋ฆฐ ๋ค, ๋น ๊ณต๊ฐ์ =(๋ฑํธ) ๊ธฐํธ๋ก ์ฑ์๋ฃ๋ ํจ๋ฉ์ ์ํํ๋ค.(๋ง์น [๋ชฉ์ฐจ 6๋ฒ]์์ ๋ฐฐ์ด UTF-16๋์ ํจ๋ฉ์ด๋ ๋น์ทํ ์๋ฆฌ์ด๋ค)
์ด์ ๋์๊ณผ์ ์ ์์๋ณด์์ผ๋, base64 ์ธ์ฝ๋ฉ์ ํ๋ ์ด์ ์ ๋ํด ๋์ง์ด๋ณด์. ๊ทธ๋ฐ๋ฐ ์ด์ํ ์ ์ด ํ๋ ์๋ค. ๋ฐฉ๊ธ ๋์๊ณผ์ ์ ์ดํด๋ณด๋ฉด ์ค๊ฐ์ ์๋ณธ ๋ฌธ์๋ฅผ 6๋นํธ ๋จ์๋ก ์ชผ๊ฐ์๋๋ฐ, ์ด ์ชผ๊ฐ์ง 6๋นํธ ํฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ base64 ๋ฐ์ด๋๋ฆฌ ํ ์ด๋ธ์ ๋งคํ๋ ๋ฌธ์์ธ 8๋นํธ ํฌ๊ธฐ์ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ค. ์ฆ, ๋ฐ์ดํฐ์ ์ฌ์ด์ฆ๊ฐ 6๋นํธ์์ 8๋นํธ๋ก 2๋นํธ๋งํผ ๋ ๋ถํ์ํ๊ฒ ๋ ์ปค์ง ์ ์ด๋ค. ์ด๊ฒ๋ง ๋ณด๋ฉด base64 ์ธ์ฝ๋ฉ์ด๋ผ๋ ๊ฒ์ ๋ฐ์ดํฐ ์ฌ์ด์ฆ๋ง ํค์ธ ๋ฟ์ด์ง ๊ตณ์ด ์ ํด์ผํ๋์ง ์ด์ ๊ฐ ์ ๋ณด์ด์ง ์๋๋ค.
base64 ์ธ์ฝ๋ฉ์ ํ๋ ์ด์ ๋ ๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด ๋ฐ์ด๋๋ฆฌ๋ก ๋์ด ์๋ ๋ฐ์ดํฐ ์ฆ, ๋นํธ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ๋ ์์ด ๋ฌธ์์ด๋ก ๋ฐ๊พธ๊ธฐ ์ํจ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์์ด ๋ฌธ์์ด๋ก ์ ๋ฐ๊พธ๋ ๊ฒ์ผ๊น? ์ด์ ๋ํ ์ด์ ๋ ๋ฐ๋ก ์น ํต์ ์ ์ํํ ๋, ๋๋ถ๋ถ ASCII ์ฝ๋๋ก ํํ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์น ํต์ ์ ์ํํ ๋, ASCII ์ฝ๋๋ก ํํํ ์ ์๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ(ex. ๋ถ๋ ํฌ์ธํธ์ ๊ฐ์ ํน์ ๋ฌธ์, ์กฐ๊ทธ๋งํ ์ด๋ฏธ์ง ๋ฑ)๋ค์ด ์ฃผ๊ณ ๋ฐ์์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค. ์ด๋ฌํ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ HTML ๋ฌธ์์ ๊ฐ์ด ์น ํต์ ์ ์ํํ ๋ ์ฌ์ฉํ๋ ๋งค๊ฐ์ฒด์ ๊ฐ์ด ๋ด์๋ด๊ธฐ ์ํด์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ๋ก ASCII ์ฝ๋ ๋ฌธ์๋ก ๋ณํํ๋ ๊ฒ์ด๋ค.
๋ง์ฝ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์๋ก ๋ณํํด์ ๋ด์ ๊ฐ์ด ๋ณด๋ด์ง ์์ผ๋ฉด HTML ๋ฌธ์์ ๊ฐ์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ๋คํธ์ํฌ ํต์ 1ํ, ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ ํ์์ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ๋คํธ์ํฌ ํต์ 1ํ, ์ด 2๋ฒ ํต์ ์ ์ํํด์ผ ํ๋ค. ํ์ง๋ง ๋คํธ์ํฌ ํต์ ์ ์๊ฐ๋ณด๋ค ๋น์ผ ๋น์ฉ์ด๋ฉฐ ์๋๊ฐ CPU ์ฐ์ฐ๊ณผ ๊ฐ์ ์ปดํจํ ์ฐ์ฐ์ ๋นํด์๋ ๋งค์ฐ ๋๋ฆฌ๋ค. ๊ฒฐ๊ตญ, base64 ์ธ์ฝ๋ฉ์ ํ์ฉํ๋ค๋ฉด ์ฝ๊ฐ์ ๋ฐ์ดํฐ ์ฌ์ด์ฆ๋ ์ปค์ง์ง๋ผ๋, 1ํ๋ง์ ๋คํธ์ํฌ ํต์ ์ ์ํํด์ ๋ ๋น ๋ฅธ ์๋์ ์๋น์ค๋ฅผ ํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ด ๋ฐ๋ก base64 ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ ์ฃผ๋ ์ด์ ์ด๋ค.