์ผ๋‹จ ํ•˜๊ณ  ๋ณด๋Š” ์‚ฌ๋žŒ

๋‚˜์ค‘๋ณด๋‹จ ์ง€๊ธˆ์— ์ง‘์ค‘ํ•˜๋˜, ์ง€๊ธˆ๋ณด๋‹จ ๋‚˜์ค‘์— ์™„๋ฒฝํ•ด์ง€์ž๐Ÿ’ช๐Ÿป

๐ŸŒฟSpring, SpringBoot

[๊ฐœ๋…]:๐Ÿ’กJWT์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

JanginTech 2024. 9. 29. 20:47

 

1. JWT ๊ฐœ์š”

JSON ์›น ํ† ํฐ์ธ JWT๋Š” ์ƒํƒœ ๋น„์ €์žฅ ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

์ƒํƒœ ๋น„์ €์žฅ? → ์„œ๋ฒ„๊ฐ€ ํ† ํฐ ๋ฐœํ–‰ ํ›„ ์‚ฌ์šฉ์ž ์„ธ์…˜์„ ์ถ”์ ํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธ!

์„œ๋ฒ„๊ฐ€ ํ† ํฐ์„ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ์ „์†กํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋ฅผ ์ €์žฅํ•˜๊ณ  ํ›„์† ์š”์ฒญ์„ ์ธ์ฆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ผ์„ ๋‹ด๋‹นํ•œ๋‹ค.

 

 

1.1. JWT ๊ตฌ์„ฑ ์š”์†Œ

  • ํ—ค๋”: ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํ† ํฐ ์œ ํ˜•์„ ํฌํ•จ
  • ํŽ˜์ด๋กœ๋“œ: ์‚ฌ์šฉ์ž ์ •๋ณด, ์—ญํ• , ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„๊ณผ ๊ฐ™์€ ํด๋ ˆ์ž„์„ ํฌํ•จ
  • ์„œ๋ช…: ํ† ํฐ์ด ์œ ํšจํ•˜๊ณ  ๋ณ€์กฐ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธ

 

1.2. ํด๋ผ์ด์–ธํŠธ์˜ JWT?

  • ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆ(๋กœ๊ทธ์ธ) ํ•œ ํ›„ JWT๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋‹ค์‹œ ๋ณด๋‚ธ๋‹ค
  • ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ›์€ JWT๋ฅผ ๋‹ค์Œ ์œ„์น˜์— ์ €์žฅํ•œ๋‹ค
    1. ๋กœ์ปฌ ์ €์žฅ์†Œ: ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€
    2. ์„ธ์…˜ ์ €์žฅ์†Œ
    3. ์ฟ ํ‚ค: HTTP ์ „์šฉ ๋ฐ ๋ณด์•ˆ
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‚˜์ค‘์— ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•  ๋•Œ ์ฆ‰, ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šค ์š”์ฒญํ•  ๋•Œ ์š”์ฒญ ํ—ค๋”์— Authorization: Bearer๋กœ ์ด JWT๋ฅผ ํฌํ•จํ•œ๋‹ค

 

1.3. ์„œ๋ฒ„์˜ JWT?

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์œผ๋กœ JWT๋ฅผ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  1. JWT ๋””์ฝ”๋”ฉ
    • ํ† ํฐ์„ ์ถ”์ถœํ•˜๊ณ  ๋น„๋ฐ€ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ช…์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•œ๋‹ค
    • ์‚ฌ์šฉ์ž ID, ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ๋“ฑ ํด๋ ˆ์ž„์„ ํ™•์ธํ•œ๋‹ค
  2. ํ† ํฐ ๋งŒ๋ฃŒ ํ™•์ธ
  3. ์‚ฌ์šฉ์ž ํ™•์ธ
    • ์œ ํšจํ•œ ํ† ํฐ์ผ ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ํด๋ ˆ์ž„์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค

 

 


2. ๋กœ๊ทธ์•„์›ƒ?

2.1. ์ƒํƒœ ๋น„์ €์žฅ ํ† ํฐ์˜ ํ•œ๊ณ„์ 

JWT๋Š” ์ƒํƒœ ๋น„์ €์žฅ ํ† ํฐ์ด๋‹ค. ํ† ํฐ ๋ฐœ๊ธ‰ ํ›„์— ์„œ๋ฒ„๊ฐ€ ํ† ํฐ์„ ์ถ”์ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ JWT๋ฅผ ํ†ตํ•œ ๋กœ๊ทธ์•„์›ƒ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

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

๋”ฐ๋ผ์„œ, JWT๋ฅผ ํ†ตํ•œ ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ, ๋ฌดํšจํ™” ์ฒ˜๋ฆฌ๋ฅผ ๋”ฐ๋กœ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

2.2. ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ

๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์—์„œ์˜ ํ† ํฐ ๋ฌดํšจํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์•„์›ƒํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ์ปฌ ์ €์žฅ์†Œ(or ์ฟ ํ‚ค)์—์„œ ํ† ํฐ์„ ์ œ๊ฑฐํ•œ๋‹ค.
  2. ๋งŒ์ผ ํ† ํฐ์ด ์†์ƒ๋œ ๊ฒฝ์šฐ(๋‹ค๋ฅธ ์žฅ์น˜์— ์กด์žฌํ•จ) ๊ณ„์† ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ
  3. ์ด์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„๋Š” ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์€ ํ† ํฐ์˜ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌ ํ•œ๋‹ค.

 

3. ์ „์ฒด์ ์ธ ํ๋ฆ„

1. ๋กœ๊ทธ์ธ

  1. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์ž๊ฒฉ ์ฆ๋ช…์„ ์ „์†ก
  2. ์„œ๋ฒ„๊ฐ€ JWT๋ฅผ ์ƒ์„ฑ
  3. ํด๋ผ์ด์–ธํŠธ๋Š” ์ด JWT๋ฅผ ๋กœ์ปฌ(๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€, ์ฟ ํ‚ค)์— ์ €์žฅ

2. ์š”์ฒญ

  1. ํด๋ผ์ด์–ธํŠธ๋Š” ‘Authorization’ ํ—ค๋”์— JWT๋ฅผ ์ „์†ก
  2. ์„œ๋ฒ„๋Š” ํ† ํฐ์„ ํ™•์ธํ•˜๊ณ  ์š”์ฒญ์„ ์ฒ˜๋ฆฌ
  3. ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ๋“ฑ๋ก๋œ ํ† ํฐ์ผ ๊ฒฝ์šฐ ์š”์ฒญ์„ ๊ฑฐ๋ถ€

3. ๋กœ๊ทธ์•„์›ƒ

  1. ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ์ปฌ์— JWT๋ฅผ ์ œ๊ฑฐ
  2. ์„œ๋ฒ„๋Š” JWT๋ฅผ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€
  3. ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ๋“ฑ๋ก๋œ ํ† ํฐ์ด ํ–ฅํ›„ ์š”์ฒญ๋  ๊ฒฝ์šฐ ์ด๋ฅผ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Œ

ํด๋ผ์ด์–ธํŠธ๋Š” JWT๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜๊ณ  ๋กœ๊ทธ์•„์›ƒ ์‹œ ์ œ๊ฑฐํ•œ๋‹ค

์„œ๋ฒ„๋Š” JWT ์„œ๋ช…/๋งŒ๋ฃŒ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค

๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์•„์›ƒ ํ›„ ์†์ƒ๋œ ํ† ํฐ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ ์•ˆ์ „ํ•œ ๋กœ๊ทธ์•„์›ƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

'๐ŸŒฟSpring, SpringBoot' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

JPA Repository? DAO, VO?  (1) 2025.02.04
spring- ๋กœ๊ทธ ์ถœ๋ ฅ ์•ˆ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ  (1) 2024.01.07