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

Web Development/Back-end

์ธ์ฆ ์ธ๊ฐ€ ๋ฐฉ์‹ ๋น„๊ต

๐Ÿ“Œ ์„œ๋ฒ„๊ธฐ๋ฐ˜ ์ธ์ฆ(session)


  • ์„œ๋ฒ„์— ์„ธ์…˜์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅ, ๊ด€๋ฆฌ ํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)์—๋Š” ์„ธ์…˜ID ๋ฅผ ์ €์žฅํ•˜๋Š” ์ฟ ํ‚ค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์„œ๋ฒ„๋Š” ์ด ์„ธ์…˜ID๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋–ค ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ํ—ค๋”์— cookie์— ๋Œ€ํ•œ ์„ธ์…˜ id๋ฅผ ๋‹ด์•„ ์ „์†ก
  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ์—์„œ ๋ณด๋‚ธ ์„ธ์…˜id๋ฅผ ๋Œ€์กฐํ•ด ์ธ์ฆ ์ƒํƒœ๋ฅผ ํ™•์ธํ•จ.

์žฅ์ 

  • ์ฟ ํ‚ค๊ฐ€ ๋…ธ์ถœ๋˜๋”๋ผ๋„ ์ฟ ํ‚ค ์ž์ฒด(์„ธ์…˜ID)๋Š” ์œ ์˜๋ฏธํ•œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ ์žˆ์ง€ ์•Š๋‹ค.
  • ์‚ฌ์šฉ์ž๋“ค์€ ๊ฐ๊ฐ ๊ณ ์œ ์˜ ์„ธ์…˜ID๊ฐ’์„ ๋ฐœ๊ธ‰๋ฐ›๊ฒŒ ๋˜์–ด, ์„œ๋ฒ„์—์„œ ์ฟ ํ‚ค ๊ฐ’์„ ๋ฐ›์•˜์„ ๋•Œ ํšŒ์›์ •๋ณด๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ํ™•์ธํ•  ํ•„์š”์—†๋‹ค.

๋‹จ์ 

  • ์ฟ ํ‚ค๊ฐ€ ํƒˆ์ทจ๋˜์–ด ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค๋ฉด ์„œ๋ฒ„๋Š” ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์ธ์ง€, ํ•ด์ปค์ธ์ง€ ๊ตฌ๋ณ„ํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.

 

๐Ÿ“Œ ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ(JWT)


  • JSON Web Token ์˜ ์•ฝ์ž๋กœ ์ธ์ฆ์— ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ์•”ํ˜ธํ™”์‹œํ‚จ ํ† ํฐ์„ ๋œปํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” Access Token ์„ ํ—ค๋”์— ์‹ค์–ด ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค.
  • JWT์˜ ๊ตฌ์กฐ
    • ํ—ค๋”(Header) - ์ผ๋ฐ˜์ ์œผ๋กœ ํ† ํฐ์˜ ์œ ํ˜•๊ณผ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋‘๊ฐ€์ง€ ์ •๋ณด๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋‹ด๊ณ  ์žˆ๋‹ค.
    • ํŽ˜์ด๋กœ๋“œ(Payload) - ์‚ฌ์šฉ์ž์˜ ์ •๋ณด ํ˜น์€ ๋ฐ์ดํ„ฐ ์†์„ฑ ๋“ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ ˆ์ž„ ์ด๋ผ๋Š” ์ •๋ณด ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ํด๋ ˆ์ž„์€ ๊ฐ๊ฐ ๋“ฑ๋ก๋œ ํด๋ ˆ์ž„, ๊ณต๊ฐœ ํด๋ ˆ์ž„, ๋น„๊ณต๊ฐœ ํด๋ ˆ์ž„ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
    • ์„œ๋ช…(Signature) - ํŠน์ • ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ, Base64 ์ธ์ฝ”๋”ฉ๋œ ํ—ค๋”์™€, ํŽ˜์ด๋กœ๋“œ, ๋น„๋ฐ€ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”ํ•œ๋‹ค.

์žฅ์ 

  • ์„œ๋ฒ„๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ ๋ณ„๋„์˜ ์ €์žฅ์†Œ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํ•˜์ง€๋งŒ JWT๋Š” ๋ฐœ๊ธ‰ํ•œ ํ›„ ๊ฒ€์ฆ๋งŒ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”์—†๋‹ค. ( ์„œ๋ฒ„์˜ ํ™•์žฅ๊ณผ ์œ ์ง€/๋ณด์ˆ˜ ์— ์œ ๋ฆฌํ• ๊ฑฐ๋ผ ์ƒ๊ฐ๋œ๋‹ค)

๋‹จ์ 

  • ์ด๋ฏธ ๋ฐœ๊ธ‰๋œ JWT์— ๋Œ€ํ•ด์„œ๋Š” ์œ ํšจ๊ธฐ๊ฐ„์ด ์ง€๋‚ ๋•Œ๊นŒ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Payload์˜ ์ •๋ณด๊ฐ€ ์ œํ•œ์ ์ด๋‹ค.(๋ˆ„๊ตฌ๋‚˜ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค)
  • JWT์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด ์„œ๋ฒ„์˜ ์ž์› ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ← ์„œ๋ฒ„์ธ์ฆ๋ฐฉ์‹์— ๋น„ํ•ด ์ž์›๋‚ญ๋น„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋†’๋‹ค

Refresh Token

  • ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹์˜ ๋ณด์•ˆ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ํƒ„์ƒ
  • ์ฒ˜์Œ ๋กœ๊ทธ์ธ ์‹œ Refresh Token๊ณผ Access Token ์„ ๋™์‹œ์— ๋ฐœ๊ธ‰ํ•œ๋‹ค
  • AT ํ† ํฐ์˜ ๊ฒฝ์šฐ ๋งŒ๋ฃŒ์‹œ๊ฐ„ (5๋ถ„์—์„œ 15๋ถ„์‚ฌ์ด) ์„ ์ ๊ฒŒ ์ฃผ๋Š”๋Œ€์‹  RTํ† ํฐ์˜ ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ๊ธธ๊ฒŒ ์ค€๋‹ค.
  • AT ํ† ํฐ์ด ๋งŒ๋ฃŒ๋  ๊ฒฝ์šฐ RTํ† ํฐ์„ ์‚ฌ์šฉํ•ด ATํ† ํฐ์„ ์žฌ๋ฐœ๊ธ‰ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

Base64 Encoding

  • ์ธ์ฝ”๋”ฉ์ด๋ž€ ์ •๋ณด์˜ ํ˜•ํƒœ๋‚˜ ํ˜•์‹์„ ํ‘œ์ค€ํ™”, ๋ณด์•ˆ, ์ฒ˜๋ฆฌ ์†๋„ ํ–ฅ์ƒ, ์ €์žฅ ๊ณต๊ฐ„ ์ ˆ์•ฝ์„ ์œ„ํ•ด์„œ ๋‹ค๋ฅธ ํ˜•ํƒœ๋‚˜ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • Base64 Encoding ์€ Binary Data๋ฅผ Text๋กœ ๋ฐ”๊พธ๋Š” ์ธ์ฝ”๋”ฉ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ์จ Character set์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ๊ณตํ†ต ASCII ์˜์—ญ์˜ ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๋Š” Encoding์ด๋‹ค.
  • Binary Data๋ฅผ 6 bit ์”ฉ ์ž๋ฅธ ๋’ค 6 bit์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž๋ฅผ Base64 ์ƒ‰์ธํ‘œ์—์„œ ์ฐพ์•„ ์น˜ํ™˜ํ•œ๋‹ค. (64์ง„๋ฒ•)
  • ๊ทธ๋Ÿผ ์™œ ์“ฐ๋ƒ ?
    • ๋ฌธ์ž๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ Media(Email, HTML)๋ฅผ ์ด์šฉํ•ด ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์œผ๋กœ Binary Data(์ด๋ฏธ์ง€๋‚˜ ์˜ค๋””์˜ค)๋ฅผ ์ „์†ก ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ, ASCII๋กœ Encodingํ•˜์—ฌ ์ „์†กํ•˜๊ฒŒ ๋˜๋ฉด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ๋Š” ASCII๋Š” 7 bits Encoding์ธ๋ฐ ๋‚˜๋จธ์ง€ 1bit๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ์‹œ์Šคํ…œ ๋ณ„๋กœ ์ƒ์ดํ•˜๋‹ค.
    • ์ผ๋ถ€ ์ œ์–ด๋ฌธ์ž (e.g. Line ending)์˜ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ๋ณ„๋กœ ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค.
    ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๋กœ ASCII๋Š” ์‹œ์Šคํ…œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ์— ์•ˆ์ „ํ•˜์ง€๊ฐ€ ์•Š๋‹ค. Base64๋Š” ASCII ์ค‘ ์ œ์–ด๋ฌธ์ž์™€ ์ผ๋ถ€ ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์ œ์™ธํ•œ 64๊ฐœ์˜ ์•ˆ์ „ํ•œ ์ถœ๋ ฅ ๋ฌธ์ž๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ฆ‰, Binary Data๊ฐ€ ์‹œ์Šคํ…œ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ผํ•˜๊ฒŒ ์ „์†ก ๋˜๋Š” ์ €์žฅ๋˜๋Š”๊ฑธ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ž€ ?

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํ“จํ„ฐ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” binary๋กœ ๋˜์–ด์žˆ๋‹ค.
  • 1 ๊ณผ 0๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ง„๋ฒ• ( 2์ง„๋ฒ• )

 

๐Ÿ“Œ Reference