์์ ๋ก๊ทธ์ธ ๊ตฌํ์ ์ฒ์์ด๋ผ ์์ฒญ ๋ง๋งํ์ง๋ง... ์ด์ฐ์ ์ฐ ์ ๋๋ด๊ณ ์ฐ๋ ํ๊ธฐ
์์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ ๊ณผ์ ์ ์ ์ด๋ณด๊ธฐ๋ก ํ๋ค.
๋ค์ด๊ฐ๊ธฐ์ ์์, ๊ตฌ๊ธ์ ์นด์นด์ค์ ๋นํด ๋ฌธ์๊ฐ ๋งค์ฐ ๋ถ์น์ ํ๋ค. ํ๊ตญ์ด๋ก ์ ํ์๊ธด ํ์ง๋ง ์ ๋ง ํ๊ธ๋ก ์ฎ๊ฒจ๋ง ๋์ ์์ค์ธ๋ฐ๋ค๊ฐ, ๋ฌธ์๋ ์ฌ๋ฌ๊ฐ๋ผ ๊ฝค ๊ณ ์ํ๋ค๐ฅฒ ์์ด ์ค๋ ฅ์ด ๋๋ ๋ถ์ด๋ผ๋ฉด ์์ด ๋ฌธ์๋ฅผ ๋ณด๊ณ ์งํํ๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.
์์ ๋ก๊ทธ์ธ์ ๊ตฌํํ๊ธฐ ์ , ์์ ๋ก๊ทธ์ธ์ ํ๋ก์ฐ์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค. ๋ง์ฝ ์์ ๋ก๊ทธ์ธ์ด ์ด๋ป๊ฒ ์งํ๋๋์ง ๋ชจ๋ฅด๋ ์ํ๋ผ๋ฉด, ์ด์ ๊ธ์ ๋ณด๊ณ ์ค๋ ๊ฑธ ์ถ์ฒ!
1. ๋จผ์ ๊ตฌ๊ธ ํด๋ผ์ฐ๋ ํ๋ซํผ์ผ๋ก ์ด๋ํด์, ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํด์ค๋ค.
2. ํ๋ก์ ํธ ์ด๋ฆ์ ์ ์ด์ฃผ๊ณ ๋ง๋ค๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๋ค.
3. OAuth ๋์ ํ๋ฉด - User Type์ ์ธ๋ถ๋ก ์ค์ ํ๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๊ตฌ๊ธ ๊ณ์ ์ด ์๋ ์ฌ์ฉ์ ๋ชจ๋๊ฐ ์์ ๋ก๊ทธ์ธ์ ์งํํ ์ ์๋ค.
4. ์ฑ ์ ๋ณด์ ๊ฐ๋ฐ์ ์ฐ๋ฝ์ฒ ์ ๋ณด๋ฅผ ์ ์ด์ค๋ค.
- ์ฑ ์ด๋ฆ: ์๋น์ค๋ช ๊ธฐ์
- ์ฌ์ฉ์ ์ง์ ์ด๋ฉ์ผ: ๋ด๋น์ ์ด๋ฉ์ผ ๊ธฐ์
- ๊ฐ๋ฐ์ ์ฐ๋ฝ์ฒ ์ ๋ณด: ๋ด๋น ๊ฐ๋ฐ์์ ์ด๋ฉ์ผ์ ์ ์ด์ค๋ค. ๋๋ ๋ด ์ด๋ฉ์ผ์ ์ ์๋ค.
- ๋๋จธ์ง ์ ๋ณด๋ ๊ผญ ์ง๊ธ ๊ธฐ์ ํ์ง ์์๋ ๋๋ ๋์ด๊ฐ์.
5. ๋ฒ์ ์ถ๊ฐ ๋๋ ์ญ์ ๋ฒํผ์ ํด๋ฆญํ ๋ค, ํ์ํ scope์ ์ฒดํฌํ๋ค. ์ฐ๋ฆฌ ์๋น์ค๋ ํ์ ์๋ณ์, ํ์ ์ด๋ฆ, ํ์ ์ด๋ฉ์ผ์ ๋ฐ์์ค๊ธฐ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ธ ๊ฐ์ scope๋ง์ ์ ํํ๋ค. ๊ฐ scope์ ๋ํ ์ค๋ช ์ ์ฌ๊ธฐ์ ํ์ธํ ์ ์๋ค.
- userinfo.email: ์ฌ์ฉ์์ ์ด๋ฉ์ผ ์ฃผ์
- userinfo.profile: ์ฌ์ฉ์์ name, family name ๋ฑ ๊ธฐ๋ณธ ํ๋กํ ์ ๋ณด
- openid: ์ฌ์ฉ์ ์๋ณ ์ ๋ณด๋ฅผ ์๋ ค์ค๋ค. ์ผ๋ฐ์ ์ธ ์๋น์ค์์๋ ์ฌ์ฉ์๋ฅผ ์๋ณํ ๋ ์ด๋ฉ์ผ๋ณด๋ค ํจ์ฌ ๊ณ ์ ํ ๊ฐ์ ์ด์ฉํ๋๋ฐ, ๊ทธ ๊ณ ์ ๊ฐ์ ๋ฆฌํดํด์ค๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ์ฐธ๊ณ
6. ํ ์คํธ์ ์ฌ์ฉํ ๊ตฌ๊ธ ๊ณ์ ์ ์ถ๊ฐํ๋ค. ์คํฌ๋ฆฐ์ท์ siltarae๋ผ๋ ๊ณ์ ์ด ์ ํ์์ง๋ง ์ค์ ๋ก๋ ๋ด ๊ณ์ ์ ์ ์๋ค.
7. ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด - ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ๋ง๋ค๊ธฐ - OAuth ํด๋ผ์ด์ธํธ ID๋ฅผ ํด๋ฆญํ๋ค.
8. OAuth ํด๋ผ์ด์ธํธ ID ์์ฑ์ ํ์ํ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํ: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ
- ์ด๋ฆ: ์๋น์ค๋ช ์ ๋ ฅ
- ์น์ธ๋ ๋ฆฌ๋๋ ์
URI: ๊ตฌ๊ธ ์๋ฒ๊ฐ ์ธ์ฆ ์ฝ๋๋ฅผ ๋ณด๋ด์ค URI๋ฅผ ์
๋ ฅํ๋ค. ์ฌ์ฉ์๊ฐ ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด ๊ตฌ๊ธ ์๋ฒ์์ ํด๋น URL๋ก GET์์ฒญ์ ๋ณด๋ด๋ฉฐ ์ธ์ฆ ์ฝ๋๋ฅผ ์ ์กํด์ค๋ค. ์ธ์ฆ ์ฝ๋๋ URL ๋ค์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ๋ถ์ด์ ์จ๋ค. ๋ฐ๋ผ์ ๊ตฌ๊ธ ์๋ฒ๋ https://localhost:8080/auth/google/callback?code=4/0fv23r92v... ์ ํ์์ผ๋ก GET ์์ฒญ์ ๋ณด๋ด์ค๋ค.
ํ๋ก์ ํธ ๋ฐฐํฌ ์์๋ localhost:8080 ๋ถ๋ถ์ ์ค์ ๋๋ฉ์ธ์ผ๋ก ๋ฐ๊ฟ์ฃผ์ด์ผ ํจ์ ์ฃผ์ํ์. - ์บก์ณ์๋ ์ธ์ฆ ์ฝ๋๋ฅผ ๋ฐฑ์ผ๋ก ๋ณด๋ด๊ฒ ํ์ง๋ง, ๊ฐ๋ฐ ๊ณผ์ ์์ ํ๋ก ํธ ์ชฝ์ผ๋ก ์ฝ๋๋ฅผ ๋๊ฒจ์ฃผ๋๋ก ๋ณ๊ฒฝํ๋ค. ์ด์ ๋ ๋ค์ ๊ธ์์ ์ค๋ช ํ๊ฒ ๋ค.
- ์น์ธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์๋ณธ์ ์ ๋ ฅํ์ง ์์๋ ๋๋ฏ๋ก ํจ์คํ๋ค.
9. ์ด์ OAuth ๋์ ํ๋ฉด - ์ฑ ๊ฒ์๋ฅผ ๋๋ฌ, ์ฑ์ ํ ์คํธ ๋ชจ๋์์ ๊ฒ์ ์ํ๋ก ๋ณ๊ฒฝํด์ค๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ ์คํธ ์ฌ์ฉ์ ๋ง๊ณ ๋ค๋ฅธ ์ฌ์ฉ์๋ค๋ ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ์ด์ฉํ ์ ์๊ฒ ๋๋ค.
์ฌ๊ธฐ๊น์ง ๋ฌด์ฌํ ๋๋ง์ณค๋ค๋ฉด, ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ํญ์์ ํด๋ผ์ด์ธํธ๋ช ์ ํด๋ฆญํด๋ณด์. ํด๋ผ์ด์ธํธ ID, ํด๋ผ์ด์ธํธ ๋ณด์ ๋น๋ฐ๋ฒํธ(=ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ)๊ฐ ๋ฐ๊ธ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ ์๊น๊ฒ ๋ด์ผ ํ ๋ถ๋ถ์ ๋นจ๊ฐ ๋ฐ์ค๋ฅผ ์ณ๋ ์ธ ๊ตฐ๋ฐ์ด๋ค. ํนํ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ์ ์ ๋!!! ๋ ธ์ถ๋๋ฉด ์๋๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ค.
๋ค์ ์๊ฐ์๋ ๊ตฌ๊ธ ๋ก๊ทธ์ธ ์ฐฝ์ผ๋ก ๋์ด๊ฐ๋ ๋ฐฉ๋ฒ๊ณผ, ๋ก๊ทธ์ธ ์ฑ๊ณต ํ ์น์ธ ์ฝ๋๋ฅผ ์ก์ธ์ค ํ ํฐ์ผ๋ก ๋ฐ๊ฟ์ค๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํด๋ณผ ์์ โจ
'๐๐ฉ๐ซ๐ข๐ง๐ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring์์ ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ (2) - FeignClient(OpenFeign)์ ์ด์ฉํด ์ก์ธ์ค ํ ํฐ ๋ฐ์์ค๊ธฐ (0) | 2023.12.24 |
---|---|
Mockito๋ฅผ ์ด์ฉํ ๋จ์ ํ ์คํธ ์์ฑ (0) | 2023.12.10 |