YesAladin Auth๋ ๋ถ์ฐ ์๋ฒ ํ๊ฒฝ์ผ๋ก ๊ตฌ์ถ๋ YesAladin ์๋น์ค์ ์ธ์ฆ/์ธ๊ฐ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ์์คํ ์ ๋๋ค. Spring Security์ JWT ์ธ์ฆ ๋ฐฉ์์ ์ ์ฉํ์ฌ Client์ Login/Logout ์์ฒญ์ ์ํํ๋ฉฐ JWT ํ ํฐ์ ์ ๊ณต ๋ฐ ๊ด๋ฆฌํฉ๋๋ค.
./mvnw spring-boot:run
- NHN Dooray!์ ์นธ๋ฐ ํ์ฉ
- @WBS(Work Breakdown Structure)๋ฅผ ๊ตฌ๊ธ ์คํ๋ ๋์ํธ๋ก ๊ด๋ฆฌ
- JWT ์ธ์ฆ ์๋ฒ ๊ตฌ์ถ
- Client์ Login / Logout ์์ฒญ ์ํ ๋ฐ JWT ํ ํฐ ๊ด๋ฆฌ
- Front Server์์ ์ฌ์ฉ์๊ฐ ๊ฐ๊ณ ์๋ ํ ํฐ์ ๋ํ ์ฌ๋ฐ๊ธ API ์ ๊ณต
- NHN Cloud Log & Crash๋ฅผ ์ฐ๋ํ์ฌ ๋ชจ๋ํฐ๋ง ํ๊ฒฝ ๊ตฌ์ถ
- Spring Cloud Config๋ฅผ ์ฐ๋ํ์ฌ ์ค์ ์ ๋ณด ์ธ๋ถํ
- Shop API Server๋ก๋ถํฐ ์์ ๋ฐ์ ์ธ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํ JWT ํ ํฐ ๊ฒ์ฆ ๋ฐ payload ๋ฐํ API ๊ตฌํ
Front Server์์์ ์ฌ์ฉ์ ์์ฒญ์ ๋ฐ์ ์ ํจํ ์์ฒญ์ธ์ง์ ์ฌ๋ถ๋ฅผ ํ๋ณํ๊ณ , JWT๋ฅผ ๋ฐ๊ธ์์ผ์ฃผ๊ธฐ ์ํด UsernamePasswordAuthenticationFilter
๋ฅผ Customizing ํ์์ต๋๋ค.
์ฌ์ฉ์ ์ ๋ณด์ ๋ํ Database๋ Shop API Server์ ์ข
์๋์ด ์์ด ๋ด๋ถ์ flow๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
AuthenticationProvider
์ ์ํด ์ฑ
์์ ๋ฐ์ UserDetailsService
๋ฅผ Customํ ๊ณณ์์ RestTemplate
์ผ๋ก API ํธ์ถ ํ ์ธ์ฆ ๊ณผ์ ์ ์ํํฉ๋๋ค. Spring Security๋ฅผ ์ ์ฉํ ์๋ฒ๋ Front Server, Shop API Server, Auth Server์ด๊ณ Front Server๋ฅผ ์ ์ธํ ๊ฐ ์๋ฒ๋ Session ์ ์ง๋ฐฉ์์ Stateless๋ก ๊ณ ์ ํ์์ต๋๋ค.
Front Server์ ๊ฒฝ์ฐ Vue.js, React.js ๋ฑ๊ณผ ๊ฐ์ Frontend Framework๊ฐ ์๋ Spring Boot + Thymeleaf ๊ธฐ๋ฐ์ ์๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์ธ์ฆ/์ธ๊ฐ ์์ฒญ ์ดํ ๋ฐ๊ธ๋ JWT๋ฅผ ์ง์ ์ ์ผ๋ก Http Body์ ๋ฃ์ด ๋๊ฒจ์ฃผ์ง ์๊ณ ํ์๋ง๋ค ๊ณ ์ ํ๊ฒ ๋ฐ๊ธ๋ uuid์ accessToken๊ณผ ๊ฐ์ ์ ๋ณด๋ง์ HTTP Header์ ๋ฃ์ด return ํฉ๋๋ค. Front Server๋ ๋ฐ๊ธ๋ฐ์ JWT๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Session ๋ฐ Cookie๋ฅผ ํ์ฉํ๋ ๋ฐฉ์์ผ๋ก ํ์์ ๋ก๊ทธ์ธ์ ์ ์งํ๋๋ก ์ค๊ณํ์์ต๋๋ค.
๋ํ, Front Server์ scale out์ผ๋ก ์ธํด ๋ก๊ทธ์ธ์ ์ ์งํ๊ธฐ ์ด๋ ต๋ค๋ ๋ฌธ์ ๋ก Redis๋ฅผ ๊ณต์ ์ธ์ ์ ์ฅ์๋ก ์ฌ์ฉํ์๊ณ , ์ฌ์ฉ์๋ Auth Server๋ก๋ถํฐ ๋ธ๋ผ์ฐ์ ์ Cookie๋ก ๋ฐ๊ธ๋ uuid key๋ฅผ ๊ธฐ์ค์ผ๋ก Redis Session์ ์ ๊ทผํ๋ ๋ฐฉ์์ผ๋ก ๋ก๊ทธ์ธ/๋ก๊ทธ์์, ํ ํฐ ์ฌ๋ฐ๊ธ์ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
ํ ํฐ ์ฌ๋ฐ๊ธ์ ๊ฒฝ์ฐ, JWT์ accessToken, refreshToken์ ํ ๋๋ก accessToken์ ์ ํจํ ํ์์ ๊ธฐ์ค์ผ๋ก Front Server์ ๊ตฌํํ๋ Interceptor๋ฅผ ํตํด ์ฌ์ ์ ์ฌ๋ฐ๊ธ ํด์ผ ํ๋ ์์ ์ธ์ง ํ๋ณํ๊ณ , ์ด์ ํด๋นํ๋ฉด ์๋์ผ๋ก Auth Server์ ์ฌ๋ฐ๊ธ ์์ฒญ์ ๋ณด๋ด ์๋ต๋ฐ์ ๋ค, ๋ค์ ๊ณผ์ ๋ค(ํ์ด์ง ์ด๋, Shop API ํธ์ถ ๋ฑ)์ ์ํํ๋๋ก ํฉ๋๋ค.
Shop API Server๋ Front Server๋ก๋ถํฐ Authorization Header์ ๋ด๊ธด JWT ํ ํฐ ์ ๋ณด๋ฅผ ๋ฐ์ ์ด์ ๋ํ ์ธ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ ์ Auth Server๋ก ์์ํฉ๋๋ค. Auth Server์์ ํด๋น JWT ํ ํฐ์ ์ ํจ์ฑ ๊ฒ์ฆ์ด ์๋ฃ๋์ด ์ธ๊ฐ ๋ ๊ฒฝ์ฐ, payload์ ๋ค์ด์๋ ์ฌ์ฉ์ ์๋ณ ์ ๋ณด์ ๊ถํ ์ ๋ณด๋ฅผ ์ถ์ถํ์ฌ Shop API Server์ ๋๋ ค์ค๋๋ค. ์ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก Shop API Server ๋ด์์ Spring Security๋ฅผ ํตํด ์์ฒด์ ์ผ๋ก Authentication ์ ์์ฑํ๋๋ก ์ฒ๋ฆฌํ์์ผ๋ฉฐ, FilterSecurityInterceptor ๋ฐ method security๋ฅผ ์ ์ฉํ์ฌ API ๋ณด์์ ๊ฐํํ์์ต๋๋ค.
- Git Flow ์ ๋ต์ ์ฌ์ฉํ์ฌ Branch๋ฅผ ๊ด๋ฆฌํ๋ฉฐ Main/Develop Branch๋ก Pull Request ์ ์ฝ๋ ๋ฆฌ๋ทฐ ์งํ ํ merge ํฉ๋๋ค.
- Main: ๋ฐฐํฌ์ ์ฌ์ฉ
- Develop: ๊ฐ๋ฐ ๋จ๊ณ๊ฐ ๋๋ ๋ถ๋ถ์ ๋ํด Merge ๋ด์ฉ ํฌํจ
- Feature: ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋จ๊ณ
- Hot-Fix: Merge ํ ๋ฐ์ํ ๋ฒ๊ทธ ๋ฐ ์์ ์ฌํญ ๋ฐ์ ์ ์ฌ์ฉ