MSA, Cloud Native App์ ๋ฌด์์ธ๊ฐ
by JiwonDev๐ญ ์ํํธ์จ์ด ์ํคํ ์ฒ์ ์ญ์ฌ
๊ฐ์ธ์ด ๊ตฌ๋งค๊ฐ๋ฅํ ์ปดํจํฐ์ ์ด์์ฒด์ ๋ผ๋ ๊ฐ๋ ์ 1970๋ ๋์ฏค ์ฒ์ ๋์์ต๋๋ค.
- 1960~1980 : ํ๋์จ์ด์ ์ฑ๋ฅ์ด ์ค์ํ๋ ์๋์ ๋๋ค. ํ์ฌ๋ง๋ค 1๋์ ์ปดํจํฐ๋ก ๋ชจ๋ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค.
- 1990~2000 : ํ์ฌ ์๋ฒ์ค์ ์ฌ๋ฌ ๋์ ์ปดํจํฐ๋ฅผ ๋๊ณ ๋ถ์ฐ์ฒ๋ฆฌํ๊ธฐ ์์ํฉ๋๋ค.
- 2010~ : ํ๋์จ์ด๊ฐ ์ ๋ ดํด์ง๋ฉฐ ์์ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋ง์ด ๊ฐ์ ๋ฉ๋๋ค. ๋คํธ์ํฌ ํด๋ผ์ฐ๋ ์๋ฒ๊ฐ ๋ฑ์ฅํฉ๋๋ค.
์๋ฒ๋ฅผ ์ ์ฐํ๊ฒ ํ์ฅํ ์ ์์ผ๋ฉฐ, ๋ณํ์ ๋์ํ๊ธฐ ์ฝ๊ฒ ๊ตฌ์ฑํ๊ธฐ ์์ํฉ๋๋ค. (DevOps ์ง์ข ์ ๋ฑ์ฅ)
๊ณผ๊ฑฐ์๋ ์ปดํจํฐ์ ์ฑ๋ฅ์ด ์ค์ํด์ ์ ์ฐํ๊ฒ ๊ตฌ์ฑํ๊ธฐ ์ด๋ ค์ ์ง๋ง, ํ๋์๋ ๋น๊ต์ ์ํ๋๋ฐ๋ก ๊ตฌ์ฑ๊ฐ๋ฅํฉ๋๋ค.
๐ ์์ ์ ์ด๊ณ ์ ์ฐํ๋ค๋๊ฒ ๋ฌด์จ๋ง์ด์ฃ ?
Antifragile. ์ฆ ๊ฐ์๊ธฐ ๋๊ท๋ชจ ํธ๋ํฝ์ด ๋ชฐ๋ฆฌ๋๋ผ๋, ์ฅ์ ๋ฅผ ๊ฒฉ๋ฆฌํ๊ณ ์ ์ฐํ๊ฒ ๊ตฌ์ฑ์ ๋ฐ๊ฟ ๋์ฒ๊ฐ๋ฅํ๋ค๋ ๋ง์ ๋๋ค.
์์ ์ ์ด๊ณ ์ ์ฐํ ๋๊ท๋ชจ ์๋ฒ๋ ์๋์ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋๋ค.
1. Auto Scaling - ํด๋ผ์ฐ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํธ๋ํฝ์ ๋ฐ๋ผ ์์ฝ๊ฒ ์๋ฒ ์์์ ๋๋ ธ๋ค ์ค์๋ค ํ ์ ์์ต๋๋ค.
2. Microservice - ํ ์๋ฒ๊ฐ ๋ชจ๋ ๊ฒ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์(๋ชจ๋๋ฆฌ์ค)๊ฐ ์๋๋ผ, ๊ฐ๊ฐ์ ๋ถ์ฐ๋ ์๋ฒ๊ฐ ํ๋ ฅํด์ ์ฒ๋ฆฌํฉ๋๋ค.
3. Chaos engineering - ์์ํ์ง ๋ชปํ ์ฅ์ ๋ ๊ธ๊ฒฉํ ๋ณํ์๋ ๋น ๋ฅด๊ฒ ๋์ ๊ฐ๋ฅํ ์ํคํ ์ฒ๋ฅผ ๋งํฉ๋๋ค.
4. CI / CD (Continuous Integration, Deployments) - ์๋ง์ ์๋ฒ, ๊ฐ๋ฐ์๊ฐ ๋ง๋ ๊ธฐ๋ฅ์ ์์ ์ ์ด๊ฒ ํตํฉํ๊ณ , ์ง์์ ์ธ ๋ฐฐํฌ๋ฅผ ๊ฐ๋ฅํ๋๋ก ๊ตฌ์ฑ๋ ์ํคํ ์ฒ๋ฅผ ์๋ฏธํฉ๋๋ค.
์์ ํน์ง๋ค์ ๊ฐ์ง ์ฑ์, Cloud Native Application์ด๋ผ๊ณ ๋ ๋ถ๋ฆ ๋๋ค.
๐ ์ปจํ ์ด๋ ๊ฐ์ํ?
์๋ฒ๋ฅผ ์ด์ํ๋๋ฐ๋ ๋ง์ ์ค์ ๊ณผ ํ๋ก๊ทธ๋จ์ด ํ์ํฉ๋๋ค
๋งค๋ฒ ํ๋ก๊ทธ๋จ์ ์ค์นํ๊ณ , ๋ง์ ์ค์ ๋ค์ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ค์์ '์๋ฒ๋ฅผ ๊ฒฉ๋ฆฌ์ํค๋' ๊ฐ์ํ๊ฐ ๋์ค๊ฒ ๋์์ต๋๋ค.
๊ฐ์ํ์ ๊ฐ์ฅ ํฐ ๋จ์ ์, ํ ์ปดํจํฐ์ ๋ ๋ฆฝ์ ์ธ ์ด์์ฒด์ ๋ฅผ ์ค์ ๋ก ์ค์นํ๊ณ ๋์ด๋ค๋ ์ ์ด ์์ต๋๋ค.
ํธ์คํธ๊ฐ ๋๋ ์ปดํจํฐ์ CPU์ ๋ฉ๋ชจ๋ฆฌ๋ถํ๊ฐ ์๋นํ ์ฌํด์ง๊ณ , ๊ฐ์ํ๋ฅผ ์ฌ์ฉํ์์๋ ์์คํ ํ์ฅ์ด ์ด๋ ต์ต๋๋ค.
์ฌ๊ธฐ์์ ํ๋จ๊ณ ๋ ๋์๊ฐ๊ฒ์ด Docker ๊ฐ์ ์ปจํ ์ด๋ ๊ฐ์ํ์ ๋๋ค.
์ด์์ฒด์ ๊ฐ ์ ๊ณตํด์ฃผ๋ ๊ฐ์ํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ, ์ค์ ๋ก ์ฌ๋ฌ๊ฐ๋ฅผ ๋์ฐ๋๊ฒ ์๋๋ผ, ๊ฐ์์ผ๋ก ๊ฒฉ๋ฆฌ๋ ๊ณต๊ฐ์ ๋ง๋ญ๋๋ค.
๋ง์ฝ ๋๊ฐ์ ์ค์ ๊ฐ, ์์์ด๋ผ๋ฉด [์ปจํ ์ด๋ ์ด๋ฏธ์ง] ์ค์ ํ์ผ์ ๋ง๋ค์ด ์ค๋ณต ์ค์น์์ด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
๐ญ Cloud Native App์ ๋ง๋ฅ์ธ๊ฐ
์๋๋๋ค. Cloud Native App์ ๊ฐ๋ฐํ ๋์๋ ๊ธฐ์กด ํ๋ก์ ํธ๋ณด๋ค ๋ง์ ๊ฒ์ ์ถ๊ฐ๋ก ๊ณ ๋ คํด์ผ ํฉ๋๋ค. (12 Factors)
์ด๋ฅผ ๊ณต์๋ง๋ฅ ์ธ์ธ ํ์๋ ์๊ณ , ๊ฐ๊ฐ์ ์ค๋ช ํ๋ ํค์๋๋ฅผ ํ๋ฒ ๋ด๋๋ฉด ์ฑ ์ฝ๊ฑฐ๋ ๊ฒ์ํ ๋ ๋์์ด ๋ฉ๋๋ค.
- Base Code ๊ด๋ฆฌ - ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ธ ์๋น์ค์ ์ฝ๋๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํด์ผํ๊ณ , ์ง์์ ์ธ ํตํฉ, ๋ฐฐํฌ๊ฐ ํ์ํฉ๋๋ค.
- Dependency Isolation - ๊ฐ๊ฐ์ ์๋น์ค๋ ๋ค๋ฅธ ์๋น์ค์ ์์กด์ฑ์ด ์์ด์ผํฉ๋๋ค. (์๋น์ค์ ์ธํฐํ์ด์ค๋ก ํต์ )
- Configurations - ์ฝ๋ ๋ด๋ถ์์ ์ง์ ์ค์ ํ๋ ๊ฒ์ด ์๋๋ผ, ์์คํ ์ธ๋ถ์์ ์ค์ ์ ๊ด๋ฆฌํ ์ ์์ด์ผ ํฉ๋๋ค.
- Linkable Backing Service - ํต์ฌ ๋ก์ง๊ณผ ์ธ๋ถ ๊ตฌํ๊ธฐ์ , ์ฆ Backing Service๊ฐ ๋ถ๋ฆฌ๋์ด ๊ฐ์ ๋ผ์ธ ์ ์์ด์ผ ํฉ๋๋ค.
- Stage Of Creation - ๋น๋, ๋ฆด๋ฆฌ์ฆ, ์ด์๋ฒ์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ๋ฌธ์ ๋ฐ์์ ์ด์ ์ผ๋ก ๋กค๋ฐฑ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
- Stateless Processes - ๊ฐ๊ฐ์ ์๋น์ค๋ Statelessํ๊ฒ ๋์ํด์ผํฉ๋๋ค. ์ด์ ์ํ๋ ์์กด์ฑ์ ๊ฐ์ง๋ฉด ์๋ฉ๋๋ค.
- Port Binding - ๊ฐ๊ฐ์ ์๋น์ค๋ ์ค์ค๋ก ์คํ๊ฐ๋ฅํด์ผํฉ๋๋ค. (์ฆ, ๊ฐ๊ฐ์ ์๋ฒ Port๋ฅผ ์ ๊ณตํด์ผํฉ๋๋ค.)
- Concurrency - ๋์์ฑ ๋ฌธ์ ์ ์ฑ๋ฅ์ ๋ํด ๊ณ ๋ คํด์ผํฉ๋๋ค.
- Disposabilty - ์๋น์ค ์ธ์คํด์ค๊ฐ ์ญ์ ๊ฐ๋ฅํด์ผํฉ๋๋ค. (์ปจํ ์ด๋) ์ ์ฐํ๊ฒ ๊ฐ์ ๋ผ์ธ ์ ์์ด์ผํฉ๋๋ค.
- Development & Production Parity - ๊ฐ๋ฐํ๊ฒฝ๊ณผ ์ด์ํ๊ฒฝ์ ๋ถ๋ฆฌํด์ ์ด์ํด์ผํฉ๋๋ค. ์๋ก ์ํฅ์ด ์์ด์ผํฉ๋๋ค.
- Log - ์๋น์ค์ ๋ ๋ฆฝ์ ์ธ ๋ก๊ทธ, ๋ชจ๋ํฐ๋ง ์์คํ ์ด ์กด์ฌํด์ผํฉ๋๋ค. ์๋น์ค๊ฐ ๋ฉ์ถ๋๋ผ๋ ๋ก๊ทธ๋ ์๋ํด์ผํฉ๋๋ค.
- Admin Processes for Eventual Processes - ๊ฐ๊ฐ์ ์๋น์ค๋ค์ ๋์ ๊ณผ์ ์ ๋ชจ๋ํฐ๋ง, ๋ถ์ํ ์ ์์ด์ผ ํฉ๋๋ค.
์คํ๋ง์ ๊ฐ๋ฐํ๋ Pivotal์์ 12 Factors ์ 3๊ฐ์ง๋ฅผ ์ถ๊ฐํ 15 Factors๋ฅผ ๋ธ๋ก๊ทธ์ ์ฌ๋ฆฌ๊ธฐ๋ ํ์ต๋๋ค.
- API first - ๋ด๋ถ ์๋น์ค๋ผ๊ณ ํ๋๋ผ๋, ์ธ๋ถ ๊ณต๊ฐ๊ฐ ๊ฐ๋ฅํ๊ฒ API์ ๋ฌธ์๋ฅผ ๋ช ํํ๊ฒ ์ ์, ์ค๊ณํด์ผํฉ๋๋ค.
- Telemetry - ๋ชจ๋ ์ฅ์ ์ ์์น๋ ์๊ฐํ ๋์ด์ผํฉ๋๋ค.
- Authentication and authorization - ๊ธฐ์ ์ฉ, ๋ชจ๋ฐ์ผ, ๋ด๋ถ์ฑ์ด๋ผ๊ณ ํ๋ค ๋ณด์์ ๋ฌด์ํ๊ฑฐ๋ ๋ฏธ๋ฃจ๋ฉด ์๋ฉ๋๋ค.
MSA ๋ฐฉ์์ Cloud Native App์ ๋ง์ ์ฅ์ ์ ๊ฐ์ง์ง๋ง, ๊ทธ๋งํผ ๊ตฌํํ๊ธฐ ์ด๋ ต๊ณ ๋ ๋ง์ ๊ฒ์ ๊ณ ๋ คํด์ผํฉ๋๋ค.
์ ๋ต์ ์์ต๋๋ค. ํ ํ๋ก์ ํธ์ ๋ชจ๋ ๊ฑธ ๋ง๋๋ ๋ชจ๋๋ฆฌ์ค(Monolith Architecture)๊ฐ ๋ ์ข์ ๋๋ ๋ง์ต๋๋ค.
์ดํด๋ฅผ ๋๊ธฐ์ํด ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋น๊ตํด๋ณด์๋ฉด, ์๋์ ๊ฐ์ต๋๋ค.
๐ ์ค์ ๋๊ธฐ์ ๋ค์ ์ด๋ค ์์ผ๋ก ๋ง๋๋์?
- ๊ฐ๊ฐ์ ์๋น์ค API๋ฅผ ์ง์ ์ ๊ณตํ์ง ์๊ณ , API Gateway(์๋น์ค ๋ผ์ฐํฐ)๋ฅผ ์ฌ์ฉํด ๋จ์ผ ์ง์ ์ ์ ์ ๊ณตํฉ๋๋ค.
- ํ์ํ ์๋น์ค๋ฅผ ์ฐพ์๋ค๋ฉด ์์ฒญ์ ํฉ๋๋ค. ์ด ๋ ์๋ฒ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๋ก๋๋ฐธ๋ฐ์๋ฅผ ํตํด ํธ๋ํฝ์ ๋ถ์ฐ์ํต๋๋ค.
- ๊ฐ๊ฐ์ ์๋ฒ ์ธ์คํด์ค๋ ์ปจํ ์ด๋๋ก ๊ฐ์ํ๋์ด์๊ณ , ์๋ฒ๊ฐ ๋ฐ์ดํฐ ํต์ ์ ๊ทธ ์๋ฒ์ API๋ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ณ๋์ CI/CD (์ง์์ ์ธ ํตํฉ, ํ ์คํธ, ๋ฐฐํฌ)๋ฅผ ์ ๊ณตํ๊ณ , ์ด ํ๋ฆ์ ์๋ํ ํฉ๋๋ค.
- ๋ชจ๋ํฐ๋ง, ์ง๋จ(์์นํ) ์์คํ ์ด ๋ณ๋๋ก ์กด์ฌํฉ๋๋ค.
- ๊ตฌํ ๊ธฐ์ , Backing Service๋ ํต์ฌ ๋ก์ง๊ณผ ๋ถ๋ฆฌ๋์ด ๊ฐ์๋ผ์ธ ์ ์์ต๋๋ค.
- ๊ฐ๊ฐ์ ์๋ฒ๋ ๋ค๋ฅธ ์๋ฒ์ ์์กด์ฑ์ด ์์ต๋๋ค. ์ฆ ํ์ํ ์๋ฒ๋ง ๊ณจ๋ผ ์๋ก์ด ์๋น์ค๋ฅผ ๋ง๋ค ์๋ ์์ต๋๋ค.
์ด๋ฐ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ถํ๋๋ฐ์ ์ฌ์ฉ๋๋ ๊ธฐ์ ์ ์๋์ ๊ฐ์ต๋๋ค. (*2017๋ ๊ธฐ์ค)
๐ญ MSA์ ์ฌ์ฉ๋๋ ํจํด๋ค
๊ธฐ์กด์ ๋จ์ผ ํ๋ก์ ํธ(Monolithic)์์๋ ํธ๋์ญ์
์ฒ๋ฆฌ๊ฐ ๊ฐ๋จํ๋ค. ํ์ํ๋ค๋ฉด DB์ ์ง์ ์ ๊ทผํ ์๋ ์๋ค.
MSA (MicroService)๋ ๊ฐ ์๋น์ค๊ฐ์ ์์กด์ฑ์ด ์์ด์ ํธ๋์ญ์ ์ ์ฝ๊ฒ ๊ฑธ ์ ์๋ค. ์ต์ง๋ก ๊ฑธ์ด๋ rollback์ด ๊น๋ค๋กญ๋ค.
์๋น์ค๋ ๋ ๋ฆฝ์ ์ธ DB๋ฅผ ๊ฐ์ง๋ฉฐ, ํ์ํ๋ค๋ฉด ํด๋น ์๋น์ค์ ์ธํฐํ์ด์ค(API)๋ฅผ ํตํด ๋ฐ์์์ผํ๋ค.
๐ ๋ฐฉ๋ฒ1) Event Driven์ ํตํ ํธ๋์ญ์ ์ฒ๋ฆฌ
๊ฐ ์๋น์ค๋ ์ด๋ฒคํธ ํ๋ฅผ ํตํด, ์ผ์ ์๊ฐ๋ง๋ค ์ด๋ฒคํธ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ๋ณธ์ธ์ด ์ฒ๋ฆฌ๊ฐ๋ฅํ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ธ์จ๋ค.
๊ฐ ์๋น์ค์์ ํ ์ผ์ ๋ง์น๊ณ , ์ด๋ฒคํธ ํ์ ๋ฉ์์ง(=์ด๋ฒคํธ)๋ฅผ ์ ์กํ๋ค.
- ์ฃผ๋ฌธ์ ํ์ ๋, ์ฃผ๋ฌธ์ ๋ณด๋ฅผ ์์ฑํ๊ณ ๋ค๋ฅธ ์๋น์ค์ ํ์ํ ์ ๋ณด๋ฅผ ๋ฃ์ [์ฃผ๋ฌธ ์์ฑ๋จ ์ด๋ฒคํธ]๋ฅผ ๋ฐํํ๋ค.
- [์ฃผ๋ฌธ ์์ฑ๋จ ์ด๋ฒคํธ]๋ฅผ ์ฒ๋ฆฌํ๋ ์๋น์ค๋ค์, ๋ฉ์์ง ํ์์ ํด๋น ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ๊ฐ ์๋น์ค์์ ํ ์ผ์ ๋ง์น๊ณ , ๋ค์ ์์ ์ด ํ์ํ๋ค๋ฉด [๋ค๋ฅธ ์ด๋ฒคํธ]๋ฅผ ๋ฐํ์์ผ์ ์ฒ๋ฆฌํ๋ค.
์ด๋ฐ ์์ผ๋ก ํธ๋์ญ์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ Commit Transcation์ด๋ผ ๋ถ๋ฅธ๋ค.
๋ง์ฝ ํ ์๋น์ค์์ ์ฒ๋ฆฌ๋ฅผ ์คํจํ๋ค๋ฉด, ๋๊ฐ์ด [์คํจ ์ด๋ฒคํธ]๋ฅผ ๋ฐ์์์ผ์ ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
์ ํํ ๋งํด ๋กค๋ฐฑ์ด๋ผ๊ธฐ๋ณด๋จ, ์ผ๋จ ์คํํ ๋ค ์คํจํ๋ฉด ์ ์ฒด ์๋น์ค์ ๋ณด์ํธ๋์ญ์
์ ๋ฐ์์ํค๋ ๋ฐฉ๋ฒ.
๐ ๋ฐฉ๋ฒ2) Event Sourcing
์ด๋ฒคํธ๋ก ๋ฐ์ดํฐ์ ๋ง์ง๋ง ์ํ๋ง ์ ๋ฌํ๋๊ฒ ์๋๋ผ, ์ํ๋ ์ ์ฒด ์ด๋ ฅ์ ๊ธฐ๋กํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ณ๋์ ์
๋ฐ์ดํธ ์์ด ์๋ก์ด ์ด๋ฒคํธ๋ฅผ ๊ณ์ ์ถ๊ฐํ๋ฉด ๋๋๊ฑฐ๋ผ, ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ฝ๋ค.
์ด๋ฒคํธ ๋๋ฆฌ๋ธ์ ๊ฐ์ฅ ํฐ ๋จ์ ์, ์ด๋ฒคํธ ์ฌ๋ฐํ ์ฒ๋ฆฌ + ์ค๋ณต ๋ฐํ๋์์ ๋ ์ฒ๋ฆฌ๊ฐ ๋ณต์กํ๋ค๋ ์ ์ด๋ค. ์ด๋ฒคํธ ์์ฑ์ ์ค๋ณต ๋ฐ์๋์ด๋ ๋ณ ์๊ด์์. ์ ์ฒด๋ฅผ ๊ธฐ๋กํ๋๊ฑฐ๋ผ
๋ฌผ๋ก ์ด๋ฒคํธ ๋๋ฆฌ๋ธ์ ๋นํด ์๋์ ๊ฐ์ ๋จ์ ์ด ์๋ค.
- ๐งจ๊ฐ ๋ฐ์ดํฐ์ ์ด๋ฒคํธ ๊ธฐ๋ก์ด ๋๋ฌด ๊ธธ์ด์ง๋ค. ์๋ฅผ ๋ค์ด ํธ๋์ญ์
์ ๋ณต์ํ ๋, ๊ฐ ์ด๋ฒคํธ๋ฅผ ์ ๋ถ ๋กค๋ฐฑํด์ผํ๋ค.
-> ์ด๋ ์ค๋ ์ท์ผ๋ก ๋๋ ์ ์ผ์ ๋ถ๋ถ๊น์ง๋ง ๊ธฐ๋กํ๋ฉด ์ด๋์ ๋ ํด๊ฒฐ๋๋ค. - ๐งจ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋๊ฑด ๊ด์ฐฎ์ง๋ง, ์์ญ๋ง ๊ฑด์ด ๋ฐ์ํ๋ ์กฐํ์ฑ ๋ฐ์ดํฐ์๋ ๋ต์ด ์์. ์ด๋ฒคํธ ๊ธฐ๋ก์ด ๋๋ฌด ๋ณต์กํด์ง
-> CQRS๋ก ํด๊ฒฐ๊ฐ๋ฅ. ์กฐํ์ ์ฐ๊ธฐ๋ฅผ ๋๋ ์ ์ฌ์ฉํ์
- ๐งจ์ด๋ฒคํธ๋ ์๊ตฌ์ ์ฅ๋๋ฏ๋ก, ๊ธฐ์กด์ ์
๋ ฅ ํ์์ ๋ฐ๊พธ๊ธฐ๊ฐ ์ด๋ ค์.
-> ๊ฐ ์ด๋ฒคํธ์ ๋ฒ์ ๊ฐ์ ๋๊ณ , ์ด๋ฒคํธ ์์ฑ ํ๋ ์์ํฌ๋ฅผ ํตํด์ ๊ด๋ฆฌํ๋ฉด ์ด๋์ ๋ ํด๊ฒฐ๊ฐ๋ฅ. - ๐งจ ๊ธฐ์กด ํธ๋์ญ์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ๊ฐ๋จํ๋ฐ, MSA + ์ด๋ฒคํธ์์ฑ ๋ฐฐ์์ ํ๋ ค๊ณ ํ๋ ๋๋ฌด ํ๋ก์ ํธ๊ฐ ๋ณต์กํด์ง-> ์ด๊ฑด.. ๋จ์ ์ด ๋ง๋ค. ํ์ต์ ๋ํ ๋ฌ๋์ปค๋ธ๋ ๋์ ํธ.
์ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ 1๊ฐ ์ผ ๋ CQRS + Kafka๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ถฉ ์๋์ ๊ฐ์ ์ํคํ ์ฒ๊ฐ ๋์จ๋ค.
๐ Saga Pattern
์ ์ด๋ฒคํธ ์์ฑ์์ ํน์ ์๋ฒ๊ฐ ์ฃฝ์๋ค๊ฑฐ๋, ์ฒ๋ฆฌ์ ์คํจํ ๊ฒฝ์ฐ ๋กค๋ฐฑ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.
์ด ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ์ํด Saga Pattern์ ๋ง์ด ์ฌ์ฉํ๋ค.
'Saga'๋ผ๋ ๋จ์ด๋ ์์ด๋ก ์ด๋ค ์์
์ ๊ธด ๋ชจํ๋ด์ ์๋ฏธํ๋ค.
Saga Pattern์ ๋น๋๊ธฐ ๋ฉ์์ง์ ์ด์ฉํด ์ ์ฒด ํธ๋์ญ์
์์ด, ๋ก์ปฌ ํธ๋์ญ์
๋ง์ผ๋ก ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ฌผ๋ก ๋ ์๋น์ค๋ฅผ ํ ํธ๋์ญ์ ์ฒ๋ผ ๋ฌถ์ด ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ(2PC, 2 Phase Commit)๋ ์๊ฒ ์ง๋ง, ์ฑ๋ฅ์ด ๋งค์ฐ ๊ตฌ๋ ค์ง๋ค.
์์ฃผ ์ฌ์ฉํ๋ Saga ํจํด์ ํฌ๊ฒ 2๊ฐ์ง๊ฐ ์๋ค.
Choreography-based Saga (์๋ฌด ์ค์ฌ์ ์ฌ๊ฐํจํด)
*Choreography๋ ์๋ฌด, ๋ฌด๋, ๋ชธ๋์ ์ด๋ฐ ์๋ฏธ
์ ์ฒด๋ฅผ ์งํํ๋ ์๋น์ค๊ฐ ์๊ณ , ์๋ก ์ด๋ฒคํธ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ์ํตํฉ๋๋ค. (= ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์ค์ฌ์ด ๋จ)
์ฝ๋ ์ค๊ทธ๋ํผ ์ฌ๊ฐ ํจํด ์๋๋ฆฌ์ค
์๋น์ค ๋ชฉ๋ก : (์ฃผ๋ฌธ) (๊ณ ๊ฐ) (์ํ๊ด) (ํ๊ณ)
1. ์ฃผ๋ฌธ ์๋น์ค๊ฐ [Pending] ์ํ๊ฐ ๋๊ณ , [๐จ์ฃผ๋ฌธ ์์ฑ ์ด๋ฒคํธ]๋ฅผ ๋ฐํํฉ๋๋ค.
2. ๊ณ ๊ฐ ์๋น์ค๊ฐ [๐จ์ฃผ๋ฌธ ์์ฑ ์ด๋ฒคํธ]๋ฅผ ์์ , ์๋น์ ๊ฒ์ฆ ํ [โ ์๋น์ ํ์ธ ์ด๋ฒคํธ]๋ฅผ ๋ฐํํฉ๋๋ค.
2. ํ๊ณ ์๋น์ค๊ฐ [๐จ์ฃผ๋ฌธ ์์ฑ ์ด๋ฒคํธ]๋ฅผ ์์ , ์ ์ฉ์นด๋ ์น์ธ์ [Pending]์ผ๋ก ์์ฑํฉ๋๋ค.
2. ์ํ๊ด ์๋น์ค๊ฐ [๐จ์ฃผ๋ฌธ ์์ฑ ์ด๋ฒคํธ]๋ฅผ ์์ , ์ฃผ๋ฌธ ๋ด์ญ์ ํ์ธํ๊ณ ํฐ์ผ์ [Create_Peding]์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ [โ ํฐ์ผ ์์ฑ๋จ] ์ด๋ฒคํธ๋ฅผ ๋ฐํํฉ๋๋ค.
3. ํ๊ณ ์๋น์ค๊ฐ [โ ํฐ์ผ ์์ฑ๋จ] ์ด๋ฒคํธ๋ฅผ ์์ , ์ ์ฉ์นด๋๋ฅผ ๊ณผ๊ธํ๊ณ [๐ง์ ์ฉ์นด๋ ์น์ธ๋จ] ์ ๋ฐํํฉ๋๋ค.
3. ์ํ๊ด ์๋น์ค๊ฐ [๐ง ์ ์ฉ์นด๋ ์น์ธ๋จ] ์ด๋ฒคํธ๋ฅผ ์์ , ํฐ์ผ ์ํ๋ฅผ [Awaiting_Accept]๋ก ๋ณ๊ฒฝํฉ๋๋ค.
3. ์ฃผ๋ฌธ ์๋น์ค๊ฐ [๐ง ์ ์ฉ์นด๋ ์น์ธ๋จ] ์ด๋ฒคํธ๋ฅผ ์์ , ์ฃผ๋ฌธ ์ํ๋ฅผ [Approve]๋ก ๋ณ๊ฒฝํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ [์ฃผ๋ฌธ ์น์ธ๋จ] ์ด๋ฒคํธ๋ฅผ ๋ฐํํฉ๋๋ค.
4. ์ดํ [์ฃผ๋ฌธ ์น์ธ๋จ] ์ ๊ตฌ๋ ํ๋ ์๋น์ค๊ฐ ์ด๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํฉ๋๋ค.
์ฐธ๊ณ ๋ก ์ค๊ฐ์ ์คํจํ๋ฉด, [์ฃผ๋ฌธ ์คํจ ์ด๋ฒคํธ] ๊ฐ์ ๊ฑธ ๋ฐํ์์ผ ๊ฐ๊ฐ์ ์๋น์ค๊ฐ ๋ณด์ ํธ๋์ญ์ ์ ์คํํฉ๋๋ค.
Orchestration-based Saga (์ค์ผ์คํธ๋ ์ด์ , ์งํ ์ค์ฌ์ ์ฌ๊ฐํจํด)
์ ์ฒด๋ฅผ ์งํํ๋ ์๋น์ค๊ฐ ์กด์ฌํฉ๋๋ค. (= ํน์ ์๋น์ค๊ฐ ์ค์ฌ์ด๋จ)
์๋น์ค ๋ชฉ๋ก : (์ฃผ๋ฌธ) (๊ณ ๊ฐ) (์ํ๊ด) (ํ๊ณ)
์ค์ผ์คํธ๋ ์ด์ ๋ด๋น : ์ฃผ๋ฌธ ์๋น์ค
1. ์ฃผ๋ฌธ ์๋น์ค๋ ๐Saga ์ค์ผ์คํธ๋ ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ฅผ ์ด์ฉํด ๊ฐ ์๋น์ค์ ๋น๋๊ธฐ๋ก ์๋ต์ ํฉ๋๋ค.
2. ๐Saga ๋ [์๋น์ ํ์ธ ์ปค๋งจ๋]๋ฅผ ์๋น์ ์๋น์ค์๊ฒ ์ ์กํฉ๋๋ค.
3. ์๋น์ ์๋น์ค๋ ์๋น์๋ฅผ ํ์ธํ๊ณ , [์๋น์ ํ์ธ ๋ฉ์์ง]๋ฅผ ์๋ตํฉ๋๋ค.
2. ๐Saga ๋ [ํฐ์ผ ์์ฑ ์ปค๋งจ๋]๋ฅผ ์ํ๊ด ์๋น์ค์ ์ ์กํฉ๋๋ค.
3. ์ํ๊ด ์๋น์ค๋ ํฐ์ผ์ ์์ฑํ๊ณ , [ํฐ์ผ ์์ฑ ๋ฉ์์ง]๋ฅผ ์๋ตํฉ๋๋ค.
2. ๐Saga ๋ [์ ์ฉ์นด๋ ์น์ธ ์ปค๋งจ๋]๋ฅผ ํ๊ณ ์๋น์ค์ ์ ์กํฉ๋๋ค.
3. ํ๊ณ ์๋น์ค๋ ์ ์ฉ์นด๋ ๊ฒฐ์ ํ, [์ ์ฉ์นด๋ ์น์ธ๋จ ๋ฉ์์ง]๋ฅผ ์๋ตํฉ๋๋ค.
4. ๐Saga ๋ [ํฐ์ผ ์น์ธ ์ปค๋งจ๋]๋ฅผ ์ํ๊ด ์๋น์ค์ ์ ์กํฉ๋๋ค.
4. ๐Saga ๋ [์ฃผ๋ฌธ ์น์ธ ์ปค๋งจ๋]๋ฅผ ์ฃผ๋ฌธ ์๋น์ค์ ์ ์กํฉ๋๋ค.
๐ ์ฝ๋ ์ค๊ทธ๋ํผ Saga vs ์ค์ผ์คํธ๋ ์ด์ Saga
์ฝ๋ ์ค ๊ทธ๋ํผ๋ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋
/๋ฐํํ ๋ฟ, ์๋ก๋ฅผ ์์ง ๋ชปํ๋ค.
- ๊ฐ ์๋น์ค์ ์ฒ๋ฆฌ๊ฐ ๋จ์ํ๊ณ , ์ ์ฒด ์๋น์ค๊ฐ์ ๊ฒฐํฉ์ด ๋์จํด์ง๋ค.
- ์๋น์ค๊ฐ ์์กด๊ด๊ณ๊ฐ ๋ณต์กํด์ ์ ์ฒด ํ๋ฆ์ ํ๋์ ๋ณด๊ธฐ์ด๋ ต๋ค. ์ฆ ์ดํด๊ฐ ์ด๋ ต๋ค.
์ฌ๋ฌ ์์ ์ด ์์ ๊ฒฝ์ฐ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณต์กํด์ง ์์๋ค. Pending -> Ready -> Approval Ready -> Approved๋ฑ - ์ํ์ฐธ์กฐ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๊ณ , ๋ชจ๋ ์๋น์ค๋ฅผ ๊ตฌ๋ ํด์ผํ๋ค. (ex ํ๊ณ์๋น์ค์ ๊ฒฝ์ฐ ์ ์ฒด์ด๋ฒคํธ๋ฅผ ๋ฐ๋๋ค. ๊ฒฐํฉ๋ ๋์)
์ค์ผ์คํธ๋ ์ด์ ์ ์ค์ฌ ์งํ๋ฅผ ๋ง๋ ์๋น์ค๊ฐ ๋ณ๋๋ก ์กด์ฌํ๋ค.
- ์ค์ฌ ์๋น์ค๊ฐ ์์ด์, ๊ฐ ์๋น์ค๊ฐ์ ์์กด ๊ด๊ณ๊ฐ ๊น๋ํด์ง๋ค.
- ์ค์ฌ ์๋น์ค๊ฐ ์ ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก, ๊ฐ ์๋น์ค๊ฐ ๊ฒฐํฉ๋๊ฐ ๋ฎ๋ค.
- ์ ์ฒด ์ด๋ฒคํธ๋ฅผ ์ ํ์๊ฐ ์๋ค. ๊ทธ๋ฅ ์ค์ฌ์๋น์ค๊ฐ ๋ณด๋ด๋ ๊ฑธ ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
- ์ค์ฌ ์๋น์ค๊ฐ ์์ด์ ์ค๊ฐ ์ํ(Pending -> Ready -> Approvel)๊ฐ ๋ฑํ ํ์์๋ค. ๋น์ฆ๋์ค ๋ก์ง์ด ๋จ์ํด์ง๋ค.
Pending์ผ๋ก ์์ฑํ๊ณ , ์ฒ๋ฆฌ์๋ฃ๋๋ฉด Approved ๋ก ๋ฐ๊พธ๋ฉด ๋๋ค. ์ค๊ฐ์ Ready ๊ฐ์ ๊ฑธ ๋ผ์๋ฃ์ ํ์๊ฐ ์๋ค.
๊ทธ๋์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ค์ผ์คํธ๋ ์ด์ ๋ฐฉ์์ ๊ถ์ฅํ๋ค.
ํ์ง๋ง ๋์ถฉ ๋ง๋ค๊ฒฝ์ฐ, ์ค์ผ์คํธ๋ ์ด์
์๋น์ค์ ๋ชจ๋ ๋ก์ง์ด ๋ค์ด์๊ณ ๋๋จธ์ง๋ ๊นกํต ์๋น์ค๊ฐ ๋ ์ ์๋ค.
์ด๋ ๊ฒ Saga๋ฅผ ์ต์ง๋ก ๊ตฌํํ๋ ๊ฑฐ๋ณด๋ค, ์ฐจ๋ผ๋ฆฌ ๋ชจ๋๋ฆฌ์ค ๋ฐฉ์์ ๋จ์ผ ํ๋ก์ ํธ๊ฐ ๋ ๋์ ์ ์๋ค.
์ค์ผ์คํธ๋ ์ด์ ์๋น์ค๋ ๊ฐ๊ธ์ ์ ์ฒด ์์ ์ ์์ํ๋ง ๋ด๋นํ๊ณ , ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ์ง๊ณ ์์ง ์๋๊ฒ ์ข๋ค.
๐ ๋ ํผ๋ฐ์ค
์ธํ๋ฐ - Spring Cloud๋ก ๊ฐ๋ฐํ๋ ๋ง์ดํฌ๋ก์๋น์ค ์ ํ๋ฆฌ์ผ์ด์ (MSA)
https://www.gartner.com/en/blog
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev