๐ฑ ์ด๋ฒ์ฃผ ์คํฐ๋ ๋ชฉํ, ์คํฐ๋ ๋ฒ์
- ์คํ๋ง ์ํ๋ฆฌํฐ์ ์คํ๋ง ์ํ๋ฆฌํฐ Oauth2 ํด๋ผ์ด์ธํธ
- ๊ตฌ๊ธ ์๋น์ค ๋ฑ๋ก
- ๊ตฌ๊ธ ๋ก๊ทธ์ธ ์ฐ๋ํ๊ธฐ
- ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ํ๊ธฐ
- ์ธ์ ์ ์ฅ์๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉํ๊ธฐ
- ๋ค์ด๋ฒ ๋ก๊ทธ์ธ
- ๊ธฐ์กด ํ ์คํธ์ ์ํ๋ฆฌํฐ ์ ์ฉํ๊ธฐ
๐ฑ ์คํ๋ง ์ํ๋ฆฌํฐ์ ์คํ๋ง ์ํ๋ฆฌํฐ Oauth2 ํด๋ผ์ด์ธํธ
[Spring Boot] ์คํ๋ง ์ํ๋ฆฌํฐ์ ์คํ๋ง ์ํ๋ฆฌํฐ Oauth2 ํด๋ผ์ด์ธํธ
๐ฑ ๊ตฌ๊ธ ์๋น์ค ๋ฑ๋ก
[Spring Boot] ๊ตฌ๊ธ ์๋น์ค ๋ฑ๋ก
๐ฑ ๊ตฌ๊ธ ๋ก๊ทธ์ธ ์ฐ๋ํ๊ธฐ
[Spring Boot] ๊ตฌ๊ธ ๋ก๊ทธ์ธ ์ฐ๋ํ๊ธฐ
๐ฑ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ํ๊ธฐ
[Spring Boot] ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ํ๊ธฐ
๐ฑ ์ธ์ ์ ์ฅ์๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉํ๊ธฐ
[Spring Boot] ์ธ์ ์ ์ฅ์๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉํ๊ธฐ
๐ฑ ๋ค์ด๋ฒ ๋ก๊ทธ์ธ
[Spring Boot] ๋ค์ด๋ฒ ๋ก๊ทธ์ธ
๐ฑ ๊ธฐ์กด ํ ์คํธ์ ์ํ๋ฆฌํฐ ์ ์ฉํ๊ธฐ
[Spring Boot] ๊ธฐ์กด ํ ์คํธ์ ์ํ๋ฆฌํฐ ์ ์ฉํ๊ธฐ
๐ฑ ์คํฐ๋ํ๋ฉด์ ์ด๋ ค์ ๋ ๋ถ๋ถ (ํธ๋ฌ๋ธ ์ํ )
๐ userName ํ๊ธฐ ๊ด๋ จ ๋ฌธ์ ์ : ๊ตฌ๊ธ์ ์ค์ ํ ๋ด ์ด๋ฆ์ด ์๋, ์๋์ฐ ๋ ธํธ๋ถ์ ์ค์ ๋ ์ด๋ฆ์ด ์ถ๋ ฅ๋์์
์๋์ฐ์์ ์ฌ์ฉ ์ค์ธ ํ๊ฒฝ๋ณ์ %USERNAME%๊ณผ ์ฐ๊ด๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด์์ผ๋ฏ๋ก
๋ณ์๋ช ์ userName์์ myName์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉ
๐ ์ฝ์์ฐฝ ํ๊ธ ๊นจ์ง
1. [Setting] - [File Encodings] - [UTF-8]
2. [VM Options] - Dfile.encoding=UTF-8, -Dconsole.encoding=UTF-8 ์ถ๊ฐ
๐ฑ ์๋กญ๊ฒ ๋ฐฐ์ด ๊ฒ
- ์คํ๋ง ์ํ๋ฆฌํฐ์ ์๋ฏธ : ์คํ๋ง ๊ธฐ๋ฐ์ ๋ง๊ฐํ ์ธ์ฆ๊ณผ ์ธ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ์ง ํ๋ ์์ํฌ
- ์คํ๋ง ๋ถํธ 1.5์ 2.0์ ์ฐจ์ด : url ์ฃผ์ ๋ช ์ → client ์ธ์ฆ ์ ๋ณด๋ง ์ ๋ ฅ, 'CommonOAuth2Provider' enum์ด ์๋กญ๊ฒ ์ถ๊ฐ
- ๊ตฌ๊ธ ์๋น์ค, ๋ค์ด๋ฒ API์์ ์ธ์ฆ ์ ๋ณด (clientId, clientSecret) ๋ฐ๊ธ
- ์คํ๋ง ๋ถํธ 2์ ๊ฒฝ์ฐ ๋ฆฌ๋ค์ด๋ ํธ URL ์ง์ : {๋๋ฉ์ธ}/login/oauth2/code/{์์ ์๋น์ค์ฝ๋}
- ์คํ๋ง๋ถํธ์์๋ application-xxx.properties๋ฅผ ๋ง๋ค๋ฉด xxx๋ผ๋ ์ด๋ฆ์ profile์ด ์์ฑ๋๊ณ ์ด๋ฅผ ํตํด ๊ด๋ฆฌ
- ๊ตฌ๊ธ, ๋ค์ด๋ฒ ๋ก๊ทธ์ธ ์ฐ๋์ ํ์ํ ํด๋์ค :
- User.java : ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ด๋นํ ๋๋ฉ์ธ (Domain - Entity ์์ญ)
- Role.java : ๊ฐ ์ฌ์ฉ์์ ๊ถํ์ ๊ด๋ฆฌํ Enum ํด๋์ค (Domain)
- UserRepository.java : User์ CRUD๋ฅผ ์ฑ ์์ง ํด๋์ค (Domain - ๋ฐ์ดํฐ ์ ์ฅ์ ์ ๊ทผ ์์ญ)
- ์คํ๋ง ์ํ๋ฆฌํฐ ์ค์ ์ ๊ด๋ จ๋ ํด๋์ค :
- SecurityConfig.java : OAuth ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ ์์ ๋ก๊ทธ์ธ ์ค์ ์ฝ๋ (๋ก๊ทธ์ธ, ๋ก๊ทธ์์, ์ด๋ ๊ถํ ๊ด๋ฆฌ)
- CustomOAuth2UserService.java : ๊ตฌ๊ธ ๋ก๊ทธ์ธ ํ ๊ฐ์ ธ์จ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ , ์ ๋ณด์์ , ์ธ์ ์ ์ฅ ๋ฑ ๊ธฐ๋ฅ ์ง์
- OAuthAttributes.java : Dto๋ฅผ ์ํ ํด๋์ค (Dto - ๋ฐ์ดํฐ ๊ตํ, ๋ณ๊ฒฝ์ ์ํ ์์ญ, ์ฒ์ ๊ฐ์ ์ User ์ํฐํฐ ์์ฑ)
- SessionUser.java : ๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์ธ์ฆ๋ ์ฌ์ฉ์ ์ ๋ณด๋ง ์ธ์ ์ ์ ์ฅ (Dto - ์ธ์ ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํจ)
- index.mustache์ ๋ฒํผ์ ์ถ๊ฐํ์ฌ ๋ก๊ทธ์ธ์ ํ ์คํธํ๋ ๋ฐฉ๋ฒ : ๋ก๊ทธ์ธ ํ, myName์ด ์์ ์ ์ฌ์ฉ์ ์ด๋ฆ ๋ ธ์ถ
- index.mustache์์ myName์ ์ฌ์ฉํ ์ ์๋๋กํ๋ ๋ฐฉ๋ฒ : IndexController์์ myName์ model์ ์ ์ฅ
- ์ด๋ ธํ ์ด์ ์ ๊ธฐ๋ฐ์ผ๋ก IndexController์์ ์ธ์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ถ๋ถ์ ๋ฐ๋ณต ์ฝ๋๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ
- ์ด๋ ธํ ์ด์ ์ ๊ด๋ จ๋ ํด๋์ค :
- LoginUser.java : ๋ฉ์๋ ์ธ์๋ก ์ธ์ ๊ฐ์ ๋ฐ๋ก ๋ฐ์ ์ ์๋๋ก ๋ณ๊ฒฝํ๊ธฐ ์ํ @LoginUser ์ด๋ ธํ ์ด์ ์์ฑ
- LoginUserArgumentResolver.java : HandleMethodArgumentResolver ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค
- WebConfig.java : addArgumentResolvers()๋ฅผ ํตํด LoginUserArgumentResolver๊ฐ ์คํ๋ง์์ ์ธ์๋ ์ ์๋๋ก ์ถ๊ฐ
- IndexController.java : IndexController์ ์ฝ๋์์ ๋ฐ๋ณต๋๋ ๋ถ๋ถ๋ค์ ๋ชจ๋ @LoginUser๋ก ๊ฐ์
- ์ธ์ ์ ์ฅ์๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ์ฌ์ฉ ๋ฐฉ๋ฒ : ๊ฐ๋จํ ์ค์ , ๋น์ฉ ์ ๊ฐ์ ์ํด ์ฌ์ฉ, ์ธ์ ์ ์ฅ์๋ฅผ jdbc๋ก ์ค์
- ์ํ๋ฆฌํฐ ์ต์ ํ์ฑ์ผ๋ก ์ธ์ฆ๋ ์ฌ์ฉ์๋ง API๋ฅผ ํธ์ถํ ์ ์์ผ๋ฏ๋ก ๋ค๋ฅธ ํ ์คํธ ์ฝ๋๋ ์ด์ฒ๋ผ ์๋ํ๋๋ก ์์ ํ๋ ๋ฐฉ๋ฒ :
- test๋ application-oauth.properties ํ์ผ์ ๊ฐ์ ธ์ค์ง ๋ชปํ๋ฏ๋ก application.properties๋ฅผ ์์ฑํ๊ณ ๊ฐ์ง ์ค์ ๊ฐ ๋ฑ๋ก
- ์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์์ ์์ฒญ์ ์ด๋์ํค๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์์์ ์ธ์ฆ๋ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ์ฌ API๋ง ํ ์คํธํ๋๋ก PostsApiController.java์ @WithMockUser(roles="USER")๋ก ๊ถํ์ ์ฃผ์ด ์์์ ์ฌ์ฉ์ ์ธ์ฆ ์ถ๊ฐ
- @WebMvcTest๋ SecurityConfig๋ฅผ ์์ฑํ๊ธฐ ์ํด ํ์ํ CustomOAuth2UserService.java๋ ์ค์บ๋์์ด ์๋๋ฏ๋ก ์ฝ์ ์ ์์ผ๋ SecurityConfig๋ ์ค์บ ๋์์ด๋ฏ๋ก SecuritoyConfig๋ฅผ ์ค์บ ๋์์์ ์ ๊ฑฐํ ํ JpaConfig.java๋ฅผ ์์ฑํ์ฌ @EnableJpaAuditing ๋ถ๋ฆฌ
๐ฑ PR
๐ฑ ์ฐธ์กฐํ๋ ๋งํฌ, ๋ฌธ์ ๋ฐ ์์คํ์ผ GIT ์ฃผ์
- '์คํ๋ง ๋ถํธ์ AWS๋ก ํผ์ ๊ตฌํํ๋ ์น ์๋น์ค' ๊ต์ฌ ํ์ฉ
'Community > GDSC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[211108/211115] Dev Talk w. Core Team (0) | 2021.11.08 |
---|---|
[211101-211107] 2021 GDSC Spring Study - 5์ฃผ์ฐจ (0) | 2021.11.06 |
[211011-211017] 2021 GDSC Spring Study - 3์ฃผ์ฐจ (0) | 2021.10.15 |
[211004-211010] 2021 GDSC Spring Study - 2์ฃผ์ฐจ (0) | 2021.10.06 |
[210927-211003] 2021 GDSC Spring Study - 1์ฃผ์ฐจ (0) | 2021.10.02 |