
์ค์ ์ด์ ํ๊ฒฝ์์ REST API๋ ์๋ฌด๋ ์ ๊ทผ ๊ฐ๋ฅํ ์์ ํ ์คํ API ์ํ๋ก ์๋น์ค๋ฅผ ๋ฐฐํฌํ ์๋ ์์ต๋๋ค. ์ด๋ฒ ๊ธ์์๋ Spring Security๊ฐ ์ด๋ป๊ฒ ๊ธฐ๋ณธ ๋ณด์์ ์ ๊ณตํ๋์ง, ๊ทธ๋ฆฌ๊ณ Security ๊ตฌ์กฐ์ ๋ด๋ถ ๋์์ ๋จ๊ณ๋ณ๋ก ๋ถ์ํฉ๋๋ค.
์ด์ ๊ธ์์๋ Spring Security์ ๊ธฐ๋ณธ ์ค์ ๊ณผ ๋ด๋ถ ํ๋ฆ์ ํ์ตํ๋ฉฐ ๋ณด์ ํํฐ๊ฐ ์์ฒญ์ ์ด๋ป๊ฒ ๊ฐ๋ก์ฑ๊ณ , ์ธ์ฆ ๊ณผ์ ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ์ดํด๋ดค์ต๋๋ค.

Spring Security๋ ๋จ์ํ ๋ก๊ทธ์ธ ๋ก์ง์ ์ ๊ณตํ๋ ํ๋ ์์ํฌ๊ฐ ์๋๋๋ค.์ฌ์ฉ์ ์๊ฒฉ ์ฆ๋ช (credential)์ ์์ ํ๊ฒ ์ ์ฅํ๊ณ ๊ฒ์ฆํ๊ธฐ ์ํ์ ๊ตํ ํด์ฑ ์์คํ (PasswordEncoder)์ ์ ๊ณตํฉ๋๋ค.

์ด์ ๊ธ์์ ์ฐ๋ฆฌ๋ ์ฌ์ฉ์์ ์ธ์ฆ(Authentication) ํ๋ฆ์ ์์ฑํ์ต๋๋ค. ์ด์ ์ธ์ฆ๋ ์ฌ์ฉ์๊ฐ ๋ฌด์์ ํ ์ ์๋๊ฐ, ์ฆ ์ธ๊ฐ(Authorization)๋ฅผ ๋ค๋ฃฐ ์ฐจ๋ก์ ๋๋ค. Spring Security๋ ์ธ๊ฐ๋ฅผ ์ธ ๊ฐ์ง ์์ค์ผ๋ก ์ ๊ณตํฉ๋๋ค.

์ด์ ๋ถํฐ๋ ์น ๋ณด์์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๋ ๊ฐ์ง ์ฃผ์ , CORS์ CSRF๋ฅผ ๋ค๋ฃฌ๋ค. ์ด ๋์ ํ๋ ์์ํฌ๋ฅผ ๋ ๋ ๋ชจ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ํ ์ ์๋ ์ทจ์ฝ์ ์ด๋ฉฐ, Spring Security์ ๊ธฐ๋ณธ ์๋ฆฌ๋ฅผ ์ ๋๋ก ์ดํดํ๊ธฐ ์ํด์๋ ํ์ ๊ฐ๋ ์ด๋ค.

์ด๋ฒ ์ฅ์์๋ Spring Security์ Stateful ์ธ์ฆ(JSESSIONID)์ ๋ฌด์ํ(Stateless) JWT ๊ตฌ์กฐ๋ก ๋์ฒดํ๋ค. ๊ธฐ์กด JSESSIONID + XSRF-TOKEN ์ฟ ํค ๊ธฐ๋ฐ ์ธ์ฆ์์ธ์ ์ ์ฌ์ฉ์ ์ํ๋ฅผ ์ ์ฅํ๊ณ , ์๋ฒ๊ฐ ์ฌ์ฉ์ ์๋ณ์ ๋ด๋นํ๋ค.

OAuth2(Open Authorization 2.0)๋์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ๋ฆฌ์์ค ์ ๊ทผ ๊ถํ์ ์์ ํ๊ฒ ์์ํ๊ธฐ ์ํ ๊ฐ๋ฐฉํ ํ์ค ํ๋กํ ์ฝ์ด๋ค.

OAuth2์ OpenID Connect๋ฅผ ์ค๋ฌด ์์ค์์ ๊ตฌํํ๋ ๊ฐ์ฅ ํ์ค์ ์ธ ์ ๊ทผ. JWT๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ Stateless ์ธ์ฆ์ ๊ฐ๋ ฅํ์ง๋ง, ๊ธฐ์ ํ๊ฒฝ(Enterprise)์์๋ ๋ค์๊ณผ ๊ฐ์ ํ์ค์ ์ธ ํ๊ณ๊ฐ ์๋ค. โก๏ธ Keycloak.

Keycloak ์์ด, Spring Security ์ํ๊ณ ์์์ ์์ ํ OAuth2 & OpenID Connect ์ธ์ฆ ์๋ฒ๋ฅผ ๊ตฌํํ๊ธฐ. ์ด์ ํธ์์๋ Keycloak์ ์ด์ฉํด ์ธ๋ถ ์ธ์ฆ ์๋ฒ๋ฅผ โ์๋โํ๋ ๋ฐฉ์์ ์ดํด๋ดค๋ค.

HTTPS, ์์ธ ์ฒ๋ฆฌ, ์ธ์ ๊ด๋ฆฌ, ์ด๋ฒคํธ ๋ฆฌ์ค๋๊น์ง โ Spring Security ์ค๋ฌด ํต์ฌ์ ๋ง๋ฌด๋ฆฌํ๋ค. HTTP(ํ๋ฌธ ํต์ )๋ ๋ฐ์ดํฐ๊ฐ ์ํธํ๋์ง ์์ ์ํ๋ก ์ ์ก๋๋ค. HTTPS๋ SSL/TLS ๊ณ์ธต์ ํตํด ์์ฒญ๊ณผ ์๋ต์ ์ํธํํ๋ค.