[Spring boot] Spring boot Security๋ฅผ ์ด์šฉํ•œ OAuth2 ์ธ์ฆ ๊ตฌํ˜„ 1 - Google ๊ณ„์ • ์ธ์ฆ

๋ฐ˜์‘ํ˜•

์ง€๋‚œ ํฌ์ŠคํŠธ์— ์ด์–ด์„œ, ์˜ค๋Š˜์€ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Spring boot Security ๋””ํŽœ๋˜์‹œ๋ฅผ ์ด์šฉํ•ด OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ฆ ํ† ํฐ๊ณผ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ถŒํ•œ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๊ถŒํ•œ์„ ํ™•์ธํ•˜๊ณ , ๋ถ€์—ฌ ๋ฐ›์€ ID์™€ Secret๋ฅผ ์ด์šฉํ•˜์—ฌ ํ† ํฐ์„ ๋ฐ›๋Š” ๋ฐฉ์‹์ด์—ˆ์ฃ .

 

์ด๋ฅผ ํ† ๋Œ€๋กœ Spring boot security๋ฅผ ์ด์šฉํ•˜์—ฌ ํšŒ์› ๊ฐ€์ž…๊ณผ ์ธ์ฆ์„ ๋™์‹œ์— ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ง€๊ธˆ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ํฌ์ŠคํŠธ๋Š” ๊ธฐ๋ณธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ํ•˜์—ฌ๊ธˆ, OAuth2 ๋กœ๊ทธ์ธ๋ถ€ํ„ฐ User Entity ์—ฐ๋™๊นŒ์ง€ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋ฉฐ ์ด๋ฒˆ์— ๋‹ค๋ฃฐ ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์ธ Spring boot security ์„ค์ • ๋ฐฉ๋ฒ•๊ณผ ๊ฐ„๋‹จํ•œ OAuth2 ์ธ์ฆ๋งŒ์„ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

๋จผ์ € ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Spring boot rest๊ฐ€ ์•„๋‹Œ Spring MVC๋กœ ์ง„ํ–‰ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ View๋ฅผ ์ง€์›ํ•ด์ค„ ํ…œํ”Œ๋ฆฟ์ธ thymeleaf์™€ OAuth2 client๋ฅผ Spring boot ๊ธฐ๋ณธ ๋””ํŽœ๋˜์‹œ์™€ ํ•จ๊ป˜ ์ถ”๊ฐ€ํ•ด์ฃผ๋„๋ก ํ•ฉ์‹œ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” H2 Database๋ฅผ ์ด์šฉํ•ด์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ์ด๋ฏธ์ง€์— H2 Database๋ฅผ ๊ฐ™์ด ๋ˆŒ๋Ÿฌ์ฃผ๋„๋ก ํ•ฉ์‹œ๋‹ค.

 

 

 

Spring boot Security 2.x and OAuth2 Client

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์ „์— ๋จผ์ € ์Šคํ”„๋ง ๋ถ€ํŠธ ์‹œํ๋ฆฌํ‹ฐ 2.0์— ๋Œ€ํ•ด์„œ ์ž ์‹œ ์„ค๋ช…์„ ๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ๋ž˜ ์‚ฌ์šฉํ–ˆ๋˜ ์Šคํ”„๋ง ๋ถ€ํŠธ ์‹œํ๋ฆฌํ‹ฐ 1.x ๋ฒ„์ „์—์„œ๋Š” OAuth2 ๊ตฌํ˜„์„ ์œ„ํ•ด์„œ Filter, Handling ๋“ฑ์„ ๋ชจ๋‘ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ์ด๋ฅผ NestedProperties ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ Spring boot security 2.0์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Google๊ณผ Facebook์˜ OAuth2 ์ธ์ฆ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด Google๊ณผ Facebook์— ๋Œ€ํ•ด์„œ๋Š” ์‰ฝ๊ฒŒ OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜์ฃ .

 

 

 

Spring boot Security Configuration

๋จผ์ € ํ•ด์•ผํ•  ๊ฒƒ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Spring boot security๊ฐ€ ์—†๋‹ค๋ฉด, ๊ฐ API ํฌ์ธํŠธ๋ณ„๋กœ Filter ํ˜น์€ Intercepter๋ฅผ ์ด์šฉํ•˜์—ฌ API ์š”์ฒญ ์ „ํ›„๋กœ AOP๋ฅผ ์ ์šฉํ•ด ์ธ์ฆ ๋‹จ๊ณ„๋ฅผ ๊ฒ€ํ† ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ Spring boot Security๋ฅผ ์ด์šฉํ•˜๋ฉด ์–ด๋…ธํ…Œ์ด์…˜ ํ•˜๋‚˜๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ ์—”๋“œํฌ์ธํŠธ์˜ ์ ‘๊ทผ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Configuration ์–ด๋…ธํ…Œ์ด์…˜์€ Spring boot์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์‹œ, ๋กœ๋“œ๋˜๋ฉฐ ์—ฌ๊ธฐ์— EnableWebSecurity๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ์— ์ ‘๊ทผ ์ œํ•œ์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ถ€ํ„ฐ ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ๋Š” ์•„๋ž˜์˜ WebSecurityConfigurerAdapter ํด๋ž˜์Šค์˜ configure ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— ์ •์˜๋œ ๋Œ€๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

permitAll ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ์•ž์— ๋งค์นญ๋œ ์—”๋“œํฌ์ธํŠธ๋“ค์€ ๋ณ„๋‹ค๋ฅธ ๊ถŒํ•œ ์—†์ด Anonymous๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์ฃ . ๊ธฐ๋ณธ์ ์œผ๋กœ MVC์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฏธ์ง€๋‚˜ ์Šคํƒ€์ผ์‹œํŠธ, ํŒŒ๋น„์ฝ˜, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋“ฑ์ด ์ด์— ํ•ด๋‹น๋˜๋ฉฐ, ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” Login ํŽ˜์ด์ง€๋„ ์—ฌ๊ธฐ์— ํฌํ•จ๋˜์–ด์•ผ๊ฒ ์ฃ ?

๋‚˜๋จธ์ง€ EndPoint์— ๋Œ€ํ•ด์„œ๋Š” ์ธ์ฆ๋˜์–ด์•ผ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก  authenticated ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๊ณ , Spring security์—์„œ ์ œ๊ณตํ•˜๋Š” oauth2Login ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ธ์ฆ์ด ์ง„ํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ, ์ž๋™์œผ๋กœ login ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋˜๋„๋ก authenticationEntryPoint ๋ฉ”์†Œ๋“œ์— URL์„ /login์œผ๋กœ ๋งž์ถฐ์ค๋‹ˆ๋‹ค.

 

์ด๊ฒƒ์œผ๋กœ Security ๊ด€๋ จ ์„ค์ •์€ ๋ชจ๋‘ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ์—‡ ์•„์ง, Client ID๋ž‘ Secret์„ ์ฃผ์ง€ ์•Š์•˜๋Š”๋ฐ์š”. ๊ทธ๋ฆฌ๊ณ  ๊ถŒํ•œ ์„œ๋ฒ„๋ž‘ ํ† ํฐ ์„œ๋ฒ„๋ž‘ ์—ฐ๊ฒฐ๋„ ์‹œ์ผœ์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ๋ถ€๋ถ„์€ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๊ตฐ์š”. 

 

๋ณธ๋ž˜๋Š” ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋งž์ง€๋งŒ Spring boot security์— ์œ„ ๋ถ€๋ถ„์ด ์ „๋ถ€ ๊ตฌํ˜„๋œ ์ƒํƒœ์ด๊ณ  ์šฐ๋ฆฌ๋Š” ์ด์ œ Client ID์™€ Client Secret๋งŒ์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

 

 

Generate Google Client

Google OAuth2 ์ธ์ฆ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ Client ID์™€ Secret์€ Google Cloud Platform Console ์‚ฌ์ดํŠธ์—์„œ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

https://console.cloud.google.com/

 

Google Cloud Platform

ํ•˜๋‚˜์˜ ๊ณ„์ •์œผ๋กœ ๋ชจ๋“  Google ์„œ๋น„์Šค๋ฅผ Google Cloud Platform์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•˜์„ธ์š”.

accounts.google.com

์œ„ ์‚ฌ์ดํŠธ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๊ฐ€ ์—†๋‹ค๋ฉด, ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ ๋‹นํ•œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ž…๋ ฅํ•œ ํ›„, ๋งŒ๋“ค๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

ํŽ˜์ด์ง€ ์ƒ๋‹จ์—์„œ OAuth client ID ๋งŒ๋“ค๊ธฐ๋ฅผ ๋ˆ„๋ฅธ ํ›„, Client ID ๋งŒ๋“ค๊ธฐ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํƒ€์ž…์„ Web Application์œผ๋กœ ์„ ํƒํ•˜๊ณ , ์•ฑ ์ด๋ฆ„์„ ์ •ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , Spring boot ๋‚ด์— ์žˆ๋Š” Embedded Tomcat์˜ ๊ธฐ๋ณธ ํฌํŠธ ์ฃผ์†Œ์™€ ํ•จ๊ป˜ URL์„ ์ž…๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ Redirect URI๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด ์ฃผ์†Œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Google ๋กœ๊ทธ์ธ์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋˜๋„๋ก ์„ค์ •๋œ URL์„ ์ž…๋ ฅํ•˜๋Š” ๋ž€์ž…๋‹ˆ๋‹ค. Spring boot security์—์„œ ์ œ๊ณตํ•˜๋Š” OAuth2 Login ์ฃผ์†Œ๋Š” oauth2/** ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ ์ด ๋’ค์— code์™€ google์„ ๋ถ™์—ฌ์ฃผ๋ฉด Google ๋กœ๊ทธ์ธ์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ๊นŒ์ง€ ๋๋‚ฌ๋‹ค๋ฉด Client ID์™€ Client Secret์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ID์™€ Secret์„ ์ฃผ์ž…ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Spring boot Security์—์„œ Google OAuth2๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์ด spring.security.oauth2.client.registration.google ํ•˜์œ„์—์„œ ID์™€ Secret์„ ์ •ํ•ด์ฃผ๋ฉด ๋์ž…๋‹ˆ๋‹ค.

 

 

 

 

Thymeleaf๋ฅผ ์ด์šฉํ•œ ํŽ˜์ด์ง€ ๊ตฌํ˜„

์ด์ œ ํŽ˜์ด์ง€๋ฅผ ๊ตฌํ˜„ํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฉ”์ธ ํŽ˜์ด์ง€(HOME)๊ณผ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€(LOGIN) ๊ทธ๋ฆฌ๊ณ , ๋กœ๊ทธ์ธ์ด ํ•˜๊ณ  ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” board ํŽ˜์ด์ง€ ํ•˜๋‚˜๋ฅผ ์ž„์˜๋กœ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

Spring boot์—์„œ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ View๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์ด JSP/JSTL, Thymeleaf, Velocity ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” Thymeleaf๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ฉฐ Spring boot starter์—์„œ ์ œ๊ณตํ•˜๋Š” ViewResolver์— ์˜๊ฑฐ Thymeleaf๋Š” resources/templates ๋ฐ‘์— HTML ํŽ˜์ด์ง€๋ฅผ ์ฝ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ image, css ๋“ฑ์€ static ํด๋”๋กœ ๊ฐ€๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Home, Login, Board ์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ, ์ฒ˜์Œ์—๋Š” Home์— ์žˆ๋‹ค๊ฐ€, ๊ฒŒ์‹œํŒ์„ ๋ˆŒ๋ €์„ ๋•Œ, ์ธ์ฆ ์ •๋ณด๊ฐ€ ์—†์œผ๋ฉด ๋กœ๊ทธ์ธ์„ ํ•ด์•ผํ•˜๊ณ , ๋กœ๊ทธ์ธ์ด ๋˜๋ฉด ๊ฒŒ์‹œํŒ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

Controller ๊ตฌํ˜„

Spring boot์—์„œ REST API๋ฅผ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ๋Š” RestController๋ฅผ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ View๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” Controller ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. 

ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ๋Š” html ํŒŒ์ผ ์ด๋ฆ„์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

 

Test

์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•œ ํ›„, ๋ฉ”์ธ ํŽ˜์ด์ง€์— ์ ‘์†ํ•ด๋ด…๋‹ˆ๋‹ค. 

 

์œ„ ์ƒํƒœ์—์„œ Board๋ฅผ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด, ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

Google ๋กœ๊ทธ์ธ์„ ์ฒ˜์Œ ์ง„ํ–‰ํ•˜๋ฉด, ๋‹ค์‹œ Home์œผ๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ๋˜๊ณ , ๊ธฐ์กด์— ์ง„ํ–‰ํ•œ ์ด๋ ฅ์ด ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ๊ฒŒ์‹œํŒ์ด ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

 

 

 

๋งˆ์น˜๋ฉฐ...

๊ธฐ์กด์˜ User Entity ์—†์ด Google ๊ณ„์ •๋งŒ์„ ๋‹ค๋ค„๋ดค์Šต๋‹ˆ๋‹ค. Spring Security์—์„œ ์ œ๊ณตํ•˜๋Š” Provider ๋•๋ถ„์— OAuth2 ์ธ์ฆ ๋‹จ๊ณ„์—์„œ ๊ถŒํ•œ ์„œ๋ฒ„์™€ ํ† ํฐ ์„œ๋ฒ„์— ID์™€ Secret์„ ์ˆ˜๋™์œผ๋กœ HTTP API๋ฅผ ์š”์ฒญํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์ ์€ ๊ต‰์žฅํžˆ ํŽธํ•œ ๋ถ€๋ถ„์ด๋„ค์š”.

 

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” User Entity์™€ ์—ฐ๋™ํ•˜์—ฌ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments