๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Web/Concept

[Web] ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ๊ณผ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ

 

๐Ÿ’ก ์„ธ์…˜๊ณผ JWT๋กœ ๋Œ€ํ‘œ๋˜๋Š” Web ์˜ ์ธ์ฆ ๋ฐฉ์‹์— ๋Œ€ํ•ด ํ•˜์ž!

   ๋…ธ์…˜์—์„œ ๋ณด๊ธฐ

 


๐Ÿ“Œ ์š”์•ฝ

  • ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ๊ณผ ํ† ํฐ ๊ธฐ๋ฐ˜ ์œ์ฆ ์‹œ์Šคํ…œ์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ
    • ์„œ๋ฒ„ ์ธก์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ธฐ์–ต
  • ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ
    • ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ๋‹ด์•„๋‘์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰ statelessํ•˜๋‹ค.

๐ŸŒง๏ธ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ

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

  • ๊ธฐ์กด์˜ ์ธ์ฆ ์‹œ์Šคํ…œ์€ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ ๋ฐฉ์‹์œผ๋กœ, ์„œ๋ฒ„ ์ธก์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์…˜์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋””์Šคํฌ, ๋˜๋Š” DB ๋“ฑ์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด → ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๊ณ„์†ํ•ด์„œ ์œ ์ง€ํ•˜๊ณ , ์ด ์ •๋ณด๋ฅผ ์„œ๋น„์Šค์— ์ด์šฉํ•œ๋‹ค๋Š” ์ ์—์„œ Stateful ์„œ๋ฒ„๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Ex) ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์‹œ, ์„ธ์…˜์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•ด๋‘๊ณ  ์„œ๋น„์Šค ์ œ๊ณต ์‹œ ์‚ฌ์šฉํ•œ๋‹ค.

 

์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์˜ ๋™์ž‘ ๊ณผ์ •

 

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

 

  1. ํด๋ผ์ด์–ธํŠธ์— ๋กœ๊ทธ์ธ ์š”์ฒญ์ด ๋“ค์–ด์˜จ๋‹ค.
  2. ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์œ ์ € ์„ธ์…˜์„ ๋งŒ๋“ค๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋‚˜ DB์— ์ €์žฅํ•œ๋‹ค.
  3. ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์„ธ์…˜ ID๋ฅผ ๋ณด๋‚ธ๋‹ค.
  4. ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ €์— ์„ธ์…˜์˜ ID๋งŒ ์ฟ ํ‚ค์— ์ €์žฅํ•˜๊ฒŒ ํ•œ๋‹ค.
  5. ์„ธ์…˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋ฏ€๋กœ, ํ™•์žฅ ์‹œ ๋ชจ๋“  ์„œ๋ฒ„๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ„๋„์˜ ์ค‘์•™ ์„ธ์…˜ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•˜๋‹ค.
  • ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹์€ ์†Œ๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ๋Š” ์—ฌ์ „ํžˆ ๋งŽ์ด ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์„œ๋ฒ„๋ฅผ ํ™•์žฅํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์กด์žฌํ•œ๋‹ค.

 

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

  1. ์„ธ์…˜
    • ์„ธ์…˜(Session)์ด๋ž€, ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ์„ ํ•  ๋•Œ, ์„œ๋ฒ„๊ฐ€ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์ •๋ณด์ด๋‹ค.
    • ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, ์„ธ์…˜์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ → ๋กœ๊ทธ์ธ ์ค‘์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚  ๊ฒฝ์šฐ ์„œ๋ฒ„์˜ RAM์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
      • ์ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด DB์— ์ €์žฅ์„ ํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, ์ด ์—ญ์‹œ DB์— ๋ฌด๋ฆฌ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  2. ํ™•์žฅ์„ฑ
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜๋ฉด ๋” ๋งŽ์€ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ๋ฆฌ๊ฑฐ๋‚˜, ์ปดํ“จํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋“ฑ์˜ ์„œ๋ฒ„๋ฅผ ํ™•์žฅํ•ด์•ผ ํ•œ๋‹ค.
  • ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด, ์„ธ์…˜์„ ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ์‹œ์Šคํ…œ ๋˜ํ•œ ์„ค๊ณ„ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ด ๊ณผ์ •์ด ๋งค์šฐ ์–ด๋ ต๊ณ  ๋ณต์žกํ•œ ๊ฒƒ
  • ์ค‘์•™ ์„ธ์…˜ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ์—†์œผ๋ฉด, ์‹œ์Šคํ…œ ํ™•์žฅ์— ์–ด๋ ค์›€์ด ์ƒ๊ธด๋‹ค.
  • ์ค‘์•™ ์„ธ์…˜ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ์žฅ์• ๊ฐ€ ์ผ์–ด๋‚˜๋ฉด, ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.
  1. CORS(Cross-Origin Resource Sharing)
  • ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ธ์…˜์„ ๊ด€๋ฆฌํ•  ๋•Œ, ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฟ ํ‚ค๋Š” ๋‹จ์ผ ๋„๋ฉ”์ธ ๋ฐ ์„œ๋ธŒ ๋„๋ฉ”์ธ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ฟ ํ‚ค๋ฅผ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ฒˆ๊ฑฐ๋กœ์šด ๊ฒƒ

๐Ÿ’ก ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ

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

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

 

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์˜ ๋™์ž‘ ๊ณผ์ •

 

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

 

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค.
  2. ์„œ๋ฒ„ ์ธก์—์„œ ํ•ด๋‹น ์ •๋ณด๋ฅผ ๊ฒ€์ฆํ•œ๋‹ค.
  3. ์ •๋ณด๊ฐ€ ์ •ํ™•ํ•˜๋‹ค๋ฉด, ์„œ๋ฒ„ ์ธก์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ Signed ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค.
    • Signed๋Š” ํ•ด๋‹น ํ† ํฐ์ด ์„œ๋ฒ„์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋ฐœ๊ธ‰๋œ ํ† ํฐ์ž„์„ ์ฆ๋ช…ํ•˜๋Š” Signature๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  4. ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์ „๋‹ฌ๋ฐ›์€ ํ† ํฐ์„ ์ €์žฅํ•ด๋‘๊ณ , ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ํ† ํฐ์„ ์„œ๋ฒ„์— ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค.
    • ์ด๋•Œ, HTTP ์š”์ฒญ ํ—ค๋”์— ํ† ํฐ์„ ํฌํ•จ์‹œํ‚จ๋‹ค.
  5. ์„œ๋ฒ„๋Š” ํ† ํฐ์„ ๊ฒ€์ฆํ•˜๊ณ  → ์š”์ฒญ์— ์‘๋‹ตํ•œ๋‹ค.

 

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

  1. ๋ฌด์ƒํƒœ์„ฑ(Stateless) & ํ™•์žฅ์„ฑ(Scalability)
  • ํ† ํฐ์€ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅ๋˜๋ฏ€๋กœ, ์„œ๋ฒ„๋Š” ์™„์ „ํžˆ Statelessํ•˜๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ™•์žฅํ•˜๊ธฐ์— ๋งค์šฐ ์ ํ•ฉํ•˜๋‹ค.
  • ๋งŒ์•ฝ, ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ์„œ๋ฒ„ ์ธก ์„ธ์…˜์— ์ €์žฅ๋œ ๊ฒฝ์šฐ, ์„œ๋ฒ„๋ฅผ ํ™•์žฅํ•˜์—ฌ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ์‚ฌ์šฉ์ž๋Š” ์ฒ˜์Œ ๋กœ๊ทธ์ธ์„ ํ–ˆ๋˜ ์„œ๋ฒ„์—๋งŒ ์š”์ฒญ์„ ๋ฐ›๋„๋ก ์„ค์ •์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
    • ํ•˜์ง€๋งŒ, ํ† ํฐ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์–ด๋–ค ์„œ๋ฒ„๋กœ ์š”์ฒญ์ด ์™€๋„ ์ƒ๊ด€ ์—†๋‹ค!
  1. ๋ณด์•ˆ์„ฑ
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ, ๋” ์ด์ƒ ์ฟ ํ‚ค๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ → ์ฟ ํ‚ค ์‚ฌ์šฉ์— ์˜ํ•œ ์ทจ์•ฝ์ ์ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.
    • ํ•˜์ง€๋งŒ, ํ† ํฐ ํ™˜๊ฒฝ์˜ ์ทจ์•ฝ์ ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์–ด, ์ด์— ๋Œ€๋น„๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  1. ํ™•์žฅ์„ฑ(Extensibility)
  • Extensibility ๋Š” ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ถ„์•ผ์˜ ํ™•์žฅ์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค.
    • Scalability : ์‹œ์Šคํ…œ์˜ ํ™•์žฅ์„ฑ์„ ์˜๋ฏธ
  • ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ, ํ† ํฐ์— ์„ ํƒ์ ์ธ ๊ถŒํ•œ๋งŒ ๋ถ€์—ฌํ•˜์—ฌ ๋ฐœ๊ธ‰ ๊ฐ€๋Šฅ
    • OAuth์˜ ๊ฒฝ์šฐ, Facebook, Google๊ณผ ๊ฐ™์€ ์†Œ์…œ ๊ณ„์ •์„ ์ด์šฉํ•ด ๋‹ค๋ฅธ ์›น ์„œ๋น„์Šค์—์„œ ๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅ
  1. ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ ๋ฐ ๋„๋ฉ”์ธ
  • ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์˜ ๋ฌธ์ œ์  ์ค‘ ํ•˜๋‚˜์ธ CORS ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋น„์Šค ๊ทœ๋ชจ ํ™•์žฅ๋˜๋ฉด → ์—ฌ๋Ÿฌ ๋””๋ฐ”์ด์Šค ํ˜ธํ™˜ ๋ฐ ๋” ๋งŽ์€ ์ข…๋ฅ˜์˜ ์„œ๋น„์Šค ์ œ๊ณต
    • ํ† ํฐ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์–ด๋–ค ๋””๋ฐ”์ด์Šค๋‚˜ ๋„๋ฉ”์ธ์—์„œ๋„ ํ† ํฐ์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•œ ํ›„ ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

๐Ÿ”– ์ฐธ๊ณ  ์ž๋ฃŒ

'Web > Concept' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Web] JWT(JSON Web Token)  (0) 2022.05.22
[Web] Authentication & Autorization  (0) 2022.05.22
[Web] ์ฟ ํ‚ค(Cookie) & ์„ธ์…˜(Session)  (0) 2022.05.22
[Web] JWT(JSON Web Token)  (0) 2022.01.13