Skip to content

Latest commit

ย 

History

History
183 lines (111 loc) ยท 9.86 KB

File metadata and controls

183 lines (111 loc) ยท 9.86 KB

์ฟ ํ‚ค, ์„ธ์…˜, ํ† ํฐ


์ธ์ฆ์ด ์™œ ํ•„์š”ํ•œ๊ฐ€?

  • HTTP ํ”„๋กœํ† ์ฝœ์€ ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless), ๋ฌด์ƒํƒœ์„ฑ(Stateless) ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

    -> ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธ์ฆ ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

    -> ํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•˜๋”๋ผ๋„ ๋‹ค์Œ ์š”์ฒญ์‹œ ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์˜ ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์ธ์ฆ ์ ˆ์ฐจ๊ฐ€ ์ค‘๋ณต๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

    -> ์ฟ ํ‚ค, ์„ธ์…˜, ํ† ํฐ์œผ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.



์ธ์ฆ ๋ฐฉ์‹

  1. HTTP ๊ธฐ๋ณธ ์ธ์ฆ
  • ๊ฐ€์žฅ ์ž˜ ์•Œ๋ ค์ง„ HTTP ์ธ์ฆ ๊ทœ์•ฝ์œผ๋กœ, ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ Base64 ์ธ์ฝ”๋”ฉํ•˜์—ฌ Header์— ๋‹ด์•„ ์ „์†กํ•˜๋Š” ์ธ์ฆ ๋ฐฉ์‹์ด๋‹ค. ์ด ๋ฐฉ์‹์€ request๋ฅผ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉ์ž์˜ ๊ณ„์ • ์ •๋ณด๋ฅผ Header์— ๋‹ด์•„ ์ „์†กํ•˜๋ฏ€๋กœ ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๋‹ค.
  1. ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ
  • ์„œ๋ฒ„์˜ ์„ธ์…˜๊ณผ ํด๋ผ์ด์–ธํŠธ์˜ ์ฟ ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ธ์ฆ ๋ฐฉ์‹์ด๋‹ค.
  1. ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ
  • ํด๋ผ์ด์–ธํŠธ์˜ ์„ธ์…˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” ํ† ํฐ์„ ํ™œ์šฉํ•˜๋Š” ์ธ์ฆ ๋ฐฉ์‹์ด๋‹ค.
  • ํ† ํฐ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€ ์„œ๋ฒ„๋กœ reqeust๋ฅผ ๋ณด๋‚ผ ๋•Œ, ์ธ์ฆ ํ—ค๋”์— ๋‹ด์•„ ๋ณด๋‚ธ๋‹ค. ์„œ๋ฒ„๋Š” ํ† ํฐ์„ ๊ฒ€์ฆํ•˜๊ณ  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ธ์ฆ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ค„์ง„๋‹ค.



์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ(์ฟ ํ‚ค & ์„ธ์…˜)

์ฟ ํ‚ค

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋– ํ•œ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•  ๊ฒฝ์šฐ, ๊ทธ ์‚ฌ์ดํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ €์— ์„ค์น˜๋˜๋Š” key-value ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์ด๋‹ค.


๋™์ž‘ ๋ฐฉ์‹

  1. ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ request๋ฅผ ๋ณด๋‚ธ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ์ƒํƒœ ์œ ์ง€๋ฅผ ํ•˜๋ ค๋Š” ๊ฐ’์„ ์ฟ ํ‚ค๋กœ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ response์˜ HTTP ํ—ค๋”(Set-Cookie)์— ํฌํ•จํ•˜์—ฌ ์ „์†กํ•œ๋‹ค.
  3. ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์ „๋‹ฌ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ ๋ฐ›์•„ ์ €์žฅํ•˜๊ณ , ๋‹ค์Œ request๋ฅผ ์ „์†กํ•  ๋•Œ HTTP ํ—ค๋”(Cookie)์— ๋‹ด์•„์„œ ์ „์†กํ•œ๋‹ค.

์ฟ ํ‚ค์˜ ๋ฌธ์ œ์ 

  1. ์ฟ ํ‚ค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋งค ํ—ค๋”์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋‹นํ•œ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
  2. ํด๋ผ์ด์–ธํŠธ์˜ request ํ—ค๋”์— ์ฟ ํ‚ค ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋‹ด์•„ ์ „์†กํ•˜๊ณ  ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ ์œ„๋ณ€์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๋‹ค.
  3. ์ฟ ํ‚ค์˜ ๊ฐœ์ˆ˜, ํฌ๊ธฐ๊ฐ€ ํ•œ์ •๋˜์–ด์žˆ๋‹ค.
  4. ์›น ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์ฟ ํ‚ค์— ๋Œ€ํ•œ ์ง€์› ํ˜•ํƒœ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์›น๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ์ €์žฅํ•œ ์ฟ ํ‚ค๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

์„ธ์…˜

์ฟ ํ‚ค์˜ ๋ฌธ์ œ์ ์œผ๋กœ ์ธํ•œ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ธฐ์ˆ ๋กœ, ์ผ์ • ์‹œ๊ฐ„๋™์•ˆ ๊ฐ™์€ ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜ค๋Š” ์ผ๋ จ์˜ ์š”๊ตฌ๋ฅผ ํ•˜๋‚˜์˜ ์ƒํƒœ๋กœ ๋ณด๊ณ  ๊ทธ ์ƒํƒœ๋ฅผ ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€์‹œํ‚จ๋‹ค.

  • ํ•˜๋‚˜์˜ ์ƒํƒœ = ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๊ณ ์œ ํ•œ ์‹๋ณ„๊ฐ’ = SessionId



์ฟ ํ‚ค์™€ ์„ธ์…˜

ํ™œ์šฉ ๋ฐฉ์‹


  1. ์„œ๋ฒ„์— ์ €์žฅ๋œ ์„ธ์…˜์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ SessionId๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์šฉ๋„๋กœ ์ฟ ํ‚ค๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.
  2. ์œ ํŠœ๋ธŒ, ๊ตฌ๊ธ€์—์„œ ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•œ ๋™์˜์ƒ์ด๋‚˜ ๊ฒ€์ƒ‰ ๊ธฐ๋ก์„ ์ฟ ํ‚ค์— ์ €์žฅํ•ด๋‘๊ณ , ํ•ด๋‹น ์ฟ ํ‚ค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฒ€์ƒ‰ ์ตœ์ ํ™”์— ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
  3. ์‡ผํ•‘๋ฌ  ์‚ฌ์ดํŠธ์—์„œ๋Š” ์‚ฌ์šฉ์ž์˜ ์‡ผํ•‘ ๋™ํ–ฅ์„ ์ฟ ํ‚ค์— ์ €์žฅํ•˜์—ฌ, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œํ’ˆ์„ ์ถ”์ฒœํ•œ๋‹ค.

์ฟ ํ‚ค vs ์„ธ์…˜

Cookie Session
์ €์žฅ์œ„์น˜ ํด๋ผ์ด์–ธํŠธ์˜ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์ •ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” ํ•˜๋“œ๋””์Šคํฌ์— ์ €์žฅ ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ
์ €์žฅํ˜•์‹ Text Object
๋งŒ๋ฃŒ์‹œ์  ์ฟ ํ‚ค ์ €์žฅ์‹œ expires ์†์„ฑ์œผ๋กœ ์„ค์ •(์„ค์ • ์—†์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ ์‹œ) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๊ทธ์•„์›ƒํ•˜๊ฑฐ๋‚˜, ์„ค์ • ์‹œ๊ฐ„๋™์•ˆ ๋ฐ˜์‘์ด ์—†์œผ๋ฉด ๋ฌดํšจํ™” ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํ•œ ์‹œ์  ์•Œ ์ˆ˜ ์—†์Œ
๋ฆฌ์†Œ์Šค ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜๊ณ  ํด๋ผ์ด์–ธํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ์ž์› ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ ์„ธ์…˜์€ ์„œ๋ฒ„์— ์ €์žฅ๋˜๊ณ , ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋กœ๋”ฉ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜์ด ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐจ์ง€ํ•จ
์šฉ๋Ÿ‰์ œํ•œ ํด๋ผ์ด์–ธํŠธ๋„ ๋ชจ๋ฅด๊ฒŒ ์ ‘์†๋˜๋Š” ์‚ฌ์ดํŠธ์— ์˜ํ•˜์—ฌ ์„ค์ •๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฟ ํ‚ค๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฑธ ๋ง‰๊ณ ์ž ํ•œ ๋„๋ฉ”์ธ๋‹น 20๊ฐœ, ํ•˜๋‚˜์˜ ์ฟ ํ‚ค ๋‹น 4KB๋กœ ์ œํ•œํ•ด ๋‘  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘์†ํ•˜๋ฉด ์„œ๋ฒ„์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋ฏ€๋กœ ๊ฐœ์ˆ˜๋‚˜ ์šฉ๋Ÿ‰ ์ œํ•œ ์—†์Œ



์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๊ณผ์ •


  1. ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
  2. ์„œ๋ฒ„๋Š” DB๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๊ฒ€์ฆํ•˜๊ณ , ์ •ํ™•ํ•˜๋‹ค๋ฉด ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•  ๊ณ ์œ  SessionID๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ดํ›„ HTTP response ํ—ค๋”์˜ Set-Cookie ํ•„๋“œ์— SessionID๋ฅผ ๋‹ด์•„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ๋Š” ์ „๋‹ฌ๋ฐ›์€ SessionID๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅํ•˜๊ณ , ์š”์ฒญ์‹œ HTTP request ํ—ค๋”์˜ Cookie ํ•„๋“œ์— ์ฟ ํ‚ค๋ฅผ ๋‹ด์•„ ์„œ๋ฒ„์— ์ „๋‹ฌํ•œ๋‹ค.
  4. ์„œ๋ฒ„๋Š” ์ฟ ํ‚ค๋ฅผ ๋ฐ›์•„ ์„ธ์…˜ ์ €์žฅ์†Œ๋ฅผ ํ†ตํ•ด SessionID์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•œ ์ดํ›„, ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.(์„ธ์…˜์ €์žฅ์†Œ๋Š” WAS์˜ ์„ธ์…˜, RDB, In-memory DB๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.)

์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์˜ ๋ฌธ์ œ์ 

  1. ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ฌธ์ œ
  • ๋งŒ์•ฝ ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•  ์„ธ์…˜ ์ •๋ณด๊ฐ€ ๋งŽ์•„์ง„๋‹ค. ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋””์Šคํฌ ๋ถ€ํ•˜๋ฅผ ์ผ์œผํ‚จ๋‹ค.
  1. ํ™•์žฅ์„ฑ ๋ฌธ์ œ
  • ๋” ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์›น ์„œ๋ฒ„๋ฅผ ์ฆ์„คํ•  ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด ์›น ์„œ๋ฒ„์— ๊ธฐ์กด์˜ ์„ธ์…˜ ์ •๋ณด๋ฅผ ์˜ฎ๊ฒจ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Scaling Out์ด ์–ด๋ ค์›Œ์ง„๋‹ค.
  1. CORS ๋ฐฉ์‹
  • ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„ธ์…˜ ๊ด€๋ฆฌ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ฟ ํ‚ค๋Š” ๋‹จ์ผ ๋„๋ฉ”์ธ/์„œ๋ธŒ ๋„๋ฉ”์ธ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— Cross-Origin ์—์„œ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ด์ฒ˜๋Ÿผ ์ฟ ํ‚ค๋ฅผ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋ฒˆ๊ฑฐ๋กญ๋‹ค๋Š” ์ ์—์„œ ์ฟ ํ‚ค, ์„ธ์…˜์„ ์ด์šฉํ•œ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค.



ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ(JWT ํ† ํฐ)

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์€ ์ธ์ฆ ๋ฐ›์€ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜๊ณ , ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ํ—ค๋”์— ํ† ํฐ์„ ๋‹ด์•„ ๋ณด๋‚ด๋„๋กํ•˜์—ฌ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•œ๋‹ค.

  • ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ , ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ๋งŒ์œผ๋กœ ์ธ์ฆ์ฒ˜๋ฆฌํ•œ๋‹ค. (statelessํ•œ ๊ตฌ์กฐ)

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๊ณผ์ •


  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๊ฒ€์ฆํ•˜๊ณ , ์ •ํ™•ํ•˜๋‹ค๋ฉด ์‚ฌ์šฉ์ž ์‹๋ณ„ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Token์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค
  3. ํด๋ผ์ด์–ธํŠธ๋Š” ์ „๋‹ฌ๋ฐ›์€ Token์„ ์ฟ ํ‚ค๋‚˜ localStorage, sessionStorage ๋“ฑ์— ์ €์žฅํ•˜๊ณ , ์ดํ›„ ์š”์ฒญ์‹œ์— Token์„ ๋‹ด์•„ ์ „๋‹ฌํ•œ๋‹ค.
  4. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ Token์„ ๊ฒ€์ฆํ•˜๊ณ  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์˜ ์ด์ 

  1. Stateless & ํ™•์žฅ์„ฑ
  • ํ† ํฐ์€ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋Š” Statelessํ•˜๋ฉฐ, ์„œ๋ฒ„ ํ™•์žฅ์‹œ ์„ธ์…˜ ์ •๋ณด๋กœ ์ธํ•œ Scaling Out์— ์ œ์•ฝ์ด ์—†๋‹ค.
  1. ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ ๋ฐ ๋„๋ฉ”์ธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ -> CORS ๋ฌธ์ œ ํ•ด๊ฒฐ
  • ๋””๋ฐ”์ด์Šค์˜ ์ข…๋ฅ˜ ๋ฐ ๋„๋ฉ”์ธ๊ณผ ์ƒ๊ด€์—†์ด ํ† ํฐ ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ฃผ๋กœ JWT ํ† ํฐ์„ ์‚ฌ์šฉ)

JWT(JSON Web Token)

JSON ํฌ๋งท์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” Claim(key-value ํ˜•์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํ•œ ์Œ์˜ ์ •๋ณด) ๊ธฐ๋ฐ˜์˜ Web Token์œผ๋กœ ๋ชจ๋ฐ”์ผ์ด๋‚˜ ์›น์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์•”ํ˜ธํ™” ํ† ํฐ์ด๋‹ค.


JWT์˜ ์žฅ๋‹จ์ 

์žฅ์  ๋‹จ์ 
1. Header์™€ Payload๋ฅผ ๊ฐ€์ง€๊ณ  Signature๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์œ„๋ณ€์กฐ๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค. 1. ์ฟ ํ‚ค/์„ธ์…˜๊ณผ ๋‹ค๋ฅด๊ฒŒ JWT๋Š” ํ† ํฐ์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด, ์ธ์ฆ ์š”์ฒญ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•ด์ง„๋‹ค.
2. ์ธ์ฆ ์ •๋ณด์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”์—†๋‹ค. 2. Payload ์ž์ฒด๋Š” ์•”ํ˜ธํ™” ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €์˜ ์ค‘์š”ํ•œ ์ •๋ณด๋Š” ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.
3. JWT๋Š” ํ† ํฐ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ •๋ณด์™€ ์ „๋‹ฌํ•  ์ •๋ณด ๋ฐ ํ† ํฐ์ด ๊ฒ€์ฆ๋ฌ์Œ์„ ์ฆ๋ช…ํ•˜๋Š” ์„œ๋ช… ๋“ฑ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ž์ฒด์ ์œผ๋กœ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค. 3. ํ† ํฐ์€ ํ•œ๋ฒˆ ๋ฐœ๊ธ‰ ๋˜๋ฉด ์œ ํšจ๊ธฐ๊ฐ„์ด ๋งŒ๋ฃŒ๋  ๋•Œ ๊ณ„์† ์‚ฌ์šฉ๋˜์–ด ํƒˆ์ทจ ๋‹นํ•˜๊ฒŒ ๋˜๋ฉด ๋Œ€์ฒ˜ํ•˜๊ธฐ ํž˜๋“ค๋‹ค.

JWT์˜ ๋ณด์•ˆ ์ „๋žต

  1. ์งง์€ ๋งŒ๋ฃŒ๊ธฐํ•œ ์„ค์ •
  • ํ† ํฐ์˜ ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์งง๊ฒŒ ์„ค์ •ํ•˜์—ฌ ํƒˆ์ทจ๋˜๋”๋ผ๋„ ํ”ผํ•ด๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. -> ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ์ž์ฃผ ํ•ด์•ผํ•œ๋‹ค๋Š” ๋ถˆํŽธํ•จ์ด ์กด์žฌํ•œ๋‹ค.
  1. Refresh Token


  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ์„œ๋ฒ„๋Š” Access Token๊ณผ ํ•จ๊ป˜ ๊ธด ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ ๊ฐ€์ง„ Refresh Token์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ์ „๋žต์„ ์ทจํ•œ๋‹ค.
    • ์ดํ›„ Access Token์ด ๋งŒ๋ฃŒ๋˜์—ˆ์„ ๋•Œ, Refresh Token์„ ์‚ฌ์šฉํ•˜์—ฌ Access Token์˜ ์žฌ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•œ๋‹ค.
      • ์„œ๋ฒ„๋Š” DB์— ์ €์žฅ๋œ Refresh Token๊ณผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ Refresh Token์„ ๋น„๊ตํ•˜์—ฌ ์œ ํšจํ•œ ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด Access Token์„ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค.

Refresh Token์„ ํ™œ์šฉํ•˜๋ฉด Access Token์˜ ๋งŒ๋ฃŒ ๊ธฐํ•œ์„ ์งง๊ฒŒ ์„ค์ •ํ•˜๋ฉด์„œ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž์ฃผ ๋กœ๊ทธ์ธ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋˜ํ•œ ์„œ๋ฒ„๊ฐ€ ๊ฐ•์ œ๋กœ Refresh Token์„ ๋งŒ๋ฃŒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์„œ๋ฒ„์˜ Statelessํ•จ์„ ๊ฐ–๊ฒŒ ํ•œ๋‹ค๋Š” ์ ์—์„œ ์ด์ ์ด ์žˆ๋Š” JWT์˜ ์žฅ์ ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋ˆ„๋ฆด ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.