๐ŸŒฟ Spring

Cookie์™€ Session, ๊ทธ๋ฆฌ๊ณ  Token

์—ฐ_์šฐ๋ฆฌ 2021. 12. 9. 20:47
๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

     

     

    HTTP์˜ ํŠน์ง•

    HTTP๋Š” ๋น„์—ฐ๊ฒฐ์„ฑ(Connectionless)๊ณผ ๋ฌด์ƒํƒœ(Stateless)๋ผ๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

     

    ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์—๊ฒŒ Request๋ฅผ ๋ณด๋‚ด๋ฉด์„œ ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ๋˜๋Š”๋ฐ

    ์ด๋•Œ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ Responseํ•˜๋ฉด์„œ ๋งบ์—ˆ๋˜ ์—ฐ๊ฒฐ์„ ๋Š์–ด๋ฒ„๋ฆฐ๋‹ค.

    => ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์„œ๋ฒ„ ์ž…์žฅ์—์„œ ๋ชจ๋“  ์š”์ฒญ์€ ๋‹ค ์ฒ˜์Œ๋ณด๋Š” ์š”์ฒญ์ด๋‹ค (stateless)

     

    stateful์€ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด๊ณ 

    stateless๋Š” ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

     

     

     

    ์ƒํƒœ ์œ ์ง€ ๋ฐฉ๋ฒ• 1 : ์ฟ ํ‚ค (Stateless์„œ๋ฒ„) 

    ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ์–ตํ•  ์ˆ˜ ์žˆ๋„๋ก ํด๋ผ์ด์–ธํŠธ(์›น๋ธŒ๋ผ์šฐ์ €)์—๊ฒŒ ์ธ์ฆ์ •๋ณด๋ฅผ ์ค€๋‹ค.

     

    1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋กœ๊ทธ์ธ์„ ์š”์ฒญํ•˜๋ฉด 

       ์„œ๋ฒ„๋Š” ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ณ , ์ธ์ฆ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ์ฟ ํ‚ค๋ฅผ ํ—ค๋”์— ๋‹ด์•„ ์‘๋‹ตํ•ด์ค€๋‹ค. (Set-Cookie)

    2. ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ key-value๋กœ ์ €์žฅํ•˜๊ณ 

       ์„œ๋ฒ„์—๊ฒŒ ๋งค ์š”์ฒญ๋งˆ๋‹ค ํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ๋‹ด์•„์„œ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. (Cookie)

    3. ์„œ๋ฒ„๋Š” ์š”์ฒญ๋ฐ›์€ ์ฟ ํ‚ค์˜ ์ธ์ฆ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์—ฌ ๋งž์œผ๋ฉด ๋กœ๊ทธ์ธ ๊ณผ์ •์„ ํŒจ์Šคํ•œ๋‹ค

    ์ฟ ํ‚ค ๋งŒ๋ฃŒ์‹œ์ ์€ ์ €์žฅ์‹œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ฟ ํ‚ค์˜ ์šฉ๋Ÿ‰์ด ์ œํ•œ๋˜์–ด์žˆ๋‹ค.

     

    ๋„๋ฉ”์ธ ๋ช…์‹œํ•˜๋ฉด ๋ช…์‹œํ•œ ๋„๋ฉ”์ธ๊ณผ ํ•˜์œ„ ๋„๋ฉ”์ธ ๋ชจ๋‘ ์ฟ ํ‚ค ์ ‘๊ทผ ๊ฐ€๋Šฅ

    ๋„๋ฉ”์ธ ์ƒ๋žตํ•˜๋ฉด ํ˜„์žฌ ๋„๋ฉ”์ธ์—๋งŒ ์ฟ ํ‚ค ์ ‘๊ทผ ๊ฐ€๋Šฅ

     

    ๊ฒฝ๋กœ ๋ช…์‹œํ•˜๋ฉด ๋ช…์‹œํ•œ ๊ฒฝ๋กœ์™€ ํ•˜์œ„ ๊ฒฝ๋กœ ๋ชจ๋‘ ์ฟ ํ‚ค ์ ‘๊ทผ ๊ฐ€๋Šฅ

    ๊ฒฝ๋กœ ์ƒ๋žตํ•˜๋ฉด ๋ชจ๋“  ๊ฒฝ๋กœ์—์„œ ์ฟ ํ‚ค ์ ‘๊ทผ ๊ฐ€๋Šฅ ( "/" ์™€ ๊ฐ™์Œ)

     

     

    ๋‹จ์  : ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ์ฟ ํ‚ค๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ์ด๋™ํ•ด์•ผํ•œ๋‹ค (๊ฐœ์ธ์ •๋ณด ์œ„ํ—˜ํ•ด!!)

     

    ์ฟ ํ‚ค๋Š” ๊ณ„์† ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค. ์ฟ ํ‚ค๋Š” ๋กœ๊ทธ์•„์›ƒ ์‹œ ๋งŒ๋ฃŒ์‹œ์ผœ์•ผํ•œ๋‹ค.

     

     

     

     

    ์ƒํƒœ ์œ ์ง€ ๋ฐฉ๋ฒ• 2 : ์„ธ์…˜ (Stateful์„œ๋ฒ„)

    ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ์–ตํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ธ์…˜ID๋ฅผ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๋ชจ๋‘ ์ €์žฅํ•œ๋‹ค.

     

    1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ๋กœ๊ทธ์ธ์„ ์š”์ฒญํ•˜๋ฉด

       ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ณ , ์„ธ์…˜ID๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์„œ๋ฒ„์— ์ €์žฅํ•œ ํ›„

       ์„ธ์…˜ID๊ฐ€ ๋‹ด๊ธด ์ฟ ํ‚ค๋ฅผ ํ—ค๋”์— ๋‹ด์•„ ์‘๋‹ตํ•ด์ค€๋‹ค 

    2. ํด๋ผ์ด์–ธํŠธ๋Š” ์„ธ์…˜ID๊ฐ€ ๋‹ด๊ธด ์ฟ ํ‚ค๋ฅผ Object๋กœ ์ €์žฅํ•˜๊ณ 

       ์„œ๋ฒ„์—๊ฒŒ ๋งค ์š”์ฒญ๋งˆ๋‹ค ํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ๋‹ด์•„์„œ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

    3. ์„œ๋ฒ„๋Š” ์š”์ฒญ๋ฐ›์€ ์ฟ ํ‚ค์˜ ์„ธ์…˜ID๋ฅผ ํ™•์ธํ•˜์—ฌ ๋งž์œผ๋ฉด ๋กœ๊ทธ์ธ ๊ณผ์ •์„ ํŒจ์Šคํ•œ๋‹ค

    ์ฟ ํ‚ค๋Š” ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ์ •๋ณด๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ์ด๋™ํ–ˆ์ง€๋งŒ

    ์„ธ์…˜์€ ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜ID๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ์ด๋™ํ•œ๋‹ค(์„ธ์…˜ID๋Š” ๋…ธ์ถœ๋˜์–ด๋„ ์œ„ํ—˜์ ๋‹ค)

     

    ๋‹จ์  : ์„œ๋ฒ„์— ์ €์žฅ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค

     


     ++ 2022-02-03 ๋‚ด์šฉ ์ถ”๊ฐ€

     

     

    ์„œ๋ฒ„์˜ ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ

    ์„ธ์…˜์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๊ฒŒ๋œ๋‹ค(์ •ํ™•ํžˆ๋Š” ํ†ฐ์บฃ์˜ ์„ธ์…˜ ์ €์žฅ์†Œ)

    ์„œ๋ฒ„ 1๊ฐœ์˜ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ์„ธ์…˜์ด 100๊ฐœ๊ฐ€ ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๋™์ ‘์ž๊ฐ€ 300๋ช…์ด๋ผ๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๊ฒŒ๋ ๊นŒ?

     

     

    ๋™์ ‘์ž 300๋ช…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„ , ์„œ๋ฒ„๊ฐ€ 3๋Œ€๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ์„œ๋ฒ„ 3๋Œ€์— ๋ถ„์‚ฐ๋˜์–ด ์ ‘์†ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

    ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๊ธฐ์ˆ ์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

     

    ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ์ด์šฉ

    ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ : ์„œ๋ฒ„์— ๊ฐ€ํ•ด์ง€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์—ฌ๋Ÿฌ๋Œ€์˜ ์„œ๋ฒ„์— ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์‚ฐ์‹œ์ผœ์ฃผ๋Š” ๊ธฐ์ˆ .

     

     

    ์ž ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค

    1. ๐Ÿต101๋ฒˆ์งธ๊ฐ€ ๋กœ๊ทธ์ธ์„ ์š”์ฒญํ•˜์—ฌ SessionId๋Š” ์„œ๋ฒ„B์— ์ €์žฅ๋˜์—ˆ๋‹ค.

    2. ๐Ÿต101๋ฒˆ์งธ๋Š” ๋กœ๊ทธ์ธ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋Š” ์‘๋‹ต์„ ๋ฐ›์•˜๋‹ค

    3. ์ด๋•Œ, 1๋ฒˆ์งธ~10๋ฒˆ์งธ๊ฐ€ ๋กœ๊ทธ์•„์›ƒ์„ ํ•˜์—ฌ ์„œ๋ฒ„A์— ์—ฌ์œ ๊ฐ€ ์ƒ๊ฒจ๋‚ฌ๋‹ค

    4. ๐Ÿต101๋ฒˆ์งธ๊ฐ€ ๊ตฌ๋งค๋‚ด์—ญ์„ ์š”์ฒญํ•œ๋‹ค

    5. ๐Ÿฏ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ์„œ๋ฒ„A์— ์—ฌ์œ ๊ฐ€ ์ƒ๊ฒผ์œผ๋‹ˆ ๐Ÿต101๋ฒˆ์งธ์˜ ์š”์ฒญ์„ ์„œ๋ฒ„A๋กœ ๋ณด๋‚ธ๋‹ค.

    6. ์„œ๋ฒ„A ์ €์žฅ์†Œ์—๋Š” ๐Ÿต101๋ฒˆ์งธ์˜ SessionId๊ฐ€ ์—†๋‹ค. ์„œ๋ฒ„A๋Š” ๋กœ๊ทธ์ธํŽ˜์ด์ง€๋ฅผ ์‘๋‹ตํ•ด์ค€๋‹ค

    7. ๐Ÿต101๋ฒˆ์งธ๋Š” ๋กœ๊ทธ์ธํ–ˆ๋Š”๋ฐ ๋กœ๊ทธ์ธ์„ ๋‹ค์‹œํ•˜๋ผ๊ณ  ์‘๋‹ต๋ฐ›์•˜๋‹ค << !!

     

     

     

    ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ ๊นŒ?

    ์„ธ์…˜ ์ €์žฅ์†Œ๋ฅผ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?

    ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ DB๋กœ ์„œ๋ฒ„ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊นŒ?

     

    ๋ฌธ์ œ์  ๋ฐœ๊ฒฌ

    ์˜ค! ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋‹ˆ ์ž˜ ๋™์ž‘ํ•˜๋„ค ๊ทผ๋ฐ ๋„ˆ๋ฌด ๋Š๋ฆฌ๋‹ค..

    ์„ธ์…˜์ด ๋ฉ”๋ชจ๋ฆฌ(RAM)์— ์žˆ์„๋•Œ๋Š” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ–ˆ๋Š”๋ฐ ใ…œใ…œ 

     

    ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์‚ฌ์šฉ์ž๊ฐ€ 100๋งŒ๋ช…์ด๋˜๋ฉด.. 100๋งŒ๋ช…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„ ์ €์žฅ์†Œ(DB)๋„ 1๊ฐœ๋กœ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ์„๊นŒ?

    ๊ทธ๋Ÿผ 1๋ฒˆ์งธ๋ถ€ํ„ฐ 1000๋ฒˆ์งธ๋Š” 1๋ฒˆ ์„œ๋ฒ„ ์ €์žฅ์†Œ๋กœ, 1001๋ฒˆ๋ถ€ํ„ฐ 2000๋ฒˆ์งธ๋Š” 2๋ฒˆ ์„œ๋ฒ„ ์ €์žฅ์†Œ๋กœ.....?

    ๋„ˆ๋ฌด ๋ณต์žกํ•˜๋‹ค!

     

     

     

     

    ์ƒํƒœ ์œ ์ง€ ๋ฐฉ๋ฒ• 3 : Token (Stateless ์„œ๋ฒ„)

    ์„ธ์…˜๋ฐฉ์‹์˜ ๋ฌธ์ œ์ 

    1. ๋กœ๊ทธ์ธ ์œ ์ €๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ €์žฅํ•  DB๋ฆฌ์†Œ์Šค๊ฐ€ ๋” ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค

    2. ๋งค ์š”์ฒญ๋งˆ๋‹ค ์œ ์ €์ •๋ณด๋ฅผ ์ฐพ๊ธฐ์œ„ํ•ด ํ—ค๋งค์•ผํ•œ๋‹ค

     

    ํ† ํฐ์€ ์ด๋Ÿฌํ•œ ์„ธ์…˜์˜ ๋ฌธ์ œ์ ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ๋‹ค.

     

    ํ† ํฐ์€ ์„œ๋ฒ„๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ํ…์ŠคํŠธ์ด๋‹ค.

    1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๊ทธ์ธ์„ ์š”์ฒญํ•˜๋ฉด

    2. ํšŒ์› DB์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ํ™•์ธํ•˜๊ณ 

    3. ํšŒ์›์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Signing ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ† ํฐ์„ ์ƒ์„ฑํ•œ๋‹ค

    4. ํ† ํฐ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ตํ•ด์ค€๋‹ค

    5. ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ๊ณผ ํ† ํฐ์„ ํ•จ๊ป˜ ๋ณด๋‚ธ๋‹ค

     

     

    JWT์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ๊ธ€์—์„œ ํ™•์ธํ•˜์ž

     

    ๋ฐ˜์‘ํ˜•
    • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
    • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
    • ํŠธ์œ„ํ„ฐ ๊ณต์œ ํ•˜๊ธฐ
    • ๊ตฌ๊ธ€ ํ”Œ๋Ÿฌ์Šค ๊ณต์œ ํ•˜๊ธฐ
    • ์นด์นด์˜คํ†ก ๊ณต์œ ํ•˜๊ธฐ