HTTP Stateless

HTTP (HyperText Transfer Protocol)

  • TCP/IP ๋„คํŠธ์›Œํฌ ์•„ํ‚คํ…์ฒ˜์˜ ์‘์šฉ ๊ณ„์ธต(Application Layer)์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ๋ณด๋‚ด๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ์— Start Line๊ณผ Header ๋“ฑ์„ ๋ถ™์—ฌ ์„œ๋ฒ„์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

Stateless (๋ฌด์ƒํƒœ์„ฑ)

  • "Stateless"๋ž€ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ(Context)๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ด์ „ ์š”์ฒญ์ด๋‚˜ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์ด๋กœ ์ธํ•œ ์žฅ์ ์€ ์„œ๋ฒ„์˜ ํ™•์žฅ์„ฑ(Scale-out)์ด ์œ ๋ฆฌํ•˜๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์–ด๋–ค ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด๋„ ์ƒ๊ด€์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • ๋Œ€์‹ , ํ•œ ๋ฒˆ์˜ ์š”์ฒญ์— ์ฒ˜๋ฆฌ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    • ํ•œ๋ฒˆ์— ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ์š”์ฒญํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ์— "์˜์กด"ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŠน์ง•

  • ๋ณธ์งˆ์ ์œผ๋กœ HTTP ํ”„๋กœํ† ์ฝœ์€ "๋ฌธ์„œ(HTML)"๋ฅผ "์ „๋‹ฌ"ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ดˆ๊ธฐ์˜ HTTP๋Š” ๋‹จ์ˆœํžˆ ๋ฌธ์„œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•  ๋ฟ, ํด๋ผ์ด์–ธํŠธ์˜ "์ƒํƒœ"๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์กด์žฌํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ˆ„๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ–ˆ๋Š”์ง€, ์ด์ „์— ์–ด๋–ค ํŽ˜์ด์ง€๋ฅผ ๋ดค๋Š”์ง€ ์„œ๋ฒ„๋Š” ๊ธฐ์–ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์ด์ฒ˜๋Ÿผ HTTP ์ž์ฒด์—๋Š” ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์ฟ ํ‚ค(Cookie)์™€ ์„ธ์…˜(Session) ๊ธฐ์ˆ ์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ฟ ํ‚ค๋Š” 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