ํ๋ก์ ํธ ์ค๋ช
๋ฐ ์ค๊ณ
๐งธ๊ธฐ๋ณธ ์ค์
- ์ด๋ฆ : AuthServer7
- ๋ฒ์ : SpringBoot 2.6.8 & JDK 11
- ํจํค์ง : me.ver.Authserver7
- ์์กด์ฑ
- JPA
- Security
- Validation
- Web
- Redis
- Devtools
- Lombok
- MySQL
- Jsonwebtoken(api, impl, jackson)
- (ํ
์คํธ) Test, SecurityTest
- DB ๊ด๋ จ
-> ํ๊ฒฝ ๋ณ์ : DB_PASSWORD, DB_URL, DB_USERNAME์ผ๋ก ์ค์
-> DB ์ด๋ฆ : authserver7
๐งธ๋ด์ฉ ์ ๋ฆฌ
1. JWT
- ํ ํฐ ํ์ธ ๊ฐ๋ฅ ์ฌ์ดํธ(jwt.io)
- Header + Payload + Signature
- Header : Signature ํด์ฑ ์๊ณ ๋ฆฌ์ฆ ์ ๋ณด(alg : HS256)
- Payload : ์๋ฒ - ํด๋ผ์ด์ธํธ ๊ฐ์ ์ค์ ์ฌ์ฉ ์ ๋ณด ์ ์ฅ(iss: ํ ํฐ ๋ฐ๊ธ์, exp : ํ ํฐ ๋ง๋ฃ ์๊ฐ)
- Signature : ํ ํฐ ์ ํจ์ฑ ๊ฒ์ฆ ๋ฌธ์์ด ์ ์ฅ(ํค๋ + ํ์ด๋ก๋ + ์ํฌ๋ฆฟ ํค ๊ตฌ์กฐ๋ก ์์ฑํ๋ค -> ์ํฌ๋ฆฟ ํค๋ ์๋ฒ์์ ๊ด๋ฆฌํจ)
- AccessToken & RefreshToken : ์์ธ์ค ํ ํฐ์ ์ ํจ์๊ฐ ์งง๊ฒ, ๋ฆฌํ๋ ์ ํ ํฐ ํจ๊ป ๋ฐ๊ธ
- RefreshToken์ ์ ์ฅ : ์ด ํ ํฐ์ ์ ์ฅ์ MySQL ์ฌ์ฉ(๋ณดํต์ Redis์)
- ๋ก๊ทธ์์ ๊ธฐ๋ฅ์ MySQL๋ง์ผ๋ก ๊ตฌํํ๊ธฐ ๋งค์ฐ ์ด๋ ค์ -> ๋ธ๋๋ฆฌ์คํธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด Redis๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์.
2. ํ๋ฆ ์ ๋ฆฌ(์์ฒญ ๋ฐ ์๋ต์ ๋ฐ๋์ ์ด๋ ๊ฒ ํ๋ค๋ผ๊ณ ๊ณ ์ ํ ๊ฒ์ ์ ๋ ์๋์ ๋ฏธ๋ฆฌ ์๋ ค๋๋ฆฝ๋๋ค.)
<ํ์๊ฐ์
>
- Request : POST { email, password, username, nickname }
- Response : { email, username, nickname, authorities(๊ถํ) }
- ์์
<๋ก๊ทธ์ธ>
1. ๋ก๊ทธ์ธ ์์ฒญ
2. DB ์ ๊ทผ & ์ ์ ํ์ธ(๊ฒ์ฆ)
3. ํ ํฐ ๋ฐ๊ธ
4. ์๋ต
- ๋ฐ์ดํฐ ์์ฒญ
- Access Token ์ ํจ์ฑ ๊ฒ์ฆ
- ์๋ต(์์ฒญํ ๋ฐ์ดํฐ์ ๋ํ ๋ด์ฉ)
[ ์ก์ธ์ค ํ ํฐ ๋ง๋ฃ์ ]
1. ๋ฐ์ดํฐ ์์ฒญ
2. ์์ธ์ค ํ ํฐ ๋ง๋ฃ ์ฌ๋ถ ํ์ธ
3. ์๋ต
4. ์์ธ์ค ํ ํฐ ๋ฐ๊ธ ์์ฒญ
5. ๋ฆฌํ๋ ์ ํ ํฐ์ ํตํด ์ ์ ํ์ธ, ์๋ก์ด ์ก์ธ์ค ํ ํฐ ๋ฐ๊ธ
6. ์๋ต
- Request : POST { email, password }
- Response : { grantType, accesstoken, refreshtoken, accessTokenExpiresIn }
- ์์
<๋ก๊ทธ์์>
- Request : GET (์ก์ธ์ค ํ ํฐ์ผ๋ก)
- Response : ๋ก๊ทธ์์ ์ฑ๊ณต / ์คํจ ์ ๋ค์ ์ฒจ๋ถ
- ์์
<ํ ํฐ ์ฌ๋ฐ๊ธ>
- Request : POST { accesstoken, refreshtoken }
- Response : { grantType, accesstoken, refreshtoken, accessTokenExpiresIn }
- ์์
<์ ๋ณด ์กฐํ>
- Request : GET (์์ธ์ค ํ ํฐ์ผ๋ก)
- Response : { email, username, nickname, authorites }
<์ ๋ณด ์์ >
- Request : PUT { nickname } + ์์ธ์ค ํ ํฐ
- Response : { email, username, nickname, authorities }
- ์์
<ํ์ ํํด>
- Request : DELETE (์์ธ์ค ํ ํฐ)
- Response : ํ์ ํํด ์ฑ๊ณต / ์คํจ ์ ๋ค์ ์ฒจ๋ถ
- ์์
๐งธ์๊ตฌ์ฌํญ ๋ถ์(๊ฐ๋ตํ๊ฒ)
1. ์ ์ ๊ด๋ จ
- ํ์๊ฐ์
- ๋ก๊ทธ์ธ
- ํ ํฐ ์ฌ๋ฐ๊ธ
- ๋ก๊ทธ์์
- ์ ๋ณด ์กฐํ(ํด๋น ์ ์ ๋ง)
- ์ ๋ณด ์์ (ํด๋น ์ ์ ๋ง)
- ํ์ ํํด
- ์ด๋ฉ์ผ์ ์ ๋ ์ค๋ณต๋์ง ์๋๋ก ํจ.(์ด๋ฉ์ผ๋ก ๊ด๋ฆฌ)
2. ๊ทธ ์ธ
- POSTMAN์ ํตํด ํ
์คํธ ๋ฐ ๊ฒ์ฆ
๐งธDB ํ
์ด๋ธ ์ค๊ณ
โ
์์ํ ๋ฒ์ (์ด ๋ฒ์ ์ญ์ ํ์ ๋ฒ์ ์ ์๋๋๋ค.)
โ๏ธ ๊ณ ๋ คํ ์ฌํญ๋ค
โ๏ธ USER_LOG(ํ์ผ๋ก ์ ์ฅํ ์์ )์ ๋ํด์ ํฐ ํ์์ฑ์ ๋๋ผ์ง ๋ชปํด ์ฐ์ ๊ฐ๋ฐ์์ ์ ์ธ์์ผฐ์.
โ๏ธ ๊ถํ์ ๋ํ ํ
์ด๋ธ ์ด๋ฆ ๋ณ๊ฒฝ : ROLE -> authority & user_authority๋ก ๊ตฌ๋ถ
(ROLE_ADMIN, ROLE_USER ๋ฑ์ผ๋ก ''์ ์ ํ ๊ฒฝ์ฐ ํผ๋์ ์ฐ๋ คํ์ฌ authority๋ก ํ
์ด๋ธ ์ด๋ฆ ๋ณ๊ฒฝ)
โ๏ธ auto_increment -> hibernate_sequence ํ
์ด๋ธ์ ์ฌ์ฉ[sequence(next_val)]
-> ์ฃผ๋ก ์ค๋ผํด์์ ์ฌ์ฉํ๊ธฐ๋ ํ์ง๋ง, auto_increment๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ํ
์ด๋ธ์ ์ ์ํ์ฌ ํ์ธํ๋ฉด ๋์ง๋ง ํน์๋ ๋ฒํธ๊ฐ ๊ผฌ์ฌ์์ ๊ฐ๋ฅ์ฑ์ ๋ฐฐ์ ํ ์ ์์๋ค.(์ค์ ๋ก auto๋ฅผ ๋ฏฟ์๋ค๊ฐ ์์ ํ ๊ผฌ์ธ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค..)
-> ๋ํ ๋ณ๋์ ํ
์ด๋ธ์ด ์์ด ์์๊ฐ ํท๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๊ณ ์ค๊ณ๋ฅผ ํ์คํ๊ฒ ๊ฒ์ฆํ๋ฉฐ ํ๋ ๊ฒ์ ์ ํธํ๋ ํธ์ด๋ผ next_val์ ์ฌ์ฉํ๋ ์ํ์ค ์ ๋ต์ ์จ์ ID ๊ฐ์ ๋ถ์ฌํจ.
โ
์์ ๋ฒ์ (ํ์ค์ ์ผ๋ก ๋ด๊ฐ ๊ณ ๋ คํ๋ฉฐ ๊ฐ๋ฐํ ์ ์๋ ์์ค์ผ๋ก ๊ฐ๋ฐํ๊ณ ์ ํ์ต๋๋ค.)