์ ๊ท ์์คํ ๊ตฌ์ถํ๊ธฐ (feat. MSA, ๋ฐฑ์คํผ์ค)
2023๋ , ํ ๋ด๋ถ์์๋ `ํฉํ ๋ฆฌ` ๋ผ๊ณ ๋ถ๋ฅด๋ ์ ๊ท ์์คํ ์ ๊ตฌ์ถํ์ต๋๋ค.
๊ฐ๋ฐ์๋ก์ ๊ฒฝ๋ ฅ์ด ๋ง์ง๋ ์์ง๋ง, ๊ฐ์ฅ ๊ฒฝํ์ด ์ข์๋ ํ๋ก์ ํธ์๊ณ , ์ฒ์์ผ๋ก ํ๋ก์ ํธ ๋ค์ด(?) ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ ์๋ฐ๊ธฐ ์ง๋ ํ ๊ฐ๋ฐ ๋ฒ์์์ ๊ฒช์๊ธฐ์, ํ๋ก์ ํธ ์ด๊ธฐ์๋ ๋งค์ฐ ์๊ทน์ ์ผ๋ก ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํ์ง๋ง ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ์ด๋ ์ ๋ ๋ฒ์์์ ํ๋ณตํ๊ณ , ์ ์ฐจ ์ ๊ทน์ ์ผ๋ก ์ฐธ์ฌํ๋ฉฐ ์ผ์ ์ ๋น ๋ฏํ์ง๋ง ๊ต์ฅํ ์ฌ๋ฐ๊ณ ์ฆ๊ฒ๊ฒ ํ์๋๋ฐ์, ๊ด๋ จํ์ฌ ๊ฐ๋จํ ์ ๋ฆฌํด ๋ณด๊ณ ์ ํฉ๋๋ค.
์ ๊ท ์์คํ ๋ฐฐ๊ฒฝ
๊ธ์ก๊ถ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ธฐํํฐ์ฝ์, ์ ํด์ง ๊ธ์ก ๋ด์์ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ํ์ ๋๋ค.
์ ์คํ๋ฒ ์ค๋ฅผ ์๋ก ๋ค์๋ฉด 20,000์ ํ๋ ๋ด์์ ์์ ๋กญ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์คํ๋ฒ ์ค ๊ธ์ก๊ถ ์ํ์ ๋๋ค.
ํ์ง๋ง ํ์ฌ ๊ธ์ก๊ถ ๊ด๋ จํด์๋ ์ธ๋ถ ์์คํ ์ ์์กด๋์ด ์๊ธฐ์ ์ฌ๋ฌ ์ ์ฝ์ด ์กด์ฌํฉ๋๋ค.
๋ฐ๋ผ์ ์ธ๋ถ์์ ์์กด์ฑ์ ์ ๊ฑฐํ๊ณ , ํ ๋ด๋ถ ์์คํ ์ ํตํฉ์ ์ํ ๊ธฐ๋ฐ ํ๋ณด, ์ฟ ํฐ ๋ฐ๊ธ ๊ฐ์ , ์ฌ์ ํ์ฅ์ ๊ณ ๋ คํ ์ค๊ณ ๋ฑ์ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง๊ณ ์ ๊ท ์์คํ ์ ๊ตฌ์ถํ๊ฒ ๋์์ต๋๋ค.
๊ธฐ์กด ์์คํ ์ํฉ
๊ธฐ์กด์ ํ์์ ์ด์์ค์ธ ์์คํ ์, ์ค๋์ ๊ตฌ์ถ๋๊ณ ๋ ํ ๊ฐํธ์ด ์ด๋ฃจ์ด์ง์ง ์์ ์ํ์๊ธฐ์ ๊ต์ฅํ ๊ฑฐ๋ํ ํ๋ก์ ํธ๊ฐ ๋ ์ํ์ ๋๋ค.
- UI์ ๊ฒฝ์ฐ XPlatform ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ , ๊ด๋ จ ์๋ฃ๊ฐ ๋ง์ด ์กด์ฌํ์ง ์์ต๋๋ค.
- 1๋ฒ๊ณผ ์ ์ฌํ๊ฒ, ํ๋ ์์ํฌ ๊ฐ๋ฐ์ ๋ํ ๋ฌธ์ ๋ฑ์ด ๋ด๋ถ์ ์ผ๋ก ๋ฐ๋ก ์กด์ฌํ์ง ์์ ๊ฐ๋ฐ ์ธ์์ ๋ฐ๋ผ ์คํ์ผ์ด ์ ๊ฐ๊ฐ์ ๋๋ค.
- UI ๊ฐ๋ฐ์ ์ํ IDE ์์๋ ์๋ ์์ฑ, compile ์๋ฌ ์ฒดํฌ ๋ถ๊ฐ๋ฅ ๋ฑ์ผ๋ก ์ธํด ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋ฎ์ถฅ๋๋ค.
- UI ๊ฐ๋ฐ์ ์๋์ฐ ํ๊ฒฝ์์๋ง ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ VDI ๋ฅผ ์ ์ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์กด์ฌํฉ๋๋ค.
- ๋ด๋ถ ๋ก์ง์ ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ์ข if ๋ฌธ์ด ๊ต์ฅํ ๋ง์ด ์กด์ฌํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ํ์ ํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
- ์์ฒ~์๋ง ๋ผ์ธ์ java ํ์ผ์ด ๊ฝค๋ ๋ง์ด ์กด์ฌํฉ๋๋ค.
์ ๊ท ์์คํ ๊ตฌ์ถ
์์ ๊ฐ์ ๋ฌธ์ ๋ค์ด ์กด์ฌํ๊ธฐ์ ์ ๊ท ์์คํ ์ ์์ ๋ฐ๋ฐ๋ฅ๋ถํฐ ์งํํ์ต๋๋ค.
๋ฌผ๋ก ์ด๊ธฐ ์ค๊ณ, ์๋ฒ ๊ตฌ์ถ ๋ฑ์ ์ง์ ์งํํ์ง๋ ์์์ง๋ง ์์์ ์ด๊ฒ์ ๊ฒ ๋ณด๋ฉด์ ๋ง์ด ๋ฐฐ์ธ ์ ์์์ต๋๋ค.
์ ๊ท ์์คํ
์ ์ํ, ๋ฐ๊ธ, ์ฟ ํฐ, ์น์ธ ๋ฑ ๊ฐ๊ฐ์ ์๋น์ค๋ฅผ ๋ถ๋ฆฌํ์ฌ ๋ง์ดํฌ๋ก ์๋น์ค๋ก ๊ตฌ์ถํ๊ฒ ๋์๋๋ฐ, ๊ฐ๋ฐ์ ์งํํ๋ฉด์ ๊ต์ฅํ ๋ง์ ์ด๋ ค์์ ๊ฒช์์ง๋ง, ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ๋ง์ ๊ฒ์ ๊ฒฝํํ ์ ์์์ต๋๋ค. (๋ค์ ๋ชปํด)
- ๊ฐ ์๋น์ค์ ํธ์ถ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ ์ง,
- ๋ฐ๊ธ ์ฒ๋ฆฌ ํ API ์๋ฒ์์ ์คํจ๊ฐ ๋ฐ์ํ๋ฉด ์ฌ์ฒ๋ฆฌ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ ์ง,
- ๋ถ์ฐ ์๋น์ค์์ ๋ฐ์ดํฐ ์ถ์ ์ ์ด๋ป๊ฒ ํด์ผ ํ ์ง,
- Spring Cloud ์ํ๊ณ์ ์ด๊ธฐ ํ์ต ๋น์ฉ,
- ๋๋ฒ๊น ์ ์ด๋ ค์ ๋ฑ๋ฑ...
์๋ต ๊ด๋ จ๋ ์ปค์คํ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๋ฉฐ, ์ฌ์ฒ๋ฆฌ์ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์ ์์ฒญ ID, ๊ธ๋ก๋ฒ ํธ๋์ญ์ ID ๋ฑ ์ ๋ํฌํ ๊ฐ์ ํตํด ๋ฉฑ๋ฑ์ฑ์ ๋ณด์ฅํ๋๋ก ๊ตฌํํ์์ต๋๋ค.
๋ํ Spring Cloud ์ํ๊ณ์ Eureka, Admin, Config, API Gateway ๋ฑ๋ฑ ๊ฐ ์๋น์ค๋ฅผ ์ฒ์ ์ ํ๋ค ๋ณด๋ ์ด๋ ํ ์์ผ๋ก ์ฒ๋ฆฌ๋๋์ง๋ ํ์ ํ๊ธฐ๊ฐ ํ๋ค์๋๋ฐ์, ์ด๋ฌํ ์ดํด๋๋ฅผ ์กฐ๊ธ ๋ ๋์ด๊ธฐ ์ํด ๊ฐ๋จํ๊ฒ ๊ฐ์ธ์ ์ผ๋ก ๋ง๋ค์ด๋ณด๊ณ ์์ต๋๋ค.
๋ฐฑ์คํผ์ค ์์คํ ๊ตฌ์ถ
๋ฐฑ์คํผ์ค(์ด๋๋ฏผ) ์์คํ ์ ์ฒ์์ผ๋ก ๊ตฌ์ถํด ๋ดค๋๋ฐ, ๊ฐ์ธ์ ์ผ๋ก ํ์์ ์ธ์ฆ/์ธ๊ฐ ๋ถ๋ถ์ ๊ตฌํํ ๋ ๊ฐ์ฅ ์ฌ๋ฐ์์ต๋๋ค.
์ธ์ฆ/์ธ๊ฐ ๋ถ๋ถ์ Spring Security ํ๋ ์์ํฌ๋ฅผ ์ฃผ๋ ฅ์ผ๋ก ์ฌ์ฉํ๋๋ฐ์, ์คํ๋ง ์ํ๋ฆฌํฐ๋ฅผ ์ฒ์ ์ ํด๋ณธ ๊ฑด ๋๋ต 3๋ ์ ์ด์์ต๋๋ค.
๋น์์๋ ์คํ๋ง ์ํ๋ฆฌํฐ์ ๊ต์ฅํ ๋ณต์กํ๊ณ ์ถ์์ ์ธ ๋ด๋ถ ๊ตฌ์กฐ์ ์ํด ๋์ ๋ฒฝ์ ์ฒด๊ฐ์ ํ์๋๋ฐ์..
์ด๋ฒ์ ๋ค์ ๊ตฌํํ๋ฉด์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์กฐ๊ธ ๋ ๊น๊ฒ ๊ณต๋ถํ๋ค ๋ณด๋, ํ์คํ ์ ๋ณด๋ค๋ ์ดํด๋๊ฐ ๊ฝค๋ ๋์์ง ๊ฒ ๊ฐ์์ ์ ๊ธฐํ์์ต๋๋ค.
๋ฐฑ์คํผ์ค ํ์ ์ธ์ฆ/์ธ๊ฐ ์ฒ๋ฆฌ
๋ฐฑ์คํผ์ค ์์คํ ์์ ํ์ ๊ด๋ จํ์ฌ ์ธ์ฆ ๋ฐ ์ธ๊ฐ ๋ถ๋ถ์ ๊ตฌํํ์๋๋ฐ์, ์ด์ ๊ด๋ จํด์ ๊ฝค๋ ๋ง์(?) ์ด์๋ค์ ์ ํ์ต๋๋ค.
ํ์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์ฒ์์ด์ด์ ์ด๊ธฐ์๋ ๋ณด์ ์ธก๋ฉด์์๋ ๋์น๋ ๋ถ๋ถ์ด ๊ฝค ๋ง์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ค๋ณต ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ๊ด๋ จํด์, ๋ก๊ทธ์ธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์ฆ ์ ์ปค์คํ ํ ํ ํฐ์ ๋ง๋ค์ด์ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค.
์ ์ ID ๋ฐ ํ ํฐ์ ๊ฐ๊ฐ key/value๋ก ๊ด๋ฆฌํ์ฌ ์ค๋ณต ๋ก๊ทธ์ธ ์ฒ๋ฆฌ๋ฅผ ์งํํ๊ณ , ๋จผ์ ๋ก๊ทธ์ธ์ด ๋์ด ์๋ ์ํฉ์์ ๋ค๋ฆ๊ฒ ๋ก๊ทธ์ธ์ ํ ์ ์ ๋ ๊ธฐ์กด ๋ก๊ทธ์ธ๋์ด ์๋ ์ ์ ์ ๊ณ์ ์ ๊ฐ์ ๋ก ์ข ๋ฃํ ์ ์๊ฒ๋ ์ฒ๋ฆฌํ์ฌ (๋ฌผ๋ก ํ ํฐ ๋ง๋ฃ์๊ฐ์ ์กด์ฌํฉ๋๋ค๋ง..) ๋ฌดํ์ ๋ก๊ทธ์ธ์ด ์๋๋ ํ์์ ์๋ฐฉํ๊ณ ์ ํ์ต๋๋ค.
๋ํ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ก๊ทธ์ธ ํ์์ ์ ํ(๋ณด์ ์ง๋จ)์ ๋์ด์ผ ํ๊ธฐ์ ๋ก๊ทธ์ธ ์คํจ ํ์๋ฅผ ์ปฌ๋ผ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ต๋ ํ์๋ฅผ ์ด๊ณผํ๋ฉด ๊ณ์ ์ด ์ ๊ธฐ๊ฒ ๋๋ ํ๋ก์ธ์ค์ ๋๋ค.
์ด๋ ๊ด๋ฆฌ์๊ฐ ์ง์ ๊ณ์ ์ ํ์ฑํ๋ฅผ ํด์ฃผ๊ฑฐ๋, ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๊ฒ ๋๋ฉด SuccessHandler ์์ ํ์๋ฅผ ์ด๊ธฐํ๋ฅผ ์งํํ๊ณ ์,
์ธ์ฆ(ํ ํฐ)์ ๋ง๋ฃ ์๊ฐ์ ์ต์ด ์์ฑ ์์ ์ผ๋ก๋ถํฐ 30๋ถ์ผ๋ก ์ค์ ํ์ผ๋, ์ด๋ฌํ ๊ฒฝ์ฐ 30๋ถ์ด ์ง๋๋ฉด ํ ํฐ์ด ์ญ์ ๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ก ๋ก๊ทธ์์์ด ๋๊ณ , 30๋ถ๋ง๋ค ๊ณ์ ๋ก๊ทธ์ธํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ๋ฐ์ํ์ฌ ์ฌ์ฉ์๊ฐ ์์ฒญํ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ง๋ฃ ์๊ฐ์ 30๋ถ์ผ๋ก ๊ฐฑ์ ํ๋๋ก ํฉ๋๋ค. (HttpSession ์ด ์ฌ์ฉํ๋ ๋ฐฉ์)
๋๋ต์ ์ผ๋ก ์ธ์ฆ ์ฒ๋ฆฌ๋ ์๋์ ํ๋ฆ์ผ๋ก ์งํ์ด ๋ฉ๋๋ค.
Spring Security๋ฅผ ์ ์ฉํ์ฌ ์ธ์ฆ/์ธ๊ฐ๋ฅผ ๊ตฌํํ์ฌ AuthenticationProvider ๊ตฌํ์ฒด๋ฅผ ์ง์ Custom ํ์ฌ ์์ฑํ ๋, authenticate() ๋ฉ์๋๊ฐ ๋ ๋ฒ ํธ์ถ์ด ๋๋ ์ด์๊ฐ ์กด์ฌํ๋๋ฐ์, ์ด๋ก ์ธํด ๋ก๊ทธ์ธ์ ์คํจํ๋ฉด ์์์ ์ธ๊ธํ๋ ๋ก๊ทธ์ธ ์คํจ ํ์๊ฐ ์ค๋ณต์ผ๋ก ์ฆ๊ฐํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
๋๋ต์ ์ผ๋ก ์์ authenticate() ๋ฉ์๋๊ฐ ๋ ๋ฒ ํธ์ถ์ด ๋์ด ์นด์ดํธ๊ฐ ์ค๋ณต์ผ๋ก ์ฆ๊ฐํฉ๋๋ค.
์๋ ์ค์ ์ธ์ฆ ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ ProviderManager ํด๋์ค์ authenticate() ๋ฉ์๋์ ๋๋ค.
์์ parentResult ๋ณ์๋ก ์ธํด ์ต์ด ์ธ์ฆ์ ์คํจํ๋๋ผ๋ ๋ค์ parent์ authenticate() ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋์ด ์ค๋ณต ์ฒ๋ฆฌ๊ฐ ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
(์๋ง ์ฌ์ฒ๋ฆฌ๋ฅผ ์งํํ ์ ์๊ฒ๋ ๋ง๋ ๊ฒ ์๋๊ฐ ์ถ์๋ฐ ์์ธํ๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.)
spring-security github์์ ์๋ ์ค์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๊ณ ํ๋ ๊ฒ ๊ฐ์๋ฐ์, ์ ๋ ์ฒ๋ฆฌ๊ฐ ๋์ง๋ ์๋๊ตฐ์..
๋ฐ๋ผ์ ์ต์ด ์ธ์ฆ ์ฒ๋ฆฌ๊ฐ ์งํ๋๋ฉด, authenticate() ๋ฉ์๋์ ์กด์ฌํ๋ ํ๋ผ๋ฏธํฐ์ธ Authentication ๊ฐ์ฒด์ ์ ๋ณด๊ฐ ๋จ๊ณ , ์ด๋ฅผ ํตํด ์ธ์ฆ์ด ์คํจํ๋์ง ์๋์ง์ ๋ํ ๊ฒ์ฆ์ด ๊ฐ๋ฅํ๊ธฐ์ ์๋์ ๊ฐ์ด ๊ตฌํ์ ํ์ต๋๋ค.
๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ์ฑ ์ ์๋๊ธฐ์ ์กฐ๊ธ ์ฐ์ฐํ๊ธด ํ๋ฐ์, ์ ์ด์๋ฅผ ์กฐ๊ธ ๋ ํ์ ํด ๋ณด๊ณ ๊ฒฐ๋ก ์ด ๋๋ฉด ๋ค์ ๊ณต์ ๋ฅผ ๋๋ฆฌ๊ฒ ์ต๋๋ค. ๐
์ถ๊ฐ์ ์ผ๋ก, Spring Security ์์๋ "ROLE_" ๋ฅผ prefix๋ก ๊ถํ์ ๊ด๋ฆฌ ํฉ๋๋ค.
๊ทธ๋ ๊ธฐ์ ๋ด๋ถ์ ์ผ๋ก ๊ถํ ๊ด๋ฆฌ๋ฅผ ์ํด์๋ "ROLE_" ์ prefix๋ก ์ ์ธํ๊ณ , ๋ค์ด๋ฐ์ ์ง์ ํด์ผ ํ๋๋ฐ์, ๊ถํ ๊ด๋ฆฌ ํ ์ด๋ธ์ ๊ถํ๋ช ์ด length ๊ฐ ์ ํ์ ์ด๊ธฐ ๋๋ฌธ์ "ROLE_" prefix๋ฅผ ์ ์ธํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธธ์ด ์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ prefix๋ฅผ ์ ๊ฑฐํ์ต๋๋ค.
์์ ๋ฐฉ์๋๋ก ์ค์ ํ ๊ถํ์ @RolesAllowed ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ API ๋ง๋ค ๊ถํ ์ฒดํฌ๋ฅผ ์งํํ ์ ์์ต๋๋ค.
(Spring Security์ "ROLE_" prefix ๋ฅผ ์ ๊ฑฐํ์๊ธฐ ๋๋ฌธ์, ๊ถํ ์ค์ ์ ์์ฒด์ ์ผ๋ก ๊ด๋ฆฌํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.)
์คํ๋ง ์ํ๋ฆฌํฐ์์ ์ธ์ฆ๋ ์ ์ ๋ฅผ ์ฌ์ฉํ ๋, @AuthenticationPrincipal ์ด๋ ธํ ์ด์ ์ ํตํด SecurityContextHolder์ ์ ์ฅ๋์ด ์๋ ์ธ์ฆ๋ ์ ์ ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
์ค์ SecurityContextHolder์ ์ธ์ฆ๋ ์ ์ ๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ UsernamePasswordAuthenticationToken ํด๋์ค๋ก, ํด๋น ํด๋์ค์์๋ principal, credentials, authorities๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค.
(principal = username, credentials = password ์ ๋๋ก ์๊ฐํ์๋ฉด ๋ ๋ฏ ํฉ๋๋ค.)
ํ์ง๋ง, @AuthenticationPrincipal ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ธ์ฆ๋ ์ ์ ๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ principal๋ง ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ๊ถํ(authorities) ์ฒด๊ณ๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
@AuthenticationPrincipal ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ ๋, ๊ฐ์ ๊ฐ์ ธ์ค๋ ํด๋์ค๋ AuthenticationPrincipalArgumentResolver ์ ๋๋ค.
@AuthenticationPrincipal ์ด๋ ธํ ์ด์ ์ AuthenticationPrincipalArgumentResolver ํด๋์ค์ resolveArgument() ๋ฉ์๋์์ SecurityContextHolder ์ ์ ์ฅ๋์ด ์๋ ์ธ์ฆ๋ ์ ์ ๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ด ๋ถ๋ถ๋ ์ปค์คํ ์ ํด ์ฃผ๊ฑฐ๋, principal ๋ด๋ถ์๋ authorities ํ๋๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ์ค์ ํด ์ฃผ์ด์ผ ํฉ๋๋ค.
์ฐธ๊ณ ๋งํฌ
- https://stackoverflow.com/questions/75395651/spring-security-has-authorities-on-authentication-and-on-the-principal-why-and
- https://stackoverflow.com/questions/63772495/duplicate-authorities-in-spring-security-authentication
ํ๋ก ํธ ์๋
ํ๋ฉด์ด ๋ง์ง๋ ์์ง๋ง, ๊ทธ์ค ๊ฐ๋ฐํ๋ ํ๋ฉด์ ๋ ์ ์ง๋ง... ์ฌ์ค ๊ฐ์ฅ ์ ๋จน์๋(?) ์์ ์ด ํ๋ก ํธ ๊ฐ๋ฐ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํนํ๋ ํ๋ก ํธ ๊ฐ๋ฐ์ ํด ๋ณธ ๊ฒฝํ์ด ๊ณผ๊ฑฐ์ ๊ฑฐ์ ์์๊ธฐ ๋๋ฌธ์ ๋์ฑ ์ด๋ ค์ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ธฐ์กด ๋๋ฃ๋ถ์ด ์ธํ ํด ์ฃผ์ ํ ํ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก ์กฐ๊ธ์ฉ ์์ ํ๋ฉฐ ๊ฐ๋ฐ์ ์งํํ๋๋ฐ ๋ช๋ช ์ด์๋ค์ ๋น์ฐํ ์์๋๋ฐ์,
- Router ์ค์
- ๋ถ๋ชจ, ์์ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ ์ค์ ๋ฐ ์ ๋ฌ
- Error๋ ์๋์ง๋ง ๊ฐ๋ฐ์ ๋๊ตฌ์ Warning์ผ๋ก ๋์จ ๋ฌธ์ ๋ค
- ์ด๋ฒคํธ ์ฒ๋ฆฌ ํ ํ์ (Dialog) ์ฒ๋ฆฌ ๋ฐ ์ผ๊ด์ฑ
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ก ์ธํด ์์ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅธ ์ฝ๋๋ค + (Promise/async&await)
- Vue ๋ผ์ดํ์ฌ์ดํด ๋ฐ ๋ถ๋ชจ, ์์ ๊ฐ์ ์ด๊ธฐํ ์์ ๋ฑ๋ฑ
์ง์ ํ๋ก ํธ์ ๋ฐฑ์๋๋ฅผ ๊ฐ์ด ๊ฐ๋ฐํ๋ค ๋ณด๋ ํ์คํ ์ด๋ ํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋๋์ง, ์๋ฒ์์ ์ด๋ ํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ค์ผ ํ๋ก ํธ์์ ์ ์ฒ๋ฆฌํ ์ ์์์ง ๋ฑ์ ๊ณ ๋ฏผํ ์ ์๋ ์ข์ ๊ฒฝํ์ด์์ต๋๋ค.
๋ณด์ ์ฒ๋ฆฌ
์๋น์ค์ ๊ฐ์ธ์ ๋ณด(ํ์)๊ฐ ์ถ๊ฐ๋๋ฉด์ ๋ณด์์ ์ธ ์ธก๋ฉด์ ๊ณ ๋ คํด์ผ ํ์ต๋๋ค.
ํ์ง๋ง ๊ธฐ์กด์ ๊ฐ๋ฐ์ ์งํํ๋ฉด์ ์ด๋ฌํ ๋ถ๋ถ์ ์ฑ๊ธด ์ ์ ํฌ๊ฒ ์์๊ธฐ์, ์ด๋ ๊ณ ์ค๋ํ ๋ณด์ ์ง๋จ ํ ์คํธ์์ ๋ค ๊ฒ์ด์ด ๋์์ต๋๋ค..
์กฐ๊ธ๋ง ์๊ฐํด ๋ณด๋ฉด ๋น์ฐํ ๊ฒ๋ค์ธ๋ฐ, ์ด๋ฌํ ์ผ์ด์ค๋ฅผ ์ฑ๊ธฐ์ง ๋ชปํ ๋ถ๋ถ์ด ๋ถ๋๋ฌ์ ์ง๋ง ์ด๋ฒ ๊ธฐํ์ ํ์คํ ์๊ฒ ๋์ด์ ์คํ๋ ค ๋คํ์ด๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. (๋ค์์ ๋์ผํ ์ค์๋ฅผ ๋ฐ๋ณตํ์ง ์์ผ๋ฉด ๋๋๊น์ ๐
๐
)
- ๋ก๊ทธ์ธ ์คํจ ์ผ์ด์ค์์ ์คํจ ์ ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ธฐ์ ๊ณ์ ์ด ์กด์ฌํ๋์ง ์ฌ๋ถ์ ๋ํ ์ ์ถ ๊ฐ๋ฅ
- ๊ฐ์ธ ์ ๋ณด์ ๋ง์คํน ์ฒ๋ฆฌ
- ๋ก๊ทธ์ธ ์๋ ํ์๊ฐ nํ ์ด์์ผ ๊ฒฝ์ฐ ๊ณ์ ์ ๊ธ ์ฒ๋ฆฌ (๋ฌด์ ํ ์๋ ์๋ฐฉํ๊ธฐ)
- ์๋ฒ์์ ๊ถํ ์ฒ๋ฆฌ๊ฐ ๋์ด์์ง ์๋ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ์์ ๊ถํ์ ์กฐ์ํ์ฌ ๊ณ์ ๊ถํ ์์น ๊ฐ๋ฅ์ฑ
- Vue 2 ์์ ์ ๊ณตํด์ฃผ๋ ๋ณด์ ์ฒ๋ฆฌ๋ ๋งํฌ์ ์์ต๋๋ค.
์์ ์ผ์ด์ค๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ํ ์ ์๋ ์ผ์ด์ค๋ ์์ง๋ง, ๊ธฐํ์์ ํจ๊ป ์ ํด์ผ ํ๋ ๋ถ๋ถ์ด ์๊ธฐ ๋๋ฌธ์ ์ปค๋ฎค๋์ผ์ด์ ์ด ๋๋์ฑ ์ค์ํ ๊ฒ ๊ฐ์ต๋๋ค.
QA ์ฒ๋ฆฌ
QA ์ฒ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๋ฐ์ด ์๋ฃ๋ ํ ๊ฐ๋ฐ ์๋ฒ์์ QA ๋ด๋น์๊ฐ ์์ฑ๋ ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ๋ฅผ ์งํํฉ๋๋ค.
QA๋ ๋ด๋น์๊ฐ ์งํํ์ง๋ง ํต์ฌ์ "๊ฐ๋ฐ์๊ฐ ์ปจํธ๋กค์ด ๊ฐ๋ฅํด์ผ ํ๋ค." ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
ํ์ฌ QA๋ ์ธ์ฃผ ๋ถ๋ค์ด ์งํํ์๊ธฐ ๋๋ฌธ์ ์ ๋ง ์ฌ์ํ ๊ฒ๋ ๋์น์ง ์๊ณ ๋ค ํ์ธ์ ํ์๋๋ฐ์, '์ด๋ฐ ๊ฒ๊น์ง ํ์ํ๊ฐ?' ์ถ์ ์ ๋๋ก ์ ๋ง ์ ์ฐพ์๋ด์๊ธฐ ๋๋ฌธ์ ์ผ์ ๋ฒ์ ๋ด์์ ์ ๋นํ ์กฐ์จ์ด ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
ํนํ QA๋ฅผ ๋๋นํ์ฌ ๊ฐ๋ฐ์ ์งํํ ๋, ์ด๋์ ๋ ์์์ด ๊ฐ๋ฅํ ์ด์์ง๋ง ์ค์๋๊ฐ ๋์ง ์์ ๊ธฐ๋ฅ์ ์ด๋ฅผ QA์์ ๋ฐ๊ฒฌ๋๋๋ผ๋ ์ด๋ฅผ ๊ณ ๋ คํ๊ณ ์ผ๋ถ ๋ฏธ๋ฃจ๋ ๋ฐฉ์๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค.
์ ๋ฆฌํ๋ฉฐ
๋ฐฑ์คํผ์ค ์์คํ ์ ๊ตฌ์ถํ ๋ ์ผ์ ์ด ๊ฝค๋ ์ด๋ฐํด์ ์ผ๊ทผ(?)์ ๊ฝค๋ ์์ฃผ ํ๋๋ฐ, ๊ฐ์ธ์ ์ผ๋ก๋ ๋๋ฌด ์ฌ๋ฐ์์ต๋๋ค.
์งง์ ๊ฐ๋ฐ ๊ฒฝํ ๋์ ๊ฒช์๋ ๊ฐ์ฅ ๊ฒฝํ์ด ์ข์(?) ํ๋ก์ ํธ์๊ณ , ๊ฐ์ด ์งํํ๋ ๋๋ฃ๋ค์๊ฒ๋ ๊ต์ฅํ ๋ง์ด ๋ฐฐ์ธ ์ ์์์ต๋๋ค.
์ฌ์ค, ํด๋น ํ๋ก์ ํธ๋ฅผ ์งํํ๊ธฐ ์ ์๋ ํ์ ํ ๊ธฐํ๋ ๊ฑฐ์ ์์๊ณ ๋๋ฌด๋ ๋ฐ๋ถํ ํ๊ฒฝ์์ ์ผ์ ํ์๋ค๋ฉด, ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด ํ์ ํ๋ ๊ณผ์ ์์ ํจ๊ป ์ฑ์ฅํ๋ ๊ฒฝํ์ด ๊ต์ฅํ ์ค์ํ ์์์ด๊ณ , ์ผ์ ์ฌ๋ฏธ์๋ ๋ง์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
ํนํ ์ ๊ท ์๋น์ค๋ฅผ ์๊ฒ๋๋ง ๋ง์ดํฌ๋ก ์๋น์ค๋ก ๊ตฌ์ถํจ์ผ๋ก ๋ค์ํ ๊ฒฝํ์ ํ ์ ์์์ง๋ง, (๊ฐ์ธ์ ์ผ๋ก) ์กฐ๊ธ ๊ณผํ ์ค๊ณ๊ฐ ์๋์์๊น ์๊ฐํฉ๋๋ค.
๋ค์์ ์ ๊ท ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ถํ ๊ธฐํ๊ฐ ๋ ์๊ธด๋ค๋ฉด, ํนํ๋ ํธ๋ ์ด๋์คํ๋ฅผ ๋์ฑ ์ ๊ฒฝ ์จ์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ฐธ๊ณ ๋ฌธ์