diff --git a/week10/keyword/keyword.md b/week10/keyword/keyword.md new file mode 100644 index 0000000..6a6a65e --- /dev/null +++ b/week10/keyword/keyword.md @@ -0,0 +1,63 @@ +# WEEK 10 - ๐Ÿ’ง๋‚˜๋ฏธ/์ด๋‚˜์˜ +## Spring Security +### ์ •์˜ + ์ธ์ฆ, ๊ถŒํ•œ ๊ด€๋ฆฌ ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ด ์›น ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ํ•„์ˆ˜์ ์ธ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ๋„์›€์„ ์ฃผ๋Š” Spring์˜ ํ”„๋ ˆ์ž„์›Œํฌ +### ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  + ๋ณด์•ˆ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ -> ๊ฐœ๋ฐœ ์ž‘์—… ํšจ์œจ UP!!! +### ์•„ํ‚คํ…์ณ + 1. ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ด. + 2. Authotication Filter ๊ฐ€ ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„๊ณ  AuthoticationManager๋กœ ์š”์ฒญ์„ ์œ„์ž„ํ•จ + 3. Authotication Manager๋Š” ๋“ฑ๋ก๋œ Authotication Provider๋ฅผ ์กฐํšŒํ•˜๋ฉฐ ์ธ์ฆ์„ ์š”๊ตฌํ•จ + 4. Authotication Provider๊ฐ€ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜์—ฌ UserDetails ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์คŒ + 5. ๊ฒฐ๊ณผ๋Š” SecurityContextHolder์— ์ €์žฅ์ด ๋˜์–ด ์ €์žฅ๋œ ์œ ์ €์ •๋ณด๋ฅผ Spring Controller์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ + +## ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ€(Authorization) +||์ธ์ฆ (Authentication)|์ธ๊ฐ€ (Authorization)| +|-|-------------------|--------------------| +|์ •์˜|๊ฐœ์ฒด(์‚ฌ์šฉ์ž ๋˜๋Š” ์‹œ์Šคํ…œ)์˜ ์‹ ์›(Identity)์„ ํ™•์ธํ•˜๋Š” ๊ณผ์ •|์ธ์ฆ๋œ ๊ฐœ์ฒด์—๊ฒŒ ํŠน์ • ์ž์›(Resource)์ด๋‚˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌ/๊ฑฐ๋ถ€ํ•˜๋Š” ๊ณผ์ •| +|๋‹จ๊ณ„|๋ณด์•ˆ ํ”„๋กœ์„ธ์Šค์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„|์ธ์ฆ ์„ฑ๊ณต ํ›„์— ์ˆ˜ํ–‰๋˜๋Š” ํ›„์† ๋‹จ๊ณ„| +|์˜ˆ์‹œ|์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋กœ๊ทธ์ธํ•˜๋Š” ๊ณผ์ • (๋˜๋Š” OTP, ์ƒ์ฒด์ธ์‹)|๋กœ๊ทธ์ธ ํ›„, ๊ด€๋ฆฌ์ž๋งŒ '์‚ฌ์šฉ์ž ์‚ญ์ œ' ๋ฒ„ํŠผ์„ ๋ณผ ์ˆ˜ ์žˆ๊ฑฐ๋‚˜, ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ํ”„๋กœํ•„๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œํ•˜๋Š” ๊ฒƒ| +|๊ฒฐ๊ณผ|์‹ ์› ์ฆ๋ช… (์‚ฌ์šฉ์ž๊ฐ€ ๋งž๋Š”์ง€ ํ™•์ธ)|์ ‘๊ทผ ํ—ˆ์šฉ/๊ฑฐ๋ถ€ (์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ)| +## ์„ธ์…˜๊ณผ ํ† ํฐ +### ์„ธ์…˜ Session + - ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•จ (์ƒํƒœ ์œ ์ง€/Stateful) + --- ๊ณผ์ • --- + 1. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์„ธ์…˜์„ ์ƒ์„ฑํ•จ + 2. ์„œ๋ฒ„๋Š” ์ด ์„ธ์…˜์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•œ ์„ธ์…˜ ID๋ฅผ ์ƒ์„ฑํ•จ + 3. ์„œ๋ฒ„๋Š” ์ด ์„ธ์…˜ ID๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ฟ ํ‚ค ํ˜•ํƒœ๋กœ ์ „๋‹ฌํ•จ + 4. ํด๋ผ์ด์–ธํŠธ๋Š” ์ดํ›„ ๋ชจ๋“  ์š”์ฒญ๋งˆ๋‹ค ์ด ์„ธ์…˜ ID๊ฐ€ ๋‹ด๊ธด ์ฟ ํ‚ค๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•จ + 5. ์„œ๋ฒ„๋Š” ์ฟ ํ‚ค์˜ ์„ธ์…˜ ID๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ์ €์žฅ๋œ ์„ธ์…˜ ์ •๋ณด๋ฅผ ์ฐพ์•„ ์‚ฌ์šฉ์ž๋ฅผ ํ™•์ธํ•˜๊ณ  ์ธ๊ฐ€ํ•จ + +### ํ† ํฐ Token + - ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ (์ƒํƒœ ๋น„์ €์žฅ/Stateless) + --- ๊ณผ์ • --- + 1. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด์™€ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด ๋‹ด๊ธด ์ธ์ฆ ํ† ํฐ์„ ์ƒ์„ฑํ•˜๊ณ  ์„œ๋ช…ํ•จ + 2. ์„œ๋ฒ„๋Š” ์ด ํ† ํฐ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•จ + 3. ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ํ† ํฐ์„ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์ €์žฅํ•จ + 4. ํด๋ผ์ด์–ธํŠธ๋Š” ์ดํ›„ ๋ชจ๋“  ์š”์ฒญ๋งˆ๋‹ค HTTP ํ—ค๋”์— ํ† ํฐ์„ ๋‹ด์•„ ์„œ๋ฒ„๋กœ ์ „์†กํ•จ + 5. ์„œ๋ฒ„๋Š” ํ† ํฐ์„ ๋ฐ›์œผ๋ฉด ์‹œํฌ๋ฆฟํ‚ค๋ฅผ ๊ฒ€์ฆํ•˜์—ฌ ํ† ํฐ์˜ ์œ„๋ณ€์กฐ ์—ฌ๋ถ€์™€ ์œ ํšจ๊ธฐ๊ฐ„์„ ํ™•์ธํ•˜๊ณ , ์œ ํšจํ•˜๋ฉด ํ† ํฐ์— ๋‹ด๊ธด ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ธ๊ฐ€ ์ฒ˜๋ฆฌ + -> ์„œ๋ฒ„๋Š” ๋ณ„๋„์˜ DB ์กฐํšŒ๊ฐ€ ํ•„์š” ์—†์Œ +### ์„ธ์…˜๊ณผ ํ† ํฐ ๋น„๊ต + - ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ž„ + - ๋‘ ๋ฐฉ์‹์€ ^^์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹^^ ์—์„œ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๊ฐ€ ๋‚จ! + +| ํŠน์ง• |์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ|ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ (JWT) +|----------|------------|----------------- +| ์ƒํƒœ ๊ด€๋ฆฌ |์ƒํƒœ ์œ ์ง€ (Stateful)|์ƒํƒœ ๋น„์ €์žฅ (Stateless) +| ์ธ์ฆ ์ •๋ณด ์ €์žฅ ์œ„์น˜|์„œ๋ฒ„ (๋ฉ”๋ชจ๋ฆฌ, DB, Redis ๋“ฑ)|ํด๋ผ์ด์–ธํŠธ (Local Storage, Cookie ๋“ฑ) +| ํ™•์žฅ์„ฑ |์„œ๋ฒ„ ๊ฐ„ ์„ธ์…˜ ๊ณต์œ  ํ•„์š”๋กœ ์ธํ•ด ์–ด๋ ค์›€|์„œ๋ฒ„ ๊ฐ„ ์ƒํƒœ ๊ณต์œ  ๋ถˆํ•„์š”๋กœ ์šฐ์ˆ˜ํ•จ +| ๋กœ๊ทธ์•„์›ƒ/๋ฌดํšจํ™” |์„œ๋ฒ„์—์„œ ์„ธ์…˜ ์‚ญ์ œ๋กœ ์ฆ‰์‹œ ๊ฐ€๋Šฅ|๋งŒ๋ฃŒ ์ „๊นŒ์ง€๋Š” ์ฆ‰์‹œ ๋ฌดํšจํ™” ์–ด๋ ค์›€ (์ถ”๊ฐ€ ๋กœ์ง ํ•„์š”) +| ์‚ฌ์šฉ ํ™˜๊ฒฝ |์ „ํ†ต์ ์ธ ์›น ์•ฑ (Monolithic)|SPA, ๋ชจ๋ฐ”์ผ ์•ฑ, Microservice, API ์„œ๋ฒ„ + + ์ตœ๊ทผ์—๋Š” ํ™•์žฅ์„ฑ๊ณผ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์— ์œ ๋ฆฌํ•œ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ(JWT) ๋ฐฉ์‹์ด ๋ชจ๋ฐ”์ผ ์›น, SPA, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๋“ฑ์—์„œ ๋„๋ฆฌ ์ฑ„ํƒ๋˜๊ณ  ์žˆ์Œ +## ์•ก์„ธ์Šค ํ† ํฐ(Access Token)๊ณผ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ(Refresh Token) +### ์•ก์„ธ์Šค ํ† ํฐ Access Token + - ์—ญํ• : ์‹ค์ œ API์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ† ํฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๊ฐ€์ง + - ์œ ํšจ๊ธฐ๊ฐ„: ๋งค์šฐ ์งง๊ฒŒ ์„ค์ • (์˜ˆ: 30๋ถ„/1์‹œ๊ฐ„) + - ์ €์žฅ ์œ„์น˜: ํด๋ผ์ด์–ธํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ, ๋กœ์ปฌ ์ €์žฅ์†Œ ๋“ฑ์— ์ €์žฅ๋จ + - ๋ชฉํ‘œ: ํ† ํฐ์ด ํƒˆ์ทจ๋˜๋”๋ผ๋„ ์งง์€ ์‹œ๊ฐ„ ๋‚ด์— ๋งŒ๋ฃŒ๋˜๋„๋ก ํ•˜์—ฌ ๋ณด์•ˆ ์œ„ํ—˜์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ + -> ์ž์ฃผ ์‚ฌ์šฉ: ๋งค ์š”์ฒญ ์‹œ HTTP Authorization ํ—ค๋”์— ๋‹ด๊ฒจ ์ „์†ก๋จ + -> ๋ฏผ๊ฐ์„ฑ: ์งง์€ ์œ ํšจ ๊ธฐ๊ฐ„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์ด ํ† ํฐ์ด ํƒˆ์ทจ๋˜๋ฉด ํƒˆ์ทจ ์‹œ์ ๋ถ€ํ„ฐ ๋งŒ๋ฃŒ ์‹œ์ ๊นŒ์ง€๋Š” ๊ถŒํ•œ์ด ์•…์šฉ๋  ์ˆ˜ ์žˆ์–ด ๊ฐ€์žฅ ๋ฏผ๊ฐ„ํ•จ + +### ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ Refresh Token + - ์—ญํ• : Access Token์ด ๋งŒ๋ฃŒ๋˜์—ˆ์„ ๋•Œ, ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด Access Token ์žฌ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ† ํฐ \ No newline at end of file diff --git a/week10/mission/mission.md b/week10/mission/mission.md new file mode 100644 index 0000000..a145282 --- /dev/null +++ b/week10/mission/mission.md @@ -0,0 +1,27 @@ +# WEEK 10 - ๐Ÿ’ง๋‚˜๋ฏธ/์ด๋‚˜์˜ + +## session ๋ฐฉ์‹ +### ํšŒ์›๊ฐ€์ž… +![img.png](sessionSignup.png) +DB์— ์ƒ์„ฑ๋œ ๋ชจ์Šต +![img_1.png](sessionDB.png) +### ๋กœ๊ทธ์ธ +ROLE_ADMIN์œผ๋กœ ๋ณ€๊ฒฝ ํ›„ ๋กœ๊ทธ์ธํ•˜๋‹ˆ, ์Šค์›จ๊ฑฐ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋œ ๋ชจ์Šต +![img_2.png](sessionLogin.png) +### ๋กœ๊ทธ์•„์›ƒ +์ฃผ์†Œ์— logout ํ›„ ์Šค์›จ๊ฑฐ๋กœ ๋Œ์•„๊ฐ€๋ฉด ๋กœ๊ทธ์•„์›ƒ ๋œ ๋ชจ์Šต +![img_3.png](sessionLogout.png) +### ๊นƒํ—ˆ๋ธŒ ๋ธŒ๋žœ์น˜ ์ฃผ์†Œ +https://github.com/na311ng/umc9th-na311ng/tree/feat/SpringSecurity + +## token ๋ฐฉ์‹ +### ํšŒ์›๊ฐ€์ž… +![img_4.png](tokenSignup.png) +![tokenDB.png](tokenDB.png) +### ๋กœ๊ทธ์ธ +![img_5.png](tokenLogin.png) +token access ํ›„ test ํ•ด๋ณด๋ฉด ์„ฑ๊ณตํ•˜๋Š” ๋ชจ์Šต +![img_6.png](tokenAuth.png) +![img_7.png](tokenTest.png) +### ๊นƒํ—ˆ๋ธŒ ๋ธŒ๋žœ์น˜ ์ฃผ์†Œ +https://github.com/na311ng/umc9th-na311ng/tree/feat/JWT diff --git a/week10/mission/sessionDB.png b/week10/mission/sessionDB.png new file mode 100644 index 0000000..24b9e78 Binary files /dev/null and b/week10/mission/sessionDB.png differ diff --git a/week10/mission/sessionLogin.png b/week10/mission/sessionLogin.png new file mode 100644 index 0000000..c989dbb Binary files /dev/null and b/week10/mission/sessionLogin.png differ diff --git a/week10/mission/sessionLogout.png b/week10/mission/sessionLogout.png new file mode 100644 index 0000000..664f94d Binary files /dev/null and b/week10/mission/sessionLogout.png differ diff --git a/week10/mission/sessionSignup.png b/week10/mission/sessionSignup.png new file mode 100644 index 0000000..99b5416 Binary files /dev/null and b/week10/mission/sessionSignup.png differ diff --git a/week10/mission/tokenAuth.png b/week10/mission/tokenAuth.png new file mode 100644 index 0000000..6352040 Binary files /dev/null and b/week10/mission/tokenAuth.png differ diff --git a/week10/mission/tokenDB.png b/week10/mission/tokenDB.png new file mode 100644 index 0000000..a5b00ef Binary files /dev/null and b/week10/mission/tokenDB.png differ diff --git a/week10/mission/tokenLogin.png b/week10/mission/tokenLogin.png new file mode 100644 index 0000000..77a6905 Binary files /dev/null and b/week10/mission/tokenLogin.png differ diff --git a/week10/mission/tokenSignup.png b/week10/mission/tokenSignup.png new file mode 100644 index 0000000..3bb63ba Binary files /dev/null and b/week10/mission/tokenSignup.png differ diff --git a/week10/mission/tokenTest.png b/week10/mission/tokenTest.png new file mode 100644 index 0000000..bad5ec1 Binary files /dev/null and b/week10/mission/tokenTest.png differ