์๋ 9์๊น์ง ์งํํ๋ ์๊ตฌํ์ ํ ํ๋ก์ ํธ๋ฅผ ํผ์์ ์ถ๊ฐ๋ก ๊ธฐ๋ฅ ์ถ๊ฐ ๊ตฌํ์ ์งํํ๋ ค ํ๋ค. ๊ทธ๋ ์งํํ ๋, ๋ ์ถ๊ฐํ๊ณ ์ถ์๋ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ์ํค๊ณ ์๋์ ๋ค์ด ์์๋๋ฐ ํ์๋ค๊ณผ ๋์ ์ผ์ ๋๋ฌธ์ ํ์ง ๋ชปํ๋ค. ๊ทธ๋์ ๊ฐ์ธ์ผ๋ก ๋ฐ๋ก ๊ธฐ๋ฅ์ถ๊ฐ๋ฅผ ํ๋ คํ๋๋ฐ, ๊ธฐ์กด ์๋ฒ์
https://hyeinisfree.tistory.com/23 ์ฐธ๊ณ CI/CD ์ค๊ณ๋ ์ง๋ ํฌ์คํ ์ ์ด์ด MSA ์ ์ฉ์ ํ๋ฉด์, CI/CD ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํ๋ ค ํ๋ค. ๊ธฐ์กด์๋ Github Actions์ ์ฌ์ฉํ์ง๋ง, ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง๋ค ๋ณด๋ฉด ์๋ ์ธก๋ฉด์ Jen
์ง๋ ํฌ์คํ (Jenkins+Docker+MSA+Spring Boot CI/CD ์ ์ฉ)์ ์ด์ด MSA ์ ์ฉ์ ํ๋ฉด์ CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ถ ํ, ํด๋น ํฌ์คํ ์์๋ MSA ์๋น์ค๋ฅผ ์ํด Spring Cloud Gateway, Eureka๋ฅผ ์ค๊ณํ ์์ ์ ๋๋คโผ๏ธ Spr
์ง๋ ํฌ์คํ (Spring Cloud Eureka, Gateway๋ฅผ ํตํ ์ธ์ฆ/์ธ๊ฐ ์ฒ๋ฆฌ)์ ์ด์ด Spring Cloud Bus์ RabbitMQ๋ฅผ ์ด์ฉํ์ฌ MSA ์๋น์ค๋ฅผ ์ํด Config ์ ๋ณด ๋ฐ์ ์๋ฒ๋ฅผ ๊ตฌํ ํ ์์ ์ ๋๋คโผ๏ธ
์ง๋ ํฌ์คํ ์ ์ด์ด ์ฑํ ๋ง์ดํฌ๋ก ์๋น์ค ๊ฐ๋ฐ ๊ณผ์ ์ ํฌ์คํ ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ์ฃผ์ ์ฝ๋๋ง ๋ค๋ฃฐ ์์ ์ด๋ผ ๋ค๋ฃจ์ง ์๋ ์ฝ๋๋ค์ ์๋ github๋ฅผ ํตํด ์ฐธ๊ณ ํ์๊ธธ ๋ฐ๋๋๋ค๐๐(msa-master ๋ธ๋์น)๐ ์ฐธ๊ณ ์ฝ๋ : https://github.com
์ง๋ ํฌ์คํ ์ ์ด์ด ์ฑํ ๋ง์ดํฌ๋ก ์๋น์ค ์๋ฆผ ๊ธฐ๋ฅ ๊ณผ์ ์ ํฌ์คํ ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ์ฃผ์ ์ฝ๋๋ง ๋ค๋ฃฐ ์์ ์ด๋ผ ๋ค๋ฃจ์ง ์๋ ์ฝ๋๋ค์ ์๋ github๋ฅผ ํตํด ์ฐธ๊ณ ํ์๊ธธ ๋ฐ๋๋๋ค๐๐(msa-master ๋ธ๋์น)๐ ์ฐธ๊ณ ์ฝ๋ : https://github
์ด๋ฒ ํฌ์คํ ์์๋ MSA ์ ํ ํ ์ฑํ ๋ง์ดํฌ๋ก ์๋น์ค ๊ฐ๋ฐ ํ๋ฉด์ ๊ฒช์๋ ํธ๋ฌ๋ธ ์ํ ๋๊ฐ์ง์ ๋ํด ์ ๋ฆฌ ํด๋ณผ๋ ค๊ณ ํฉ๋๋ค. ๐ ์ฐธ๊ณ ์ฝ๋ : https://github.com/LminWoo99/PlantBackend/tree/msa-master JPA ope
์ง๋ ํฌ์คํ ์ฑํ ๋ง์ดํฌ๋ก ์๋น์ค ๊ฐ๋ฐ ์๋ฃ ํ, ์ด์ด์ ๊ฒฐ์ ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ๊ฐ๋ฐ ๊ณผ์ ์ ํฌ์คํ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ํด๋ฆญ๐ github ์ฃผ์ ์ฐธ๊ณ ์๊ตฌ์ฌํญ ์ ๋ฆฌ ์ค๊ณ ์๋ฌผ ๊ฑฐ๋ ์ , ํ์ด ๋จธ๋ ์ถฉ์ ์ ํตํ ๊ฒฐ์ ์ค์ ๊ณ์ข ์ด์ฒด ์ฐ๋์ ๋ถ๊ฐ๋ฅํ
์ด๋ฒ์๋ ์๋ก์ด ๋ง์ดํฌ๋ก์๋น์ค ์ ์ฐฉ์ ์์คํ ์ฟ ํฐ ๋ง์ดํฌ๋ก ์๋น์ค ๊ฐ๋ฐํ๋ฉด์ ํธ๋ฌ๋ธ ์ํ ๊ณผ ๊ทธ๊ฑธ ํด๊ฒฐํ๊ธฐ ์ํ ๊ณ ๋ฏผ๊ณผ ํด๊ฒฐ๊ณผ์ ์ ํฌ์คํ ํ๋ ค ํฉ๋๋ค.์๊ตฌ ํ์ด๋จธ๋๋ก ๊ฑฐ๋์์๋ง ์ ์ฉ ๊ฐ๋ฅ!์ฟ ํฐ์ ์๋ฌผ ์ค๊ณ ๊ฑฐ๋์ 3000์ ํ ์ธ ์ฟ ํฐ๋งค์ผ 13์์ ์ ์ฐฉ์ 100๋ช ๋์์ผ๋ก
์ด๋ฒ์๋ ์๊ตฌํ์ ํ๋ก์ ํธ ์๋ก์ด ๋ง์ดํฌ๋ก์๋น์ค sns ์์คํ ์ ๊ฐ๋ฐํ๋ฉด์ ํธ๋ฌ๋ธ ์ํ ๊ณผ ๊ทธ๊ฑธ ํด๊ฒฐํ๊ธฐ ์ํ ๊ณ ๋ฏผ๊ณผ ํด๊ฒฐ๊ณผ์ ์ ํฌ์คํ ํ๋ ค ํฉ๋๋ค.์ฐธ๊ณ Github URL: https://github.com/LminWoo99/PlantBackend/tree/ms
์ด๋ฒ์๋ ์ ๋ฒ์๊ฐ์ ์ด์ด ์๊ตฌํ์ ํ๋ก์ ํธ์ SNS ์๋น์ค์ querydsl ๋์ ์ฟผ๋ฆฌ๋ฅผ ๊ฒ์๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด๋ ๊ณผ์ ์ ํฌ์คํ ํด๋ณด๊ฒ ์ต๋๋คโ๏ธํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์, ์ฌ๋ฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ํ์ ์ผ๋ก ๊ฒ์๊ธ์ ์กฐํํ๋ ์๊ตฌ์ฌํญ์ด ์๊ฒผ์ต๋๋ค. ์ฝ๊ฒ ๋งํด ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผํ๋ ๊ฒ
์ด๋ฒ ํฌ์คํ ์์๋ refresh ํ ํฐ ์ฌ๋ฐ๊ธ ๊ด๋ จ ๋ก์ง์ ๋ฆฌํฉํฐ๋งํ๋ ๊ณผ์ ์ ๊ดํด ํฌ์คํ ํด๋ณผ๋ ค๊ณ ํฉ๋๋ค!๋ฆฌํฉํฐ๋ง์ ํ๊ธฐ์ ์๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ฌ์ฉ์ค์ด์๋ MySql์ ํตํด refresh token์ ์ ์ฅํ๊ณ AccessToken์ด ๋ง๋ฃ๋๋ฉด refresh token์
์ด๋ฒ ํฌ์คํ ์ ์๊ตฌํ์ ํ๋ก์ ํธ msa์์์ ๋ถ์ฐ ํธ๋์ญ์ ์ ์ ์ดํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ธ saga-pattern์ ํ์ฉํ ๊ณผ์ ์ ํฌ์คํ ํด๋ณด๊ฒ ์ต๋๋ค. 1. ๋ถ์ฐ ํธ๋์ญ์ ๐ก ๋ถ์ฐ ํธ๋์ญ์ ์ ์ ์ ์ดํด์ผํ๋๊ฐ? ์๋ ๊ทธ๋ฆผ์ ๊ฒฐ์ ํ๋ก์ธ์ค๋ฅผ MSA ๋ถ์ฐ ํ๊ฒฝ์ผ๋ก ๊ฐ๋ต
์ง๋ ํฌ์คํ Saga ํจํด์ ๋ถ์ฐ ํธ๋์ญ์ ๊ด๋ฆฌ์ ํฐ ๋์์ ์ฃผ์ง๋ง, ๊ฒฐ์ ์์คํ ๊ณผ ๊ฐ์ด ๋์ ์ ๋ขฐ์ฑ์ด ์๊ตฌ๋๋ ํ๊ฒฝ์์๋ ์ถ๊ฐ์ ์ธ ์ฅ์ ๋์์ด ํ์ํฉ๋๋ค. ์ค๋์ ์๊ตฌํ์ ํ๋ก์ ํธ์์ ์ ์ฉํ ์ถ๊ฐ ์ฅ์ ๋์ ๋ฐฉ์์ ๋ํด ๊ฐ๋ ์์ฃผ๋ก ์ ๋ฆฌ๋ฅผ ํ๊ณ
์ค๋ ํฌ์คํ ์์๋ ์ด์ ํฌ์คํ ์์ ๋ง์๋๋ฆฐ๋๋ก ์์คํ ์ ๊ฐ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด ์นดํ์นด ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!๐๐ ์ด์ ํฌ์คํ ๋ณด๋ฌ๊ฐ๊ธฐ์ดํดํ๊ธฐ ์ฝ๊ฒ ๊ฐ๋จํ ๋น์ ๋ก ์ค๋ช ํด๋ณด๊ฒ ์ต๋๋ค.์ฐ๋ฆฌ ๋๋ค์ ์ฐ์ฒด๊ตญ์ด ๋ฑ ํ๋๋ง ์๋ค๊ณ ์๊ฐํด๋ด ์๋ค. ์ด ์ฐ์ฒด๊ตญ์ ๋ฌด์จ ์ผ์ด
์ค๋ ํฌ์คํ ์ ๊ธฐ์กด Saga ํจํด ์ดํ์ ์ถ๊ฐ ์ฅ์ ๋์ ํธ์ ๋ง์ง๋ง ํฌ์คํ ์ด๊ณ , ๋ค๋ฃจ๊ฒ ๋ ๋ด์ฉ์ CDC์ Transactional Outbox Pattern์ ํตํด ๋ฉ์์ง ์ ์ค ์์ด ๋ณด๋ค ๋ ์ ๋ขฐ์ฑ ์๋ MSA ์์คํ ์ ๊ตฌ์ถํด ๋ณด๋ ๊ณผ์ ์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.๐
๋ชฉ์ฐจ 1. ์ฑ๋ฅ ๊ฐ์ ํ๊ฒ ๋ ๋ฐฐ๊ฒฝ ์ง๊ธ ์๊ตฌํ์ ํ๋ก์ ํธ SNS ๋ง์ดํฌ๋ก์๋น์ค ๊ธฐ๋ฅ ์ค ์์ฑ ์ ์ ๊ธฐ์ค SNS ๊ฒ์๊ธ ์กฐํ API ์์ ์๋ ์ฟผ๋ฆฌ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ค์ ๋นํด ์ ๋ํ ์ค๋ ๊ฑธ๋ ธ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์กด์ฌํ๋ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค์ FK ์ธ๋ฑ์ค๋ก๋ ํด๋น ์ฟผ๋ฆฌ๊ฐ ์ธ
๐ ๋ฐฐ๊ฒฝ ์ค๋ ํฌ์คํ ์์๋ ์ผ๋ช ๋ฐ๋ฅ ์ด์๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ, ์ฆ ๋ฉฑ๋ฑํค๋ฅผ ํ์ฉํด์ ์ฌ์ฉ์ ์ค๋ณต ์์ฒญ ๋ฐฉ์ง๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋ ค ํฉ๋๋ค! > ์ด๋ฐ ์ํฉ์ ํ ๋ฒ ์์ํด๋ด ์๋ค!! ์ค๋งํธํฐ ์ฑ์ด๋ ์น ์๋น์ค๋ฅผ ํตํด ๋ฌผ๊ฑด์ ๊ตฌ๋งคํ๊ฑฐ๋ ๊ณ์ข์ด์ฒด๋ฅผ ํ๋ ค๊ณ ํฉ๋๋ค. '๊ฒฐ
์ด์ ํฌ์คํ ์์ ์ธ๊ธํ๋ฏ์ด, ์๊ตฌํ์ ํ๋ก์ ํธ์์๋ Spring Cloud Gateway(SCG)๋ฅผ API Gateway๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด ๊ฒ์ดํธ์จ์ด๋ ์ฃผ๋ก JWT ํ ํฐ ์ ํจ์ฑ ๊ฒ์ฆ๊ณผ ๋ผ์ฐํ ๊ธฐ๋ฅ์ ๋ด๋นํ๊ณ ์์ต๋๋ค.ํ๋ก์ ํธ ์ด๊ธฐ ์ค๊ณ ๋จ๊ณ์์ SCG ๋์ ์ ๊น
์ด์ ํฌ์คํ ์ ์ด์ด, ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ(MSA)์ ์์ ์ฑ์ ๊ฐํํ๊ธฐ ์ํด Gateway ์๋ฒ์ Resilience4j๋ฅผ ํ์ฉํ์ฌ ์ํท๋ธ๋ ์ด์ปค๋ฅผ ์ ์ฉํ๋ ๊ณผ์ ์ ์๊ฐํ๊ณ ์ ํฉ๋๋ค. ์ ๊ทธ๋ฆผ์ฒ๋ผ ์๋น์ค๊ฐ ์ด์๋๋ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์์ธกํ๋ ๊ฒ์ด ์ด์์ ์ด
์ด์ ํฌ์คํ ์์ ์ ๋ Redis์ Redisson์ ์ฌ์ฉํด SNS ๋ง์ดํฌ๋ก์๋น์ค์์ ์ข์์ ๊ธฐ๋ฅ์ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ถ์ฐ๋ฝ์ ๊ตฌํํ์ต๋๋ค. ์ด ๊ณผ์ ์์ ํผ์ฌ๋ ํจํด์ ๋์ ํ์ฌ ๋ฝ๊ณผ ํธ๋์ญ์ ์ ๋ฒ์๋ฅผ ์ผ์น์ํค๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ต๋๋ค. ํผ์ฌ๋ ํจํด์ ์ฌ๋ฌ ๋ฉ์๋์