URL ์ธ์ฝ๋ฉ์ด๋?
URL ์ธ์ฝ๋ฉ์ ํผ์ผํธ ์ธ์ฝ๋ฉ(percent-encoding)์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ, RFC 3986์์ ์ ์ํ ๋ฐฉ์์ผ๋ก ์์์ ๋ฐ์ดํฐ๋ฅผ URI(Uniform Resource Identifier) ์์ ํํํ๊ธฐ ์ํ ๊ท์น์
๋๋ค. ๊ณต๋ฐฑ, ์ฌ๋์(/), ๋ฌผ์ํ(?), ์ฐํผ์๋(&), ๊ทธ๋ฆฌ๊ณ ASCII๊ฐ ์๋ ๋ฌธ์ ๋ฑ ๋ง์ ๋ฌธ์๋ค์ URL ์์์ ํน๋ณํ ์๋ฏธ๋ฅผ ๊ฐ๊ฑฐ๋ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ์ ์์ ํ์ง ์์ต๋๋ค. ํผ์ผํธ ์ธ์ฝ๋ฉ์ ์ด๋ฌํ ๊ฐ ๋ฐ์ดํธ๋ฅผ ํผ์ผํธ ๊ธฐํธ(%)์ ๊ทธ ๋ฐ์ดํธ ๊ฐ์ ๋ํ๋ด๋ ๋ ์๋ฆฌ 16์ง์๋ก ๋ฐ๊ฟ ์ค๋๋ค.
๊ณ์ฐ๊ธฐ ์ฌ์ฉ๋ฒ
์ผ๋ฐ ํ ์คํธ๋ฅผ URL์์ ์์ ํ๊ฒ ์ธ ์ ์๋ ๋ฌธ์์ด๋ก ๋ฐ๊พธ๋ ค๋ฉด ์ธ์ฝ๋ฉ(Encode)์, ํผ์ผํธ ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ ๋ค์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ ์คํธ๋ก ๋๋๋ฆฌ๋ ค๋ฉด ๋์ฝ๋ฉ(Decode)์ ์ ํํ์ธ์. ํ ์คํธ๋ฅผ ์ ๋ ฅํ๊ฑฐ๋ ๋ถ์ฌ๋ฃ์ ๋ค ์คํํ๋ฉด ๋ฉ๋๋ค. ์ด ๋๊ตฌ๋ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๋ฌธ์ ๊ธธ์ด๋ ํจ๊ป ๋ณด์ฌ ์ฃผ๋ฏ๋ก, ์ธ์ฝ๋ฉ์ผ๋ก ์ธํด ๋ฌธ์์ด์ด ์ผ๋ง๋ ๊ธธ์ด์ก๋์ง ํ๋์ ํ์ธํ ์ ์์ต๋๋ค.
๋ณํ ์๋ฆฌ
๋น์์ฝ(unreserved) ๋ฌธ์ ์งํฉ์ AโZ aโz 0โ9 - _ . ~ ์
๋๋ค. ์ด ์งํฉ์ ํฌํจ๋์ง ์๋ ๋ฐ์ดํธ๋ ๋ชจ๋ ์ธ์ฝ๋ฉ๋ฉ๋๋ค. ์ธ์ฝ๋ฉ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์๋ฅผ ๋ค์ด ๊ณต๋ฐฑ ๋ฌธ์๋ ๋ฐ์ดํธ ๊ฐ์ด 32์ด๊ณ 16์ง์๋ก๋ 0x20์ด๋ฏ๋ก %20์ผ๋ก ๋ณํ๋ฉ๋๋ค. ํ
์คํธ๋ ๋จผ์ UTF-8๋ก ๋ฐ์ดํธํ๋๊ธฐ ๋๋ฌธ์, ์ด๋ชจ์ง๋ ์
์ผํธ๊ฐ ๋ถ์ ๋ฌธ์์ฒ๋ผ ์ฌ๋ฌ ๋ฐ์ดํธ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์๋ ๋ฐ์ดํธ ๋จ์๋ก ํ๋์ฉ ์ธ์ฝ๋ฉ๋ฉ๋๋ค. ๋์ฝ๋ฉ์ ์ด ๊ณผ์ ์ ๊ฑฐ๊พธ๋ก ์งํํฉ๋๋ค. ๊ฐ %XX ๋ฌถ์์ 16์ง์ ๋ฐ์ดํธ๋ก ํด์ํ๊ณ , ๋ชจ์ธ ๋ฐ์ดํธ๋ค์ ๋ค์ UTF-8๋ก ์ฝ์ด ๋ค์
๋๋ค.
์์ ๋ก ๋ณด๊ธฐ
hello world!๋ฅผ ์ธ์ฝ๋ฉํด ๋ณด๊ฒ ์ต๋๋ค. h-e-l-l-o ๊ฐ์ ์ํ๋ฒณ์ ๋น์์ฝ ๋ฌธ์๋ผ์ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค. ๊ณต๋ฐฑ์ %20์ด ๋๊ณ , ๋๋ํ(๋ฐ์ดํธ 33 = 0x21)๋ %21์ด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ฒฐ๊ณผ๋ \(\text{hello}\%20\text{world}\%21\)์ด ๋ฉ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
ํ๋ฌ์ค ๊ธฐํธ(+)๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ์ธ์ฝ๋ฉํ๋์? ์ธ์ฝ๋ฉํ ๋ ๊ณต๋ฐฑ์ RFC 3986 ๋ฐฉ์์ ๋ฐ๋ผ %20์ผ๋ก ๋ณํ๋ฉ๋๋ค. ๋ฐ๋๋ก ๋์ฝ๋ฉํ ๋๋ ํผ ๋ฐ์ดํฐ์์ ํธํ์ ์ํด ๊ทธ๋๋ก ์
๋ ฅ๋ +๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
์ด๋ค ๋ฌธ์๋ ์ ๊ทธ๋๋ก ๋จ๋์? ์๋ฌธ์, ์ซ์, ๊ทธ๋ฆฌ๊ณ ๋ค ๊ฐ์ง ๋น์์ฝ ๊ธฐํธ - _ . ~๋ RFC 3986์์ ์ธ์ฝ๋ฉ์ด ์ ํ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ ๋์ฝ๋๋ ์ง์ํ๋์? ๋ค. ํ
์คํธ๋ UTF-8๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก ASCII ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๋ฌธ์๋ ์ฌ๋ฌ ๊ฐ์ %XX ๋ฐ์ดํธ๋ก ์ธ์ฝ๋ฉ๋๊ณ , ๋ค์ ์ ํํ๊ฒ ๋์ฝ๋ฉ๋ฉ๋๋ค.