โ€œ์„ธ์…˜ ID๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋งค๊ฐœ์ฒดโ€

์„œ๋ฒ„๋Š” ์ฟ ํ‚ค๋ฅผ ์ด์šฉ ๋ธŒ๋ผ์šฐ์ €์— ๋‚ด ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.


  1. ์‚ฌ์ดํŠธ์— ๋ฐฉ๋ฌธํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„์— request๋ฅผ ๋ณด๋ƒ„
  2. ์„œ๋ฒ„๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ ๋‚ด๊ฐ€ ์ฐพ๋˜ ํŽ˜์ด์ง€ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  responseํ•จ
    (์ด response ์•ˆ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ €์žฅํ•˜๊ณ ์ž ํ•˜๋Š” ์ฟ ํ‚ค๊ฐ€ ์žˆ๋‹ค)

์ฟ ํ‚ค๋Š”?

  • ์ฟ ํ‚ค๋Š” ๋„๋ฉ”์ธ์— ๋”ฐ๋ผ ์ œํ•œ๋œ๋‹ค
    • ์œ ํŠœ๋ธŒ๊ฐ€ ์ค€ ์ฟ ํ‚ค๋Š” ์œ ํŠœ๋ธŒ์—๋งŒ ์ „๋‹ฌ๋จ
  • ์ฟ ํ‚ค๋Š” ์œ ํšจ๊ธฐ๊ฐ„์ด ์žˆ๋‹ค
    • ์„œ๋ฒ„๊ธฐ ์ •ํ•œ ๊ธฐ๊ฐ„๋งˆ๋‹ค ๋‹ค๋ฆ„
  • ์ฟ ํ‚ค๋Š” ์ธ์ฆ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค
    • ์›น์‚ฌ์ดํŠธ ์–ธ์–ด์„ค์ • ๋ณ€๊ฒฝ์œผ๋กœ ์˜ˆ์‹œ



session / JWT

1. session

HTTP ํ”„๋กœํ† ์ฝœ์€ stateless!

  • ์„œ๋ฒ„๋กœ ๊ฐ€๋Š” ๋ชจ๋“  ์š”์ฒญ์ด, ์ด์ „ request์™€๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋‹ค๋ค„์ง„๋‹ค
  • ์š”์ฒญ๋ผ๋ฆฌ ์—ฐ๊ฒฐ์ด ์—†์Œ. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†์Œ.

์š”์ฒญ์ด ๋๋‚˜๋ฉด ์„œ๋ฒ„๋Š” ์žŠ์–ด๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, ์š”์ฒญ์‹œ๋งˆ๋‹ค ์šฐ๋ฆฌ๊ฐ€ ๋ˆ„๊ตฐ์ง€ ์•Œ๋ ค์ค˜์•ผํ•œ๋‹ค

์•Œ๋ ค์ฃผ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ session!

login ์˜ˆ์ œ


  • Nico๋ผ๋Š” ์œ ์ €๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•˜๊ณ ์‹ถ๋‹ค๋ฉด,
  1. ์œ ์ €๋ช…๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค
  2. ๋น„๋ฒˆ์ด ๋งž๋‹ค๋ฉด ์„œ๋ฒ„๋Š” ์„ธ์…˜DB์— Nico๋ผ๋Š” ์œ ์ €๋ฅผ ์ƒ์„ฑํ•จ(ํ•ด๋‹น ์„ธ์…˜์—๋Š” ๋ณ„๋„์˜ ID ์กด์žฌ)
  3. ํ•ด๋‹น ์„ธ์…˜ID๋Š” ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋ฅผ ๊ฑฐ์ณ ๋ธŒ๋ผ์šฐ์ €๋กœ ๋Œ์•„์˜ค๊ณ  ์ €์žฅ๋œ๋‹ค

๋”ฐ๋ผ์„œ, ๊ฐ™์€ ์›น์‚ฌ์ดํŠธ์˜ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋ฉด?

  1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„ธ์…˜ID๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ์ฟ ํ‚ค๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค
  2. ์„œ๋ฒ„๋Š” ์„ธ์…˜ID์™€ ํ•จ๊ป˜ ์˜ค๋Š” ์ฟ ํ‚ค๋ฅผ ํ™•์ธํ•œ๋‹ค
    • ์„œ๋ฒ„๋Š” ์•„์ง๊นŒ์ง€๋„ ๋‚ด๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ๋ชจ๋ฆ„
    • ์„ธ์…˜ID๊ฐ€ ์žˆ๋Š” ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ง„ ์š”์ฒญ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ๊ณ ์žˆ๋‹ค!
  3. ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์„ธ์…˜ID๋ฅผ ๊ฐ€์ง€๊ณ  ์„ธ์…˜ DB๋ฅผ ํ™•์ธํ•˜๊ณ 
  4. ์„ธ์…˜DB๋Š” ์ด ์„ธ์…˜ID๊ฐ€ ์œ ์ €๋ช… Nico์˜ ๊ฒƒ์ด๋ผ๋Š” ๊ฑธ ์•Œ๋ ค์คŒ
  5. ์„œ๋ฒ„๋Š” ์ด์ œ์•ผ ๋ˆ„๊ตฌ์ธ์ง€ ์•Œ๊ณ , ํ™˜์˜Nico ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šด๋‹ค

=> ํ•ด๋‹น ์š”์ฒญ์ด ๋๋‚˜๊ณ  ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋ฉด?


์œ ์ €๋Š” ์˜ค์ง ์„ธ์…˜ID๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค!
์„œ๋ฒ„๊ฐ€ ์œ ์ €์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

์ฟ ํ‚ค๋Š” ์ด ์„ธ์…˜ID๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๋งค๊ฐœ์ฒด์ผ ๋ฟ!

token์ด๋ž€?
์ฟ ํ‚ค ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋Š” ๋งค๊ฐœ์ฒด!
์„ธ์…˜์„ ์ด์šฉํ•ด android, ios ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ์ฟ ํ‚ค๋Š” native ์•ฑ์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ฟ ํ‚ค๋Š” ์˜ค์ง ๋ธŒ๋ผ์šฐ์ €์—๋งŒ ์žˆ์Œ
=> ์„ธ์…˜ID๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๋งค๊ฐœ์ฒด๋กœ ์ฟ ํ‚ค ๋Œ€์‹  ํ† ํฐ์„ ์‚ฌ์šฉ!
ํ† ํฐ์€ ๊ทธ๋ƒฅ ์ด์ƒํ•˜๊ฒŒ ์ƒ๊ธด string์ด๋‹ค.

๊ธฐ์–ตํ•ด์•ผํ•  ๋ถ€๋ถ„!

  • ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ์œ ์ €๋“ค์˜ ๋ชจ๋“  ์„ธ์…˜ ID๋ฅผ DB์— ์ €์žฅํ•ด์•„ํ•œ๋‹ค.
    • request๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค
      1. ์„œ๋ฒ„๋Š” ์ฟ ํ‚ค๋ฅผ ๋ฐ›์•„์„œ ์„ธ์…˜ID๋ฅผ ๋ณด๊ณ ,
      2. ์„ธ์…˜ID์™€ ์ผ์น˜ํ•˜๋Š” ์œ ์ €๋ฅผ ์ฐพ์•„์•ผํ•˜๊ณ ,
      3. ๊ทธ์ œ์„œ์•ผ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

=> ์š”์ฒญ์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค DB๋ฅผ ๋’ค์ ธ์•ผํ•œ๋‹ค.
์œ ์ €๊ฐ€ ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ผ DB ๋ฆฌ์†Œ์Šค๊ฐ€ ๋” ํ•„์š”ํ•œ ๊ฒƒ!
์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด JWT

2.JWT

JWT๋Š” ์ฟ ํ‚ค๊ฐ€ ์•„๋‹Œ ํ† ํฐํ˜•์‹์ด๋‹ค
JWT๋กœ ์œ ์ € ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•˜๋ฉด, ์„ธ์…˜ DB๋ฅผ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์—†์Œ. ์„œ๋ฒ„๋Š” ์œ ์ € ์ธ์ฆ์„ ์œ„ํ•ด์„œ ๋งŽ์€ ์ผ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค

ํ† ํฐ์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์„œ, requestํ•  ๋•Œ๋งˆ๋‹ค ๋ณด๋‚ด์•ผํ•˜๋Š” ๊ฒƒ. ์„œ๋ฒ„๋Š” ๋ฐ›์€ ์š”์ฒญ์•ˆ์— ์žˆ๋Š” ํ† ํฐ์œผ๋กœ ์„ธ์…˜DB์—์„œ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ์ฐพ์•„์•ผํ•จ.(์ผ์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ DB ๋ฆฌ์†Œ์Šค๊ฐ€ ๋” ํ•„์š”ํ•œ ๊ฒƒ)

์ด๋Ÿฌํ•œ ์„ธ์…˜ ๋ฐฉ์‹ ๋Œ€์‹  JWT

๋กœ๊ทธ์ธ ์˜ˆ์ œ

  1. ์œ ์ €๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•˜๋ ค๊ณ  ID password๋ฅผ ์„œ๋ฒ„์— ์ „์†ก
  2. ID password๊ฐ€ ๋งž๋‹ค๋ฉด, ์„ธ์…˜ ๋ฐฉ์‹์ฒ˜๋Ÿผ ์„ธ์…˜DB์— ํ•ด๋‹น ์œ ์ €์ •๋ณด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  ์œ ์ €์˜ ID ๋“ฑ์„ ๊ฐ€์ ธ๋‹ค๊ฐ€ signature algolythm์„ ์ด์šฉํ•ด ์‚ฌ์ธํ•จ.
  3. ํ•ด๋‹น ์‚ฌ์ธ๋œ ์ •๋ณด๋ฅผ string ํ˜•ํƒœ๋กœ ๋ณด๋‚ด์คŒ.

์ฟ ํ‚ค๋ณด๋‹ค ํ›จ์”ฌ ๊ธธ๋‹ค. ์ฟ ํ‚ค๋Š” ๊ณต๊ฐ„ ์ œ์•ฝ์ด ์žˆ์ง€๋งŒ, JWT๋Š” ์ œ์•ฝ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—!

session๊ณผ JWT์˜ ์ฐจ์ด์  ์ •๋ฆฌ! โœจ

session


session ๋ฐฉ์‹์€,
session ID๋ฅผ ๊ฐ€์ง„ request๊ฐ€ ์˜ค๋ฉด ์„ธ์…˜ DB์—์„œ ์„ธ์…˜ ID๋ฅผ ์ฐพ๋Š” ๊ฒƒ!

  • ์žฅ์ 
    • ์„œ๋ฒ„๊ฐ€ ๋กœ๊ทธ์ธ ๋œ ์œ ์ €์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค!
      1. ํŠน์ • ์œ ์ €๋ฅผ ์ซ“์•„๋‚ด๊ณ  ์‹ถ์„ ๋•Œ session์„ ์‚ญ์ œํ•˜๋ฉด ๋จ.
      2. ์ธ์Šคํƒ€๊ทธ๋žจ์ฒ˜๋Ÿผ ๋กœ๊ทธ์ธ ๋œ ๋ชจ๋“  device ์ค‘ ๊ฐ•์ œ ๋กœ๊ทธ์•„์›ƒ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
      3. ๋„ทํ”Œ๋ฆญ์Šค์ฒ˜๋Ÿผ ๊ณ„์ • ๊ณต์œ  ์ˆซ์ž๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค. (์ง€๊ธˆ ๋ช‡ ๋ช…์ด ๋กœ๊ทธ์ธํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์–ด์„œ)
  • ๋‹จ์ 
    • ์ด๋ ‡๊ฒŒ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” DB๋ฅผ ๊ตฌ๋งคํ•˜๊ณ , ์œ ์ง€ํ•ด์•ผํ•จ.
      1. ์œ ์ €๊ฐ€ ๋Š˜์–ด๋‚  ์ˆ˜๋ก DB๊ฐ€ ์ผœ์ ธ์•ผํ•จ.
      2. ์ด๋ฅผ ์œ„ํ•œ DB๋กœ๋Š” ์ฃผ๋กœ Redis๋ฅผ ์‚ฌ์šฉํ•จ

JWT


JWT ๋ฐฉ์‹์€,
token๋ฅผ ๊ฐ€์ง„ request๊ฐ€ ์˜ค๋ฉด ๊ทธ token์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ!

๋‹จ JWT๋Š” ์•”ํ˜ธํ™”๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค. (์•”ํ˜ธํ™”๋ฅผ ํ•˜๋ฉด ์•„๋ฌด๋„ ์ฝ๊ฑฐ๋‚˜ ์ดํ•ดํ•  ์ˆ˜ ์—†๊ฒŒ ๋จ)
๋ˆ„๊ตฌ๋‚˜ ์—ด์–ด์„œ ํ•ด๋‹น ์ปจํ…์ธ ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋น„๋ฐ€์ •๋ณด๋ฅผ JWT์— ๋„ฃ์–ด์„  ์•ˆ๋จ

  • ์žฅ์ 
    • ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์ธํ•˜๊ณ  ์œ ์ €์—๊ฒŒ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์—, ์„ธ์…˜์ด๋‚˜ DB ์—†์ด๋„ ์œ ์ €์ธ์ฆ ๊ฐ€๋Šฅ!
      1. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ๋ ค๋ฐ›์„ ๋•Œ, ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค
      2. QR ์ถœ์ž… ์ฒดํฌ์ธ ๋˜ํ•œ JWT๊ฐ€ ๋“ค์–ด๊ฐ„ QR์ฝ”๋“œ์ด๋‹ค
  • ๋‹จ์ 
    • ์ƒ์„ฑ๋œ ํ† ํฐ์„ ์ถ”์ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ•์ œ ๋กœ๊ทธ์•„์›ƒ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์“ธ ์ˆ˜ ์—†๋‹ค.
      1. ์„œ๋ฒ„๊ฐ€ ์•„๋Š”๊ฒƒ์€ ์˜ค๋กœ์ง€ ์œ ํšจ์„ฑ ์—ฌ๋ถ€ ๋ฟ!
      2. ํ•ด๋‹น ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ชจ๋‘ ์œ ํšจํ•˜๋‹ค.


์„œ๋น„์Šค๊ฐ€ ๋” ์ปค์ง€๊ณ , ์œ ์ €๋ฅผ ์ข€ ๋” ์ž˜ ๊ด€๋ฆฌํ•ด์•ผํ•œ๋‹ค๋ฉด session ๋ฐฉ์‹์œผ๋กœ!

๊ฒฐ๋ก 

์ข…๋ฅ˜ ๊ธฐ๋Šฅ
Cookie ๊ทธ๋ƒฅ ์˜ฎ๊ธฐ๋Š” ์‹œ์Šคํ…œ. ๋งค๊ฐœ์ฒด
Token ์„œ๋ฒ„๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ์ด์ƒํ•˜๊ฒŒ ์ƒ๊ธด ํ…์ŠคํŠธ!(ID์นด๋“œ์ฒ˜๋Ÿผ ์„œ๋ฒ„์—๊ฒŒ ๋ณด์—ฌ์ค˜์•ผํ•œ๋‹ค)
JWT ์ •๋ณด๋ฅผ ๊ฐ–๊ณ ์žˆ๋Š” ํ† ํฐ. DB์—†์ด ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค