HTTP Stateless
HTTP (HyperText Transfer Protocol)
TCP/IP ๋คํธ์ํฌ ์ํคํ ์ฒ์ ์์ฉ ๊ณ์ธต(Application Layer)์์ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ ๋๋ค.
ํด๋ผ์ด์ธํธ๋ ์์ ์ด ๋ณด๋ด๊ณ ์ ํ๋ ๋ฐ์ดํฐ์ Start Line๊ณผ Header ๋ฑ์ ๋ถ์ฌ ์๋ฒ์ ์ ์กํฉ๋๋ค.
Stateless (๋ฌด์ํ์ฑ)
"Stateless"๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ(Context)๋ฅผ ๋ณด์กดํ์ง ์๋๋ค๋ ๋ป์ ๋๋ค.
์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ด์ ์์ฒญ์ด๋ ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ๊ธฐ์ตํ์ง ์์ต๋๋ค.
์ด๋ก ์ธํ ์ฅ์ ์ ์๋ฒ์ ํ์ฅ์ฑ(Scale-out)์ด ์ ๋ฆฌํ๋ค๋ ์ ์ ๋๋ค. ์๋ฒ๊ฐ ์ํ๋ฅผ ๊ธฐ์ตํ์ง ์์ผ๋ฏ๋ก, ์ด๋ค ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํด๋ ์๊ด์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋์ , ํ ๋ฒ์ ์์ฒญ์ ์ฒ๋ฆฌ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ด์์ ๋ณด๋ด์ผ ํ๋ค๋ ํน์ง์ด ์์ต๋๋ค.
ํ๋ฒ์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ด์์ ์์ฒญํ๊ธฐ ๋๋ฌธ์ ํน์ ์๋ฒ์์ ์ฐ๊ฒฐ์
"์์กด"ํ์ง ์์ต๋๋ค.
ํน์ง
๋ณธ์ง์ ์ผ๋ก HTTP ํ๋กํ ์ฝ์ "๋ฌธ์(HTML)"๋ฅผ "์ ๋ฌ"ํ๋ ๊ฒ์ด ๋ชฉ์ ์ด์์ต๋๋ค.
์ด๊ธฐ์ HTTP๋ ๋จ์ํ ๋ฌธ์๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ๋ง ํ ๋ฟ, ํด๋ผ์ด์ธํธ์ "์ํ"๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์กด์ฌํ์ง ์์์ต๋๋ค. ์ฆ, ๋๊ฐ ๋ก๊ทธ์ธ์ ํ๋์ง, ์ด์ ์ ์ด๋ค ํ์ด์ง๋ฅผ ๋ดค๋์ง ์๋ฒ๋ ๊ธฐ์ตํ์ง ์์ต๋๋ค.
์ด์ฒ๋ผ HTTP ์์ฒด์๋ ์ํ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด
์ฟ ํค(Cookie)์์ธ์ (Session)๊ธฐ์ ์ด ๋ฑ์ฅํ๊ฒ ๋์์ต๋๋ค.
์ฟ ํค(Cookie)์ ์ฐ๊ฒฐ์ ํ๋จ
์ฟ ํค๋
Key-Valueํํ์ ๋ฐ์ดํฐ๋ก, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํต์ ํ๋ ๊ณผ์ ์์ ํ์ํ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ) ์ชฝ์ ์ ์ฅํด ๋๋ ์๋จ์ ๋๋ค.์๋ฒ๋ ์ด ์ฟ ํค๋ฅผ ํตํด ์์ฒญ์ ๋ณด๋ธ ํด๋ผ์ด์ธํธ๊ฐ ๋๊ตฌ์ธ์ง ์๋ณํ๊ณ , ๋ ผ๋ฆฌ์ ์ธ "์ฐ๊ฒฐ" ์ํ๋ฅผ ํ๋จํ๊ฒ ๋ฉ๋๋ค.
REST์ Stateless
REST ์ํคํ
์ฒ์ ์ฃผ์ ์กฐ๊ฑด ์ค ํ๋๋ "Stateless(๋ฌด์ํ)"์
๋๋ค. ์ด ๊ท์น์ ์งํค๊ธฐ ์ํด ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ด๋ค ์ํ๋ ์ ์ฅํ์ง ์์์ผ ํฉ๋๋ค.
๐ค ๊ทธ๋ผ ์ฟ ํค/์ธ์ ์ ์ฌ์ฉํด์ REST API๋ฅผ ์ค๊ณํ๋ฉด ์ด๋ Statefulํ๊ธฐ ๋๋ฌธ์ ์๋ฐฐํ๊ฒ์ธ๊ฐ?
์ฟ ํค๋ ์ธ์ ์ ํ์ฉํ ์ธ์ฆ ์ ๋ณด. ์ฆ, ์๋ฒ-ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋์ด Stateless์ ์ด๊ธ๋ ๊ฒ์ธ๊ฐ?
๊ฒฐ๋ก ์ ์ผ๋ก, ์๋ฒ ๊ธฐ๋ฐ์ ์ธ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ REST์ Stateless ์์น์ ์๋ฐฐํ๋ ๊ฒ(Stateful)์ด ๋ง๋ ๊ฒ ๊ฐ์ต๋๋ค.
REST์ Stateless ์กฐ๊ฑด์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ(Context)๋ฅผ ๋ณด์กดํ์ง ์์์ผ ํ๋ค๋ ๊ฒ์ธ๋ฐ, ์ธ์ ๋ฐฉ์์ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ "์ธ์ฆ ์ ๋ณด"๋ฅผ ์ ์ฅํ๊ณ , ์ด๋ฅผ ํตํด ์ฐ๊ฒฐ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ Statefulํ ๊ตฌ์กฐ๊ฐ ๋ฉ๋๋ค.
HTTP ํน์ง์ธ stateless๋ ๋งค๋ฒ ์์ฒญ-์๋ต ๊ณผ์ ์ด ๋๋๋ฉด ์ฐ๊ฒฐ์ ๋์ด๋ฒ๋ฆฌ๊ณ ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ต๋๋ค.. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด์ ์์ฒญ์์ ํด๋ผ์ด์ธํธ์์ ๋ก๊ทธ์ธ์ ํ๋์ง ์ํ๋์ง ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
HTTP์ ๋ชฉ์ ์ ๋ฌธ์ ์ ๋ฌ์ด์ง๋ง, ํ์ฌ๋ ๋ก๊ทธ์ธํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ๋ ํฉ๋๋ค. ์ฌ๊ธฐ์ stateless๋ก๋ง ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ์๋ ํ๋ค๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ ์ํฌํธ ํด์ฃผ๊ธฐ ์ํด ์ฟ ํค/์ธ์ ์ ํ์ฉํ๊ธฐ ์์ํ์ต๋๋ค.
์๋ฐํ ์๋ฏธ์์๋ REST ์ํคํ ์ฒ์ ์กฐ๊ฑด์ ์๋ฒฝํ ์ถฉ์กฑํ์ง ๋ชปํฉ๋๋ค.
ํ์ง๋ง, ๋จ์ํ ๊ท์น์ ์งํค๊ธฐ ์ํด ๋ฌด์กฐ๊ฑด์ ์ธ ๋ฐฉ๋ฒ์ ์ ํํ ํ์๋ ์์ต๋๋ค.
RESTful:
๋ง์ฝ ์๋ฒ์ ํ์ฅ์ฑ(Scale-out)์ด ์ต์ฐ์ ์ด๊ฑฐ๋ ์๊ฒฉํ REST API๋ฅผ ์ค๊ณํด์ผ ํ๋ค๋ฉด, ์ํ๋ฅผ ์๋ฒ์ ์ ์ฅํ์ง ์๋ ํ ํฐ(JWT) ๊ธฐ๋ฐ ์ธ์ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํฉํฉ๋๋ค.
ํ์ค์ ์ธ ํํ (Session):
๋ฐ๋ฉด, ๋ณด์์์ ์ด์ ๋ก ์๋ฒ๊ฐ ๊ฐ๋ ฅํ ์ ์ด๊ถ(์ฆ์ ์ฐจ๋จ ๋ฑ)์ ๊ฐ์ ธ์ผ ํ๊ฑฐ๋ ์์คํ ์ ๋จ์์ฑ์ด ์ค์ํ๋ค๋ฉด, Stateless ์์น์ ์ผ๋ถ ํฌ๊ธฐํ๋๋ผ๋ ์ธ์ ๋ฐฉ์์ ์ ํํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์ ์์ต๋๋ค.
์ฆ, "์ธ์ ์ ์ฌ์ฉํ๋ฉด REST์ Stateless ํน์ฑ์ ์ฝํด์ง์ง๋ง, ์ด๋ ์๋น์ค์ ๋ชฉ์ ๊ณผ ์๊ตฌ์ฌํญ์ ๋ง์ถฐ ์๋์ ์ผ๋ก ์ ํํ ํธ๋ ์ด๋์คํ(Trade-off)"๋ฅผ ๊ณ ๋ คํ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์๊ฒ ์ต๋๋ค.
Last updated