๐ HTTP ์ฝํ ์ธ ํ์(Content Negotiation) ์ดํดํ๊ธฐ
HTTP ์ฝํ ์ธ ํ์ ์ด๋?
ํด์ธ์์ ์๋น์ค ๋๋ ์ฌ์ดํธ ์ธ๋ฐ๋, ํ๊ตญ์์ ์ ์ํ๋ฉด ์ปจํ ์ธ ๋ฅผ ํ๊ตญ์ด๋ก ๋ณด์ฌ์ฃผ๊ณ , ์ผ๋ณธ์์ ์ ์ํ๋ฉด ์ผ๋ณธ์ด๋ก ์๋์ผ๋ก ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ํ๋ฒ ์ฏค์ ๊ฒช์ด๋ดค์ ๊ฒ์ด๋ค. ํน๋ณํ ์ง์ ์ฌ์ดํธ์ ์ธ์ด ์ง์ ๋ฉ๋ด๋ฅผ ํตํด ์ค์ ํ์ง ์์๋๋ฐ๋ ์๋ฒ์์ ์ค์ค๋ก ํ์ ํ๊ณ ์ด๋ป๊ฒ ํด๋น๋๋ ์ธ์ด ํ์ด์ง๋ฅผ ๊ณจ๋ผ ํ์ํด์ฃผ๋ ๊ฒ์ผ๊น?
์ด๊ฒ์ด ๋ฐ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ HTTP ์ฝํ ์ธ ํ์(Contents Negotiation)์ ํตํด ์ด๋ฃจ์ด ์ง๋ ๊ฒ์ด๋ค.
์ฝํ ์ธ ํ์์ด๋, ์น๋ธ๋ผ์ฐ์ (user-agent)๊ฐ ์ด์ฉ์์๊ฒ ์๋ง๋ ํํ์ ๋ฆฌ์์ค๋ฅผ ๋ฐ์ ์ ์๋๋ก, ๋ฆฌ์์ค๋ฅผ ์ด๋ค ํํ๋ก ๋ฐ์์ง ์ ํ๋ ๋ฉ์ปค๋์ฆ์ ์ผ์ปซ๋๋ค. ์ด๋ ๋ฆฌ์์ค์ ํํ๋ ๋ฌธ์์ ์ธ์ด๋ ์ด๋ฏธ์ง ํฌ๋งท, ์ธ์ฝ๋ฉ ๋ฑ์ ๋งํ๋ค.
์ฝํ ์ธ ํ์์๋ ๋ํ์ ์ผ๋ก ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- ์๋ฒ ์ฃผ๋์ ํ์(server-driven/proactive negotiation) :
- ์ฝํ ์ธ ํ์์ ์ฃผ๋๊ถ์ด ์๋ฒ์ ์์.
- ๋ธ๋ผ์ฐ์ ๋ ์ ํธํ๋ ์ค์ ๊ฐ์ด ๋ด๊ธด HTTP ํ์ ํค๋๋ฅผ ์๋ฒ์ ๋ณด๋ด๊ณ , ์๋ฒ๋ ์ฌ์ฉ์์๊ฒ ์ด๋ค ํํ์ ์ฝํ ์ธ ๊ฐ ์ ์ ํ์ง ํค๋์ ๋ด๊ธด ๋ด์ฉ๊ณผ ๋ด๋ถ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด ๊ณจ๋ผ ์๋ตํ๋ค.
- ์์ด์ ํธ ์ฃผ๋์ ํ์(agent-driven/reactive negotiation) :
- ์ฝํ ์ธ ํ์์ ์ฃผ๋๊ถ์ด ํด๋ผ์ด์ธํธ์ ์์.
- ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด, ์๋ฒ๋ ์ฌ์ฉ์๊ฐ ๋ฐ๊ณ ์ ํ๋ ๋ฆฌ์์ค์ ํํ(representation)์ ๋ฉํ๋ฐ์ดํฐ(content-type, quality, language)์๋ ์ด๋ค ๊ฒ์ด ์๋์ง ์๋ฆฌ๊ณ , ํด๋ผ์ด์ธํธ๋ ์ฌ๊ธฐ์ ์๋ง์ ํํ๋ฅผ ๊ณ ๋ฅด๊ณ ๋ค์ ์๋ฒ์ ์ฌ์์ฒญํ๋ค.
๋ณต์กํ๊ฒ ์ค๋ช ํด๋์์ง๋ง, ๊ฐ๋จํ ๋งํ์๋ฉด ๋ฆฌ์์ค์ ์ ํ๊ถ์ด ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ ์ฐจ์ด์ผ ๋ฟ์ด๋ค. ์ด์ค ๋์ฒด๋ก ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ด ํต์์ ์ผ๋ก ์ฌ์ฉ๋๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์๋ฒ ์ฃผ๋์ ํ์์ HTTP ํค๋์ Accept ํค๋์ ๋ด๊ธด ๊ฐ์ ํตํด ์ด๋ฃจ์ด์ง๋ค. ์ง๊ธ๋ถํฐ ๊ทธ ํต์ ํ๋ฆ์ ์์๋ณด์.
์ฝํ ์ธ ํ์ ํค๋
HTTP ํค๋์๋ ์๋ฒ ์ฃผ๋์ ํ์์ ์ผ์ผํค๊ฒ ํ๋ ํน์ ํค๋๋ค์ด ์๋ค. ์ด๋ค์ ํ์ ํค๋๋ผ๊ณ ๋ถ๋ฅธ๋ค.
ํ์ ํค๋๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๊ฑฐ๋ ์ฐ์ ๋๋ ํํ ์ ๋ณด๋ฅผ ์์ฒญ ์ ํจ๊ป ์๋ฒ์๊ฒ ์ ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด ํด๋ผ์ด์ธํธ๊ฐ ํ๊ตญ์ด๋ก ๋ ๋ฆฌ์์ค๋ฅผ ์๊ตฌํ๋ค๋ฉด, ์๋ฒ์์ ํ์ ํค๋๋ฅผ ๋ฐ๊ณ ํ์ ํ์ฌ ์ ๋ณด๋ฅผ ์๋ตํ๋ ์์ผ๋ก ์ด๋ฃจ์ด ์ง๋ค. ๋ํ '์ ํธ' ํํ ๋ฟ๋ง ์๋๋ผ '์ง์ ์ ๋ฌด' ๋ก์๋ ํ์ฉ๋ ์ ์๋๋ฐ, ์ด๋ก์ธํด ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ ์ ์๋ ๊ฒ๋ค์ ์ ์กํ๋ ํธ๋ํฝ ๋ญ๋น๋ฅผ ์ค์ผ์๋ ์๋ ํน์ง์ด ์๋ค.
ํ์ ํค๋ | ์ค๋ช |
ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฏธ๋์ด ํ์
|
|
ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฌธ์ ์ธ์ฝ๋ฉ | |
ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ถ ์ธ์ฝ๋ฉ gzip , compress , deflate , br , identity |
|
ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ฐ ์ธ์ด |
์ฝํ ์ธ ํ์ ์์
1. ํ์ ํค๋ ๋ฏธ์ ์ฉ
- ํ๊ตญ์์ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฒคํธ ์นํ์ด์ง์ ๋ํ ์กฐํ๋ฅผ ํ์๋ค.
- ์๋ฒ๋ ์ปจํ
์ธ ํํ ํค๋
Content-Languages๋ฅผ ํตํด ์์ ์ ๊ธฐ๋ณธ ์ธ์ด์ธ '์์ด' ๋ก ํ์ด์ง๋ฅผ ์ ์กํ๋ค. (miss)
2. ํ์ ํค๋ ์ ์ฉ
- ํ๊ตญ์์ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฒคํธ ์นํ์ด์ง์ ๋ํ ์กฐํ๋ฅผ ํ์๋ค. ์ด๋
Accept-Languageํ์ ํค๋๋ก 'ko'๋ฅผ ์ง์ ํ์ฌ ์์ฒญ ํ์๋ค. - ์๋ฒ๋ ํ์ ํค๋๋ฅผ ํด์ํ๊ณ , ์๋ฒ์์ 'ํ๊ตญ์ด'๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ปจํ
์ธ ํํ ํค๋
Content-Languages๋ฅผ ํตํด 'ํ๊ตญ์ด' ํ์ด์ง๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ ์กํ๋ค.
์ฝํ ์ธ ์ฐ์ ์์
์์ฒ๋ผ ์๋ฒ๊ฐ ๋นต๋นตํ๊ฒ ์ฌ๋ฌ ์ธ์ด๋ฅผ ์ง์ํ ๊ฒฝ์ฐ, ๋จ์ํ๊ฒ ์๋ฒ์์ ์ง์ํ๋ ์ธ์ด๋ฅผ ์์ฒญํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ ๋งํ ๊ฒฝ์ฐ๋ ๋ฌธ์ ๊ฐ ์์ ๊ฒ์ด๋ค. ํ์ง๋ง ์๋ฒ์์ ์ง์ํ์ง ์๋ ์ธ์ด์ผ ๊ฒฝ์ฐ ๊ทธ ๋ค์ ์ ํธํ๋ ์ต์ฐ์ ์ธ์ด๋ก ์ค์ ํ ํ์๊ฐ ์์ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด ๋ ์ผ์ด๊ฐ ๊ธฐ๋ณธ์ธ ํํ์ด์ง์์ ํ๊ตญ์ด ํ์ด์ง๋ฅผ ์์ฒญํ๋๋ฐ ํ๊ตญ์ด๋ฅผ ์ง์์ํ๋ฉด ๋ ์ผ์ด๊ฐ ๋์ค๋ ๊ฒ์ด ์๋ ์์ด๊ฐ ๋์ค๋๋ก ์ฐ์ ์์๋ฅผ ์ง์ ํ๋ ๊ฒ์ ๋ค ์ ์๋ค.
์ฝํ ์ธ ์ฐ์ ์์ ์์
1. ํ์ ์ฐ์ ์์ ๋ฏธ์ ์ฉ
- ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฒคํธ ํ์ด์ง์ ๋ํ ์กฐํ ์์ฒญ๊ณผ ํจ๊ป
Accept-Languageํ์ ํค๋๋ก 'ํ๊ตญ์ด' ๋ฅผ ์ง์ ํ์๋ค. - ๊ธฐ๋ณธ ์ธ์ด๊ฐ '๋ ์ผ์ด'๋ก ๋ ์๋ฒ๋ 'ํ๊ตญ์ด'๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ ์ธ์ด์ธ '๋ ์ผ์ด' ๋ก ํ์ด์ง๋ฅผ ์ ์กํ๋ค.
2. ํ์ ์ฐ์ ์์ ์ ์ฉ
- ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฒคํธ ํ์ด์ง์ ๋ํ ์กฐํ ์์ฒญ๊ณผ ํจ๊ป
Accept-Languageํ์ ํค๋๋ก ์ฐ์ ์์๋ฅผ ์ง์ ํ์๋ค. ์ง์ ๋ ์ฐ์ ์์๋ `ํ๊ตญ์ด' , '์์ด' ์์ด๋ค. - ์๋ฒ๋ 'ํ๊ตญ์ด'๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ 'ํ๊ตญ์ด' ํ์ด์ง๋ฅผ ์ ์กํด์ค ์ ์๋ค. ํ์ง๋ง ์ฐจ์์์ธ '์์ด'๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ '์์ด' ํ์ด์ง๋ฅผ ์ ์กํ๋ค.
ํ์ ํค๋ ์ฐ์ ์์ ์ง์ ์ง์
์ด์ฒ๋ผ ํ์ ํค๋๋ค์ ํน์ง์ผ๋ก๋ ํ๋ผ๋ฏธํฐ ๊ฐ์ ์ฌ๋ฌ๊ฐ ์ฃผ์ด ์๋ฒ์์ ํด๋น ํ์
์ ์ง์ ์ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ ์ฐ์ ์์๋ฅผ ์ง์ ํ ์ ์๋ค. ์์ ์์์์ Accept-Language ํ์ ํค๋์ ์ฌ๋ฌ ๊ฐ๋ค์ ์ฝค๋ง(,)๋ก ์ด๊ฑฐํจ์ผ๋ก์จ ์ฐ์ ์์๋ฅผ ์ง์ ํ ์ ์๋ค๋ ์์ ์๋ค.
๋ค๋ง ํ์ ํค๋์ ์ฐ์ ์์ ์ง์ ์ ๋ช๊ฐ์ง ๋ฌธ๋ฒ๊ณผ ๊ท์น์ด ์กด์ฌํ๋ค. ์ฐ์ ์ธ์ด ์ง์ (ko) ์์ ์๋ q ๋ Quality Values์ ์ฝ์๋ก์ 0 ~ 1 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง๋ฉฐ ํด ์๋ก ๋์ ์ฐ์ ์์๋ฅผ ๋ปํ๋ค. (๋ง์ผ ์๋ตํ๋ฉด 1 ๊ฐ์ฅ ๋์์ด ๋๋ค)
๋ฐ๋ผ์ ์์ ํค๋๋ฅผ ํด์ํ์๋ฉด ์ฝํ ์ธ ์ธ์ด์ ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๋๋ค.
- ko-KR;q=1 (q์๋ต)
- ko;q=0.9
- en-US;q=0.8
- en:q=0.7
Accept-Language๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ํ์ ํค๋๋ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
ํ์ ํค๋ ์ฐ์ ์์ ์๋ ์ง์
์ถ๊ฐ์ ์ผ๋ก ํ์ ํค๋์ ๊ฐ๋ค์ ์ฐ์ ์์์๋ ๊ตฌ์ฒด์ ์ธ ๊ฐ๋ค์ด ์ฐ์ ๋๋ค๋ ํน์ง์ด ์๋ค. ์๋ฅผ๋ค์ด Accept ํค๋์ ๋ฏธ๋์ด ํ์
๋ค์ ์ฐ์ ์์๋ฅผ ์๋์ ๊ฐ์ด ์ง์ ํด์ฃผ์๋ค๊ณ ํ๋ฉด, ์ด๋ค์ ์ฐ์ ์์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋๋ค.
- text/plain;format=flowed
- text/plain
- text/*
- */*
๋ฌผ๋ก q ํ๋ผ๋ฏธํฐ์๋ ํจ๊ป ์กฐํฉํ์ฌ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ์์ฉํ์๋ฉด ์๋์ ๊ฐ๋ค.
- text/html;level=1
- text/html;q=0.7
- */*;q=0.5
- text/html;level2;q=0.4
- text/*;q=0.3
# ์ฐธ๊ณ ์๋ฃ
๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์ - ๊น์ํ
https://www.w3.org/blog/2006/02/content-negotiation/