diff --git a/contents/minjunseong/TIL4(Cookie,Session).md b/contents/minjunseong/TIL4(Cookie,Session).md new file mode 100644 index 0000000..71d829b --- /dev/null +++ b/contents/minjunseong/TIL4(Cookie,Session).md @@ -0,0 +1,205 @@ +# Appcenter Basic Course Study Fin _ Cookie & Session + +### ๐Ÿ˜Ž ์ฟ ํ‚ค์™€ ์„ธ์…˜์€ ๋ฌด์—‡์ธ๊ฐ€? +``` +์ถœ์ฒ˜ 1 : https://velog.io/@octo__/%EC%BF%A0%ED%82%A4Cookie-%EC%84%B8%EC%85%98Session +์ถœ์ฒ˜ 2 : https://velog.io/@wlwl99/HTTP%EC%9D%98-%ED%8A%B9%EC%A7%95 +์ถœ์ฒ˜ 3 : https://interconnection.tistory.com/74 +์ถœ์ฒ˜ 4 : https://velog.io/@seongguk/%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98-%EC%BA%90%EC%8B%9C-%EB%B9%84%EA%B5%90-%EC%A0%95%EB%A6%AC +์ถœ์ฒ˜ 5 : https://dev-coco.tistory.com/61 +``` +#### HTTP ํ”„๋กœํ† ์ฝœ์˜ ํŠน์ง• +- HTTP๋Š” **Connectionless(๋น„์—ฐ๊ฒฐ์ง€ํ–ฅ)**, **Stateless(๋ฌด์ƒํƒœ)** ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. +- ๋น„์—ฐ๊ฒฐ์ง€ํ–ฅ์ด๋ž€, Response์™€ Request๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ์—๋งŒ ํ†ต์‹ (TCP/IP)์„ ์œ ์ง€ํ•˜๊ณ , ์‘๋‹ต์„ ์ฃผ๊ณ ๋ฐ›์€ ๋’ค์—๋Š” TCP/IP์—ฐ๊ฒฐ์„ ํ•ด์ง€ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์ตœ์†Œํ•œ์˜ ์ž์›์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์œ ์ง€ํ•œ๋‹ค. +- ๋‹จ, ์ด๋Š” HTTP 1.0๋ชจ๋ธ์—์„œ์˜ ์–˜๊ธฐ์ด๋‹ค. ์›น์‚ฌ์ดํŠธ์˜ ์ •๋ณด๋Ÿ‰์€ ์ƒ๋‹นํ•ด์ง€๋ฉฐ, ๊ณ„์†ํ•ด์„œ HTML, CSS, JS, ์ด๋ฏธ์ง€์ž๋ฃŒ ๋“ฑ์„ ๊ณ„์† ์ฃผ๊ณ ๋ฐ›๊ธฐ์—๋Š” ๋น„ํšจ์œจ์ ์ธ ํŠน์„ฑ์ด๋‹ค. (๊ฐ ์ž์›์„ ๋‹ค์šด๋ฐ›๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ๊ณผ ๋Š๊น€์„ ๊ณ„์† ๋ฐ˜๋ณตํ•˜๊ฒŒ๋˜๋Š” ๋น„ํšจ์œจ์  ๊ตฌ์กฐ) +- HTTP 1.1๋ชจ๋ธ์—์„œ๋Š” Persistant Connections๋ผ๋Š” ํŠน์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ, HTTP ์ง€์† ์—ฐ๊ฒฐ์—์„œ๋Š” ์—ฐ๊ฒฐ์ด ์ด๋ฃจ์–ด์ง€๊ณ  ๋‚œ ๋’ค ๊ฐ๊ฐ์˜ ์ž์›๋“ค์„ ์š”์ฒญํ•˜๊ณ , ๋ชจ๋“  ์ž์›์— ๋Œ€ํ•œ ์‘๋‹ต์ด ๋Œ์•„์˜จ ํ›„์— ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•œ๋‹ค. (์ปดํ“จํ„ฐ๋„คํŠธ์›Œํฌ ์‹œ๊ฐ„์— ๋ฐฐ์šธํ…Œ์ง€๋งŒ, Keep-Alive Option์„ ํ™œ์šฉํ•œ๋‹ค.) +- ์–ด์จŒ๊ฑฐ๋‚˜ ๋น„์—ฐ๊ฒฐ์ง€ํ–ฅ์˜ ํŠน์„ฑ์„ ๋„๊ณ ์žˆ๋‹ค. +- ์ด ์™ธ์—๋„ ์„ธ์…˜๊ณผ ํ† ํฐ์ด ์ค‘์š”ํ•˜๊ฒŒ ์—ฌ๊ฒจ์ง€๋Š” ์ด์œ ์ธ '๋ฌด์ƒํƒœ'๊ฐ€ ์žˆ๋‹ค. +- ๋ฌด์ƒํƒœ๋ž€, ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ, ์‘๋‹ต๊ณผ ์š”์ฒญ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€ํ•˜๋„๋ก ํ•œ๋‹ค. +- ์ด๋กœ ์ธํ•ด ํด๋ผ์ด์–ธํŠธ๋Š” ๊ณ„์†ํ•ด์„œ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ด์•ผ๋˜๋Š” ์ƒํƒœ๊ฐ€ ๋˜์—ˆ๋‹ค. +- ํ•˜์ง€๋งŒ ๋กœ๊ทธ์ธ, ํด๋ผ์ด์–ธํŠธ์˜ ๋งž์ถค ์ •๋ณด ๋“ฑ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ๋‹ค. ํ˜น์€ ๋‚ด๊ฐ€ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์—ด์‹ฌํžˆ ์‚ฌ๊ณ ์‹ถ์€๊ฑธ ๋‹ด์•˜๋Š”๋ฐ.. ๋ชฝ๋•… ์‚ฌ๋ผ์ ธ๋ฒ„๋ฆฌ๋Š” ๋Œ€์ฐธ์‚ฌ๋„ ๋ฐฉ์ง€ํ•ด์•ผํ•œ๋‹ค. +- **์ด๋Ÿฌํ•œ ํ†ต์‹ ๊ณผ์ •์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด, ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค, ์„œ๋ฒ„ ์„ธ์…˜ ๋ฐ ํ† ํฐ์˜ ๊ฐœ๋…์ด ํ™œ์šฉ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.** + +#### ์ฟ ํ‚ค๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? +~~๋‚ด๊ฐ€๋งŒ๋“  ์ฟ ํ‚ค ๋„ˆ๋ฅผ์œ„ํ•ด ๊ตฌ์› ์ง€~~ +- HTTP์˜ ์ผ์ข…์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ์‚ฌ์ดํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ์— ์ €์žฅํ•˜๋Š” ์ž‘์€ ๊ธฐ๋ก ์ •๋ณด ํŒŒ์ผ์ด๋‹ค. +- HTTP์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ์ •๋ณด๋ฅผ ์ฟ ํ‚ค ํ˜•ํƒœ๋กœ ํด๋ผ์ด์–ธํŠธ PC์— ์ €์žฅํ•˜์˜€๋‹ค๊ฐ€ ํ•„์š” ์‹œ ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. +- ์‚ฌ์šฉ์ž ์ธ์ฆ์ด ์œ ํšจํ•œ ์‹œ๊ฐ„์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์œ ํšจ ์‹œ๊ฐ„์ด ์ •ํ•ด์ง€๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ์ธ์ฆ์ด ์œ ์ง€๋œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. +- Response Header์— Set-Cookie ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์— ์ฟ ํ‚ค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. +- ์ฟ ํ‚ค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋”ฐ๋กœ ์š”์ฒญํ•˜์ง€ ์•Š์•„๋„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ Request์‹œ์— Request Header๋ฅผ ๋„ฃ์–ด์„œ ์ž๋™์œผ๋กœ ์„œ๋ฒ„์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค. +- ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž์˜ PC์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ž„์˜๋กœ ๊ณ ์น˜๊ฑฐ๋‚˜ ์ง€์šธ ์ˆ˜ ์žˆ๊ณ , ๊ฐ€๋กœ์ฑ„๊ธฐ๋„ ์‰ฌ์›Œ ๋ณด์•ˆ์ด ์ทจ์•ฝํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. +- **๋”ฐ๋ผ์„œ, ์ฟ ํ‚ค์—๋Š” ๋ฏผ๊ฐํ•˜๊ฑฐ๋‚˜ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•˜๋‹ค.** + +#### (์ถ”๊ฐ€) ์ฟ ํ‚ค์˜ ์ข…๋ฅ˜ +> #### ๐Ÿฅจ Session Cookie +> ์ž„์‹œ ์ฟ ํ‚ค๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์„ธ์…˜ ์ฟ ํ‚ค๋Š” **์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ**์ด ๋˜๋ฉฐ ๋งŒ๋ฃŒ์ผ์ด ์—†๋‹ค. +> ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ๋ฅผ ์ ‘์† ์‹œ ์ƒ์„ฑ๋˜๋ฉฐ **๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์„ ๋•Œ ์˜๊ตฌ์  ์‚ญ์ œ** + +> #### ๐Ÿฅจ Persistant Cookie +> ์‚ฌ์šฉ์ž์˜ ์žฌ๋ฐฉ๋ฌธ์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์‹๋ณ„ํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉ๋œ๋‹ค. +> ๋กœ๊ทธ์ธ ์œ ์ง€ ๋ฐ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. +> ๊ฐœ์ธ ๋ฐ์ดํ„ฐ ๋…ธ์ถœ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด ๋ณด์•ˆ์ƒ ์ข‹์ง€ ์•Š๋‹ค. +> ์ฃผ๋กœ ์œ ์ €์˜ ์ด์ „ ๋ฐฉ๋ฌธ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— Tracking cookie๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค. +> ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ์นด์นด์˜คํ†ก PC๋ฒ„์ „์—์„œ ๋กœ๊ทธ์ธํ•  ๋•Œ ์ž๋™๋กœ๊ทธ์ธ ๊ฑธ์–ด๋‘๋Š”๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฐœ๋…์ด๋‹ค. + +> #### ๐Ÿฅจ Secure Cookie +> ์›น๋ธŒ๋ผ์šฐ์ €์™€ ์›น์„œ๋ฒ„๊ฐ€ **HTTPS๋กœ ํ†ต์‹ ํ•  ๊ฒฝ์šฐ**์—๋งŒ ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฟ ํ‚ค๋กœ ์ „์†กํ•œ๋‹ค. +> ํ•ญ์ƒ **์•”ํ˜ธํ™”**ํ•˜๊ธฐ ๋•Œ๋ฌธ์— **์ฟ ํ‚ค๊ฐ€ ๋…ธ์ถœ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.** + +> #### ๐Ÿฅจ Third-Party Cookie +> **์ ‘์†ํ•œ ์‚ฌ์ดํŠธ ๋„๋ฉ”์ธ์—์„œ ๋ฐœํ–‰๋˜์ง€ ์•Š์€ ์ฟ ํ‚ค**๋Š” ๋ชจ๋‘ ์„œ๋“œ ํŒŒํ‹ฐ ์ฟ ํ‚ค(์„œ๋ธŒ ๋„๋ฉ”์ธ ์˜ˆ์™ธ) +> ์ฃผ๋กœ **๊ด‘๊ณ  ๋ชฉ์ **์œผ๋กœ ์‚ฌ์šฉ. *์šด๋™๊ธฐ๊ตฌ ์‚ฌ์ดํŠธ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์šด๋™๊ธฐ๊ตฌ ๊ด‘๊ณ ๊ฐ€ ๊ณ„์† ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ!! + +#### ์„ธ์…˜์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? +- ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์˜ค๋Š” ์ผ๋ จ์˜ ์š”์ฒญ์„ ํ•˜๋‚˜์˜ ์ƒํƒœ๋กœ ๋ณด๊ณ  ๊ทธ ์ƒํƒœ๋ฅผ ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. +- ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ์„œ๋ฒ„์— ์ ‘์†ํ•ด์žˆ๋Š” ์ƒํƒœ๊ฐ€ ํ•˜๋‚˜์˜ ๋‹จ์œ„ +- ์„ธ์…˜์€ ์ฟ ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ •๋ณด ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅํ•˜๋Š” ์ฟ ํ‚ค์™€ ๋‹ฌ๋ฆฌ ์„ธ์…˜์€ ์„œ๋ฒ„ ์ธก์—์„œ ๊ด€๋ฆฌ +- ์„œ๋ฒ„์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์…˜ ID๋ฅผ ๋ถ€์—ฌํ•˜๋ฉฐ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์— ์ ‘์†ํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ์ธ์ฆ์ƒํƒœ๋ฅผ ์œ ์ง€ +- ํด๋ผ์ด์–ธํŠธ๊ฐ€ Request๋ฅผ ๋ณด๋‚ด๋ฉด, ํ•ด๋‹น ์„œ๋ฒ„์˜ ์—”์ง„์ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์œ ์ผํ•œ ID๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๋ฐ ์ด๊ฒƒ์ด ์„ธ์…˜ ID +- ์„ธ์…˜ ID๋กœ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”๊ตฌ์— ๋งž๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต +- ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ๋‘๊ธฐ ๋•Œ๋ฌธ์— ์ฟ ํ‚ค๋ณด๋‹ค ๋ณด์•ˆ์— ์ข‹์ง€๋งŒ, ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์ฐจ์ง€ํ•˜๊ฒŒ ๋จ -> Traffic ๊ณผ๋„ํ•˜๊ฒŒ ๋ชฐ๋ฆผ -> ์„ฑ๋Šฅ ์ €ํ•˜ -> ์„œ๋ฒ„ ํŽ‘! +- **๋กœ๊ทธ์ธ ์ž‘์—…๊ณผ ๊ฐ™์ด ์ฃผ๋กœ ๋ณด์•ˆ์ƒ ์ค‘์š”ํ•œ ์ƒํ™ฉ์ผ๋•Œ ์„ธ์…˜์„ ์ด์šฉ!** + +#### Session & Cookie : Request & Response Flow +1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— Request โ†’ ์„œ๋ฒ„๋Š” ์„ธ์…˜์„ ์ƒ์„ฑ + ๊ณ ์œ ํ•œ ์„ธ์…˜ ID๋ฅผ ๋ฐœ๊ธ‰. + +2. ์„œ๋ฒ„๋Š” ์„ธ์…˜ ID๋ฅผ ์ฟ ํ‚ค์— ์„ค์ •ํ•œ ๋’ค ํด๋ผ์ด์–ธํŠธ๋กœ Response. + +```http +HTTP/1.1 200 OK +Set-Cookie: sessionId=1q2w3e4r; HttpOnly; Secure +# ์ฐธ๊ณ  : HttpOnly๋Š” Httpํ†ต์‹ ์™ธ์—๋Š” ์ฟ ํ‚ค์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” Secure Coding์˜ ์ผ์ข…์ด๋‹ค. +# ์•„๊นŒ ์–ธ๊ธ‰ํ–ˆ๋˜ XSS๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ํŽธ์•ˆํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. +``` + +3. ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค์Œ ์š”์ฒญ ์‹œ, ์ด ์ฟ ํ‚ค(์„ธ์…˜ ID)๋ฅผ ํฌํ•จํ•˜์—ฌ ์„œ๋ฒ„์— ์ „์†ก. + +```http +GET /todos HTTP/1.1 +Cookie: sessionId=abc123 +``` + +4. ์„œ๋ฒ„๋Š” ์„ธ์…˜ ID๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณต. + + + +#### Difference of Session & Cookie +- ์ฟ ํ‚ค์™€ ์„ธ์…˜์€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋™์ž‘ ์›๋ฆฌ๋„ ๋น„์Šทํ•˜๋‹ค. ๊ทธ ์ด์œ ๋Š” ์„ธ์…˜๋„ ๊ฒฐ๊ตญ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ. +- ํฐ ์ฐจ์ด์ ์€ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ์œ„์น˜์ด๋‹ค. ์ฟ ํ‚ค๋Š” ์„œ๋ฒ„์˜ ์ž์›์„ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์„ธ์…˜์€ ์„œ๋ฒ„์˜ ์ž์›์„ ์‚ฌ์šฉํ•œ๋‹ค. +- ๋ณด์•ˆ ๋ฉด์—์„œ ์„ธ์…˜์ด ๋” ์šฐ์ˆ˜ํ•˜๋‹ค. +- ์ฟ ํ‚ค ๊ฐ™์€ ๊ฒฝ์šฐ๋Š”, XSS ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•˜๋ฉฐ, ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ Sniffingํ•  ์ˆ˜ ์žˆ๋‹ค. +- ์„ธ์…˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š”, ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜๋ฏ€๋กœ ๋น„๊ต์  ์•ˆ์ „ํ•˜๋‹ค (๊ทธ๋Ÿฌ๋‚˜, ์ฟ ํ‚ค์— ์ˆ˜์ง‘๋œ Session-ID์ •๋ณด๊ฐ€ ํƒˆ์ทจ๋‹นํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผํ•˜๊ธฐ๋„ ํ•œ๋‹ค.) +- ๋ผ์ดํ”„ ์‚ฌ์ดํด์€ ์ฟ ํ‚ค๋„ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์ด ์žˆ์ง€๋งŒ ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•ด๋„ ์ •๋ณด๊ฐ€ ์œ ์ง€๋  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ๋”ฐ๋กœ ์ง€์ •ํ•ด ์ฟ ํ‚ค๋ฅผ ์‚ญ์ œํ•  ๋•Œ๊นŒ์ง€ ์œ ์ง€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. +- ๋ฐ˜๋ฉด์— ์„ธ์…˜๋„ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์— ์ƒ๊ด€์—†์ด ์‚ญ์ œ๋œ๋‹ค. +- ์†๋„ ๋ฉด์—์„œ ์ฟ ํ‚ค๊ฐ€ ๋” ์šฐ์ˆ˜ํ•˜๋ฉฐ, ์ฟ ํ‚ค๋Š” ์ฟ ํ‚ค์— ์ •๋ณด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์— ์š”์ฒญ ์‹œ ์†๋„๊ฐ€ ๋น ๋ฆ„. +- ์„ธ์…˜์€ ์ •๋ณด๊ฐ€ ์„œ๋ฒ„์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ๊ฐ€ ์š”๊ตฌ๋˜์–ด ๋น„๊ต์  ๋Š๋ฆฐ ์†๋„๋ฅผ ๋‚ธ๋‹ค. + +--- + +### ๐Ÿ˜Ž ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ๊ณผ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ + +#### Session-Based Authorization Flow +- ๋กœ๊ทธ์ธ ์š”์ฒญ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด(ID/PW)๋ฅผ ์ „์†ก. +```http +POST /login +{ + "id": "asdf", + "pwd": "qwer" +} +``` +- ์„ธ์…˜ ์ƒ์„ฑ: ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž ์ธ์ฆ ํ›„ ์„ธ์…˜์„ ์ƒ์„ฑํ•˜๊ณ , ๊ณ ์œ ํ•œ ์„ธ์…˜ ID ๋ฐœ๊ธ‰. +- ** ์„ธ์…˜ ID๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ฟ ํ‚ค์— ์ €์žฅํ•˜๋„๋ก Set-Cookie ํ—ค๋”๋กœ ์‘๋‹ต +```http +HTTP/1.1 200 OK +Set-Cookie: sessionId=a1s2d3 +``` +- ์„ธ์…˜ ID ์ „๋‹ฌ: ํด๋ผ์ด์–ธํŠธ๋Š” ์„ธ์…˜ ID๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅ. +- ์ธ์ฆ๋œ ์š”์ฒญ: ํด๋ผ์ด์–ธํŠธ๋Š” ์ดํ›„ ์š”์ฒญ ์‹œ ์„ธ์…˜์„ ์„œ๋ฒ„๊ฐ€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์…˜ ID๋ฅผ ํฌํ•จ. +```http +HTTP/1.1 200 OK +GET /todos +Cookie: sessionId=a1s2d3 +``` +- ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ: ์„œ๋ฒ„๋Š” ์„ธ์…˜ ID๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๊ณ  ์š”์ฒญ ์ฒ˜๋ฆฌ. + +#### Token-Based Authorization Flow +1. ๋กœ๊ทธ์ธ ์š”์ฒญ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด(ID/PW)๋ฅผ ์ „๋‹ฌ. +```http +POST /login +{ + "id": "asdf", + "pwd": "qwer" +} +``` +2. ํ† ํฐ ๋ฐœ๊ธ‰: ์„œ๋ฒ„๋Š” ์ธ์ฆ ํ›„, JWT(JSON Web Token) ๊ฐ™์€ ํ† ํฐ์„ ๋ฐœ๊ธ‰. +```http +HTTP/1.1 200 OK +{ + "accessToken": "์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ํ•ด์‹ฑํ•œ ๋ณด์•ˆ ํ‚ค" +} +``` +3. ํ† ํฐ ์ €์žฅ: ํด๋ผ์ด์–ธํŠธ๋Š” ํ† ํฐ์„ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€, ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€, ํ˜น์€ ์ฟ ํ‚ค์— ์ €์žฅ. +4. ์ธ์ฆ๋œ ์š”์ฒญ: ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ ์‹œ ํ† ํฐ์„ HTTP ํ—ค๋”(Authorization ๋ถ€๋ถ„)์— ํฌํ•จ. +```http +GET /todos +Authorization: "์ธ์ฆ ๋ฐฉ์‹" "์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ํ•ด์‹ฑํ•œ ๋ณด์•ˆ ํ‚ค" +``` +5. ์„œ๋ฒ„ ์ฒ˜๋ฆฌ: ์„œ๋ฒ„๋Š” ํ† ํฐ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ณ  ์š”์ฒญ ์ฒ˜๋ฆฌ. + +#### (์ถ”๊ฐ€) JSON Web Token (JWT) +**ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ**์‹œ์—๋Š” ์ด JWT๋ฅผ ํ™œ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. + +JWT๋Š” ํ—ค๋”, ํŽ˜์ด๋กœ๋“œ, ์‹œ๊ทธ๋‹ˆ์ณ์˜ ๊ตฌ์กฐ๋กœ 1q2w3e.q1w2e3.qqee2์™€ ๊ฐ™์ด (.)์„ ํ†ตํ•ด ๊ตฌ๋ถ„์ด ๋œ๋‹ค. + +- ํ—ค๋” : ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์•”ํ˜ธํ™” ํ•  ๊ฒƒ ์ธ๊ฐ€? +- ํŽ˜์ด๋กœ๋“œ : ์ตœ์†Œํ•œ์˜ ๋ฐ์ดํ„ฐ, ์•„์ด๋””๋‚˜ PW์™€ ๊ฐ™์ด ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ด์„  ์•ˆ๋œ๋‹ค. (๋ˆ„๊ตฌ๋‚˜ ์—ด๋žŒ ๊ฐ€๋Šฅ) +- ์‹œ๊ทธ๋‹ˆ์ณ : ๋ณด์•ˆ์ƒ ์žˆ๋Š” ๋ถ€๋ถ„. ํ† ํฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. Header์™€ Payload + ์•”ํ˜ธํ™”๋œ ํ‚ค์˜ ์กฐํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์–ด ํ† ํฐ ๊ตํ™˜ ์‹œ์˜ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์ด๋‹ค. +- *** ์ฐธ๊ณ  : ์ปดํ“จํ„ฐ ๋ณด์•ˆ์—์„œ์˜ ํŽ˜์ด๋กœ๋“œ์™€, JWT์—์„œ์˜ ํŽ˜์ด๋กœ๋“œ๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋‹ค. + +#### ๊ฐ ํ—ค๋”์˜ ์ฒ˜๋ฆฌ +|Session-Based Auth|Token-Based Auth| +|------------------|----------------| +|์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ sessionId๊ฐ’์„ ์ด์šฉ|Authorization ํ—ค๋”์— ์–ด๋–ค ์ธ์ฆ ๋ฐฉ์‹์ธ์ง€ + ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐœ๊ธ‰๋ฐ›์€ ๋ณด์•ˆ ํ‚ค๋ฅผ ํฌํ•จํ•ด์„œ ์ฒ˜๋ฆฌ| + +#### Token์€ ์–ด๋””์— ๊ด€๋ฆฌ๋˜๋Š”๊ฐ€? +1. ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ + ๋ง ๊ทธ๋Œ€๋กœ ํด๋ผ์ด์–ธํŠธ(Browser)์˜ PC ๋‚ด๋ถ€์— Key-Value ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค. + ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋˜๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ PC์˜ ๋‚ด๋ถ€์— ์ €์žฅํ•˜๋‹ค๋ณด๋‹ˆ ์šฉ๋Ÿ‰์„ ํฐ ๊ฒƒ๋„ ์ €์žฅ ๊ฐ€๋Šฅ. ๊ทธ๋Ÿฌ๋‚˜ ๋ณด์•ˆ์˜ ๊ฒฐํ•จ ๋•Œ๋ฌธ์— ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋กœ ํ† ํฐ์„ ๊ด€๋ฆฌํ•˜๋Š”๊ฑด ํ”ผํ•˜๋Š” ํŽธ์ด๋‹ค. + +2. ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€ + ์‚ฌ์šฉ์ž๊ฐ€ ์„ธ์…˜์„ ์œ ์ง€ํ•˜๋Š” ๋™์•ˆ์—๋งŒ ์œ ์ง€๋˜๋Š” ์ €์žฅ ๊ณต๊ฐ„์œผ๋กœ, ๋ธŒ๋ผ์šฐ์ € 'ํƒญ'๋ณ„๋กœ ๊ด€๋ฆฌ๋œ๋‹ค. ์ธํ„ฐ๋„ท ์ฐฝ ๋‹ซ์œผ๋ฉด ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ๋‚ ๋ผ ๊ฐ€๋Š”๊ฒƒ๋„ ์—ฌ๊ธฐ์„œ ๋น„๋กฏ๋œ๊ฒŒ ์•„๋‹๊นŒ ์‹ถ๋‹ค. + +3. ์ฟ ํ‚ค + HTTP๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„์— ํฌํ•จ์‹œ์ผœ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์œผ๋กœ ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค. + +--- + +### ๐Ÿ˜Ž ์‹ค๋ฌด์—์„œ๋Š” ์–ด๋–ค ์ธ์ฆ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ• ๊นŒ? + +#### RESTful API๋กœ ์„ค๊ณ„๋œ ์„œ๋น„์Šค์—์„œ๋Š” ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. +- ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์˜ ์žฅ์ ์€ ์„œ๋ฒ„์˜ ํ™•์žฅ์„ฑ(ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ์— ์„œ๋ฒ„ ์ž…์žฅ์—์„  ํŽธ์•ˆ) + ๋ฌด์ƒํƒœ์„ฑ์ด๋‹ค. +- ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์„œ๋ฒ„์— ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. +- Instagram, Facebook๊ณผ ๊ฐ™์€ SNS๋Š” ๋Œ€๋ถ€๋ถ„ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹์„ ํ™œ์šฉํ•œ๋‹ค. + +#### ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋“ค์ด ์˜ค๊ณ ๊ฐ€๋Š” ์„œ๋น„์Šค์—์„  ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. +- ์˜ˆ๋ฅผ ๋“ค๋ฉด ๊ตฐ๋Œ€ ํ˜น์€ ์‚ฌ๋‚ด ์ธํŠธ๋ผ๋„ท, SNS์˜ ๊ด€๋ฆฌ์ž๋“ค๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€ ๋“ฑ์€ ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ํ™œ์šฉํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค. +- ๋ง๊ณ ๋„ ์งง์€ ์ˆ˜๋ช…์„ ๊ฐ€์ง„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜ค๋ž˜ ๋จธ๋ฌด๋ฅผ ํ•„์š”๊ฐ€ ์—†๋Š” ํŽ˜์ด์ง€) ์€ ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. +- ์™œ๋ƒํ•˜๋ฉด ์„œ๋น„์Šค ๊ตฌ์ถ• ์ž…์žฅ์—์„œ๋„ ๋” ๊ฐ„ํŽธํ•˜๊ณ , ๋ณด์•ˆ์ƒ ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. +- ์ด์™€ ๊ฐ™์ด '์ ์€ ์ž‘์—…', 'ํ•œ ๋ฒˆ์˜ ์ž‘์—… (๋„ฅ์Šจ OTP์™€ ๊ฐ™์ด ์ž ๊น๋™์•ˆ๋งŒ ์ธ์ฆํ•˜๋Š” ๊ทธ๋Ÿฐ ํŽ˜์ด์ง€)'์ผ ๋•Œ์—๋Š” ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์ฃผ๋กœ ํ™œ์šฉํ•œ๋‹ค. + +**Conclusion : ๊ฒฐ๊ตญ ๋‘˜ ๋‹ค ์“ด๋‹ค๋Š” ๋ง์ด๋‹ค.** + + +--- + +### ๐Ÿ˜Ž Cache๋ž€? +#### ์ •์˜ +์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋” ๋น ๋ฅธ ์ €์žฅ์†Œ(์ฃผ๋กœ ๋ฉ”๋ชจ๋ฆฌ)์— ์ž„์‹œ๋กœ ์ €์žฅํ•ด, ์ดํ›„ ๋™์ผํ•œ ์š”์ฒญ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ œ๊ณตํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋œปํ•œ๋‹ค. + +#### ์™œ ์“ฐ๋Š”๊ฑฐ์ง€? +์ ‘๊ทผ ์‹œ๊ฐ„์— ๋น„ํ•ด ์›๋ณธ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค. ์› ์„œ๋ฒ„(origin server)์— ๋Œ€ํ•œ ์š”์ฒญ์„ ์ค„์—ฌ์ฃผ์–ด, ๋” ๋นจ๋ฆฌ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ์›๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜๋ฉด ์บ์‹œ๊ฐ€ ์˜๋ฏธ๊ฐ€ ์—†์–ด์ง€๋ฏ€๋กœ ๊ต์ฒด๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋†’์•„์ง€๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์ƒ๊ธด๋‹ค. + +#### ๊ทธ๋Ÿผ ์บ์‹œ๋Š” ์–ด๋–ป๊ฒŒ ๊ต์ฒด๊ฐ€ ์ด๋ฃจ์–ด์ง€๋‚˜์š”? +1. LRU(Least Recently Used) : ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„ ์žˆ๋Š” ์บ์‹œ ์ค‘ ๊ฐ€์žฅ ์˜ค๋ž˜๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์บ์‹œ๋ฅผ ์ƒˆ๋กœ์šด ์บ์‹œ๋กœ ๊ต์ฒด +2. LFU(Least Frequently Used) : ๊ฐ€์žฅ ์ ๊ฒŒ ์ฐธ์กฐ๋œ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•œ๋‹ค +3. FIFO(First In First Out) : ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ต์ฒดํ•œ๋‹ค. \ No newline at end of file