ย ๋ด๊ฐ ๊ธฐ์ฌํ ๋ถ๋ถ
โข
API Gateway๋ฅผ ํตํด WebFlux ๋ฐฉ์์ผ๋ก ๋ก๊ทธ์ธ ์์ฒญ ์ฒ๋ฆฌํ์ฌ ์๋น์ค ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ ํฅ์
โข
Google๊ณผ Kakao ์์
๋ก๊ทธ์ธ ์ฐ๋์ผ๋ก ๊ฐํธ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ์ ๊ณต
โข
CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ถ์ผ๋ก ์๋ํ๋ ๋น๋, ํ
์คํธ, ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ๋์
ํ์ฌ ๊ฐ๋ฐ ํจ์จ์ฑ ๊ทน๋ํ
โข
MultiModule ์ค๊ณ๋ฅผ ํตํด ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ๋ฐ ํ๋ก์ ํธ ๊ด๋ฆฌ ํจ์จ์ฑ ๊ฐ์
โข
AWS ์ธํ๋ผ ์ค์ ๋ฐ ๋ฐฐํฌ ์๋ํ๋ฅผ ํตํด ์์ ์ ์ธ ์๋น์ค ์ด์ ํ๊ฒฝ ๊ตฌ์ถ
โข
Prometheus์ Grafana๋ฅผ ์ฌ์ฉํ์ฌ JVM ๋ฐ Nginx ๋ชจ๋ํฐ๋ง ์์คํ
์ ๊ตฌ์ถํ์ฌ ์๋ฒ ์ฑ๋ฅ์ ์ค์๊ฐ์ผ๋ก ๋ถ์
ย ์ฌ์ฉ ๊ธฐ์
โข
DataBase
โฆ
MySQL / Redis / ElasticSearch
โข
BackEnd
โฆ
Java / Spring Boot / Spring Data JPA / Spring Security / Spring Cloud
โข
API
โฆ
Kakao Login / Google Login / Wanted / Swagger
โข
Monitoring
โฆ
LogStash / Prometheus & Grafana
โข
Software Architecture Pattern
โฆ
Hexagonal Architecture
โข
FrontEnd
โฆ
HTML / CSS / JavaScript / Vue.js
โข
DevOps
โฆ
GitHub Actions / AWS(Elastic Beanstalk, EC2, RDS, S3, Route53)
โข
Collaboration
โฆ
GitHub / Slack / Notion / Figma / Miro / Jira
System Architecture
J4JG System Architecture
ํธ๋ฌ๋ธ ์ํ 1
๋ฌธ์ ๋ฐฐ๊ฒฝ
Spring WebFlux ์ ํ๋ฆฌ์ผ์ด์
์์ OAuth2 ์ธ์ฆ์ ์ค์ ํ๋ ๊ณผ์ ์ค, ์๋ธ๋ฆฟ ๊ธฐ๋ฐ์ HttpSecurity ์ค์ ์ ์ฌ์ฉํ์ฌ ClientRegistrationRepository ๋น์ ์ฐพ์ ์ ์๋ค๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ฆฌ์กํฐ๋ธ ํ๊ฒฝ์ ๋ง๊ฒ ์ค์ ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด SecurityWebFilterChain์ ์ฌ์ฉํ์ฌ ๋ฆฌ์กํฐ๋ธ ๋ณด์ ์ค์ ์ ๊ตฌํํ์ต๋๋ค. ๊ธฐ์กด์ ์๋ธ๋ฆฟ ๊ธฐ๋ฐ ๋ณด์ ์ค์ ์ธ HttpSecurity๋ฅผ ์ ๊ฑฐํ๊ณ , ServerHttpSecurity๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์กํฐ๋ธ ๊ท์น์ ์ ์ํ์ต๋๋ค.
๊ฐ์ ๊ฒฐ๊ณผ
๋ฆฌ์กํฐ๋ธ ๋ณด์ ์ค์ ์ผ๋ก ๋ณ๊ฒฝํ ํ, ClientRegistrationRepository์ ๊ด๋ จ๋ ์ค๋ฅ๊ฐ ํด๊ฒฐ๋์์ผ๋ฉฐ, OAuth2 ๋ก๊ทธ์ธ ๋ฐ JWT ํํฐ ์ ์ฉ์ด ์ ์์ ์ผ๋ก ์๋ํ์์ต๋๋ค.
ํด๋น ๊ฒฝํ์ ํตํด ์๊ฒ ๋ ์
๋ฆฌ์กํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ์๋ธ๋ฆฟ ๊ธฐ๋ฐ์ ๋ณด์ ์ค์ ์ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ฉฐ, SecurityWebFilterChain์ ํตํด ๋ฆฌ์กํฐ๋ธ ๋ณด์์ ๊ตฌ์ฑํด์ผ ํ๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค.
๋ฆฌ์กํฐ๋ธ ์ค์ ์ ์ํ SecurityConfig ํด๋์ค
HttpSecurity๋ฅผ ์ ๊ฑฐํ๊ณ , ServerHttpSecurity๋ฅผ ์ฌ์ฉ
ํธ๋ฌ๋ธ ์ํ 2
๋ฌธ์ ๋ฐฐ๊ฒฝ
๋ก๊ทธ์์ ์ Redis์ ์ ์ฅ๋ RefreshToken์ด ์ญ์ ๋์ง ์๊ณ ์์์ต๋๋ค.
๋ฌธ์ ์ ์์ธ์ CustomLogoutSuccessHandler์์ RefreshToken์ Redis์์ ์ญ์ ํ๋ ๋ก์ง์ด ์ ๋๋ก ์๋ํ์ง ์์์์์ต๋๋ค. ๋ก๊ทธ์์ ์ RefreshToken์ providerId๋ฅผ ํ์ฉํด Redis์์ ํด๋น ํ ํฐ์ ์ญ์ ํ๋ ๋ถ๋ถ์ด ์ ๋๋ก ํธ์ถ๋์ง ์๊ณ ์์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ก๊ทธ์์ ์ฒ๋ฆฌ ์ ๋ฆฌํ๋ ์ ํ ํฐ์ ์ญ์ ํ๋ CustomLogoutSuccessHandler์์ Redis์ ์ ์ฅ๋ ํ ํฐ์ ์ญ์ ํ๋ ๋ฐฉ์์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์ฟ ํค์์ ๋ฆฌํ๋ ์ ํ ํฐ ๊ฐ์ ์ถ์ถํ ๋ค, ํด๋น ๊ฐ์ ์ด์ฉํ์ฌ Redis์์ ์ญ์ ํ๋๋ก deleteByProviderId ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๋ฌ๋ providerId๋ฅผ ์ง์ ์ญ์ ํ์ง ์๊ณ , ํ ํฐ ๊ฐ์ ์ ๋๋ก ๋งค์นญํด Redis์์ ์ ํํ ์ญ์ ํ๋ ๋ก์ง์ ์ถ๊ฐํ์ต๋๋ค.
๊ฐ์ ๊ฒฐ๊ณผ
๋ก๊ทธ์์ ์ Redis์์ ๋ฆฌํ๋ ์ ํ ํฐ์ด ์ ์์ ์ผ๋ก ์ญ์ ๋์์ผ๋ฉฐ, ๋ง๋ฃ๋ ํ ํฐ๋ Redis์์ ์๋์ผ๋ก ์ ๊ฑฐ๋ ์ ์๋๋ก ๊ธฐ๋ฅ์ด ์ ์ฉ๋์์ต๋๋ค.
ํด๋น ๊ฒฝํ์ ํตํด ์๊ฒ ๋ ์
Redis์์ ํค ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๋, ์ ํํ ํค๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
CustomLogoutSuccessHandler์์ Redis์ ์ ์ฅ๋ ํ ํฐ์ ์ญ์
๐ซก ํ๊ณ
โ๊ธฐ์ ์ ๋์ ๊ณผ ์ง์์ ์ธ ์ฑ์ฅ ๊ทธ๋ฆฌ๊ณ โฆ ์ ๋ฆฌ์ ์ต๊ดํโ
J4JG(์กํฌ์๊ธฐ): Follow Your Dream ํ๋ก์ ํธ๋ ๊ธฐ์ ์ ๋์ ๊ณผ ํ์ํฌ๋ฅผ ํตํด ํฐ ์ฑ๊ณผ๋ฅผ ๋ผ ์ ์์๋ ์ค์ํ ๊ฒฝํ์ด์์ต๋๋ค. API Gateway๋ฅผ ํ์ฉํ WebFlux ๋ฐฉ์์ผ๋ก ๋ก๊ทธ์ธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , Google๊ณผ Kakao ์์
๋ก๊ทธ์ธ ์ฐ๋์ ํตํด ๊ฐํธํ ์ฌ์ฉ์ ์ ๊ทผ์ ์ ๊ณตํ์ผ๋ฉฐ, CI/CD ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ์ฌ ์๋ํ๋ ๋น๋ ๋ฐ ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ๋์
ํจ์ผ๋ก์จ ๊ฐ๋ฐ ํจ์จ์ฑ์ ๊ทน๋ํํ ์ ์์์ต๋๋ค. ๋ํ, Prometheus์ Grafana๋ฅผ ์ฌ์ฉํด JVM ๋ฐ Nginx ๋ชจ๋ํฐ๋ง ์์คํ
์ ๊ตฌ์ถํ์ฌ ์๋ฒ ์ฑ๋ฅ์ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ๊ณ ์์ ์ฑ์ ๋์์ต๋๋ค. ํ์ง๋ง ์ด ํ๋ก์ ํธ์์ ๊นจ๋ฌ์ ๋ ๋ค๋ฅธ ์ค์ํ ์ ์ ๋ฌธ์ํ์ ๊ธฐ๋ก์ ์ค์์ฑ์
๋๋ค. ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๋์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ์ง์คํ๋๋ผ ๋งค ์๊ฐ ๊ธฐ๋กํ๊ณ ์ ๋ฆฌํ๋ ์ต๊ด์ ๋ค์ด์ง ๋ชปํ๋ ๊ฒ์ด ์์ฌ์ ์ต๋๋ค. ํ๋ก์ ํธ์ ํ๋ฆ๊ณผ ๊ธฐ์ ์ ์ ํ์ ์ฒด๊ณ์ ์ผ๋ก ๊ธฐ๋กํ๋ ์ต๊ด์ด ์์๋๋ผ๋ฉด, ์ถํ ์ ์ง๋ณด์๋ ์ง์ ๊ณต์ ์์ ๋์ฑ ํจ์จ์ ์ด์์ ๊ฒ์
๋๋ค. ์์ผ๋ก๋ ์ด๋ฌํ ์ต๊ด์ ๊ธธ๋ฌ์ ๋์ฑ ์ ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์ํํ๋ ค๊ณ ํฉ๋๋ค.