๐ฅ ๋ค์ด๊ฐ๋ฉฐ
ํด๋ผ์ฐ๋๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ณ ๋ คํ ๋, ๋จ์ํ ์๋ฒ์ ๋ฐ์ดํฐ๋ง ์ด์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ฅผ ์ต์ ํํ๋ ๊ฒ๋ ์ค์ํฉ๋๋ค.
ํนํ ๊ธฐ์กด ๋ชจ๋๋ฆฌ์(Monolithic) ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ๋ ์ ์ฐํ๊ฒ ์ด์ํ๋ ค๋ฉด,
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ(Microservices Architecture)๋ก ์ ํํ๋ ๊ณผ์ ์ ๊ณ ๋ฏผํด์ผ ํฉ๋๋ค.
์ด๋ฒ ๊ธ์์๋ ๋ชจ๋๋ฆฌ์ vs. ๋ง์ดํฌ๋ก์๋น์ค ๊ตฌ์กฐ ๋น๊ต,
๊ทธ๋ฆฌ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ง์ด๊ทธ๋ ์ด์ ํจํด๊ณผ ์ ์ฉ ์ ๋ต์ ์๊ฐํ๊ฒ ์ต๋๋ค.
๐ ๋ชจ๋๋ฆฌ์ vs. ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ ๋น๊ต
ํด๋ผ์ฐ๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ์ ์์ ๊ฐ์ฅ ํฐ ๋ณํ ์ค ํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ์ ๋ณํ์ ๋๋ค.
๊ธฐ์กด ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์์ ์ด์๋๋ ๋ชจ๋๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋ผ์ฐ๋ ์นํ์ ์ผ๋ก ์ ํํ ๋ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ์์ฃผ ๋ ผ์๋ฉ๋๋ค.
ํญ๋ชฉ | ๋ชจ๋๋ฆฌ์(Monolithic) | ๋ง์ดํฌ๋ก์๋น์ค(Microservices) |
๊ตฌ์กฐ | ํ๋์ ์ฝ๋๋ฒ ์ด์ค, ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ | ๋ ๋ฆฝ์ ์ธ ์์ ์๋น์ค๋ค์ ์กฐํฉ |
๋ฐฐํฌ ๋ฐฉ์ | ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ๋ฒ์ ๋ฐฐํฌ | ๊ฐ๋ณ ์๋น์ค ๋จ์๋ก ๋ฐฐํฌ ๊ฐ๋ฅ |
ํ์ฅ์ฑ | ์์ง ํ์ฅ(Scale-up) ์ค์ฌ | ์ํ ํ์ฅ(Scale-out) ๊ฐ๋ฅ |
์์กด์ฑ | ์๋น์ค ๊ฐ ๊ฐํ ๊ฒฐํฉ(Tightly Coupled) | ์๋น์ค ๊ฐ ๋์จํ ๊ฒฐํฉ(Loosely Coupled) |
์ฅ์ | ๊ฐ๋ฐ ๋ฐ ํ ์คํธ ์ฉ์ด, ๋จ์ํ ์ด์ ๋ฐฉ์ | ์ ์ฐํ ํ์ฅ์ฑ, ๋ ๋ฆฝ์ ์ธ ๋ฐฐํฌ ๊ฐ๋ฅ |
๋จ์ | ํ์ฅ ๋ฐ ์ ์ง๋ณด์ ์ด๋ ค์, ์ฅ์ ๋ฐ์ ์ ์ ์ฒด ์์คํ ์ํฅ | ์ด๊ธฐ ์ค๊ณ ๋ฐ ์ด์ ๋ณต์ก๋ ์ฆ๊ฐ |
๐ก ํต์ฌ ์ฐจ์ด์ :
โ ๋ชจ๋๋ฆฌ์์ ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ด์๋๋ฉฐ ์ ์ง๋ณด์๊ฐ ์ฝ์ง๋ง, ํ์ฅ์ด ์ด๋ ต๋ค.
โ ๋ง์ดํฌ๋ก์๋น์ค๋ ๋ ๋ฆฝ์ ์ธ ์๋น์ค ๋จ์๋ก ์ด์๋๋ฉฐ ํ์ฅ์ฑ์ด ๋ฐ์ด๋์ง๋ง, ๊ด๋ฆฌ๊ฐ ๋ณต์กํ๋ค.
1๏ธโฃ ๋ชจ๋๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋ผ์ฐ๋๋ก ์ด์ ํ๋ ๋ฐฉ๋ฒ
๊ธฐ์กด ๋ชจ๋๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋ผ์ฐ๋๋ก ์ด์ ํ ๋๋ ์ผ๋ฐ์ ์ผ๋ก 3๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ ๊ณ ๋ คํ ์ ์์ต๋๋ค.
โ 1. ๋ฆฌํธ์คํ (Rehosting, Lift & Shift)
โข ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์์ด ๊ทธ๋๋ก ํด๋ผ์ฐ๋๋ก ์ด์
โข ๊ฐ์๋จธ์ ๋๋ ์ปจํ ์ด๋๋ฅผ ํ์ฉํ์ฌ ๋ฐฐํฌ
โข ๋น ๋ฅด๊ฒ ํด๋ผ์ฐ๋๋ก ์ด์ ๊ฐ๋ฅํ์ง๋ง, ์ฅ๊ธฐ์ ์ธ ์ต์ ํ๋ ๋ถ์กฑ
๐ก ์ ์ฉ ์:
โข ๋ ๊ฑฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋ผ์ฐ๋์์ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ
โข ๊ธด๊ธํ๊ฒ ํด๋ผ์ฐ๋๋ก ์ด์ ํด์ผ ํ๋ ํ๋ก์ ํธ
โ 2. ๋ฆฌํฉํ ๋ง (Refactoring, Replatforming)
โข ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ถ๋ฅผ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ๋ฐฉ์์ผ๋ก ๊ฐ์
โข ๊ธฐ์กด ๋ชจ๋๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ฉด์ ์ปจํ ์ด๋, PaaS ์๋น์ค ํ์ฉ
โข ์ ์ง์ ์ธ ์ ํ์ด ๊ฐ๋ฅํ๋ฉฐ, ํด๋ผ์ฐ๋ ์ต์ ํ ๊ฐ๋ฅ
๐ก ์ ์ฉ ์:
โข ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋(Docker, Kubernetes) ๊ธฐ๋ฐ์ผ๋ก ์ ํ
โข ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํด๋ผ์ฐ๋ ๊ด๋ฆฌํ DB ์๋น์ค๋ก ์ด์
โ 3. ๋ฆฌ์ํคํ ํ (Rearchitecting, Microservices Transformation)
โข ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ํ ๋ง์ดํฌ๋ก์๋น์ค๋ก ์ฌ์ค๊ณ
โข ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ API ๊ธฐ๋ฐ ํต์ ๋ฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๊ตฌ์กฐ ์ ์ฉ
โข ์ด๊ธฐ ๊ตฌ์ถ ๋น์ฉ์ด ๋์ง๋ง, ์ฅ๊ธฐ์ ์ผ๋ก ์ด์ ๋ฐ ํ์ฅ์ฑ์ด ๋ฐ์ด๋จ
๐ก ์ ์ฉ ์:
โข ๋์ ํธ๋ํฝ์ ์ฒ๋ฆฌํด์ผ ํ๋ ์๋น์ค
โข DevOps, CI/CD๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๋ ์กฐ์ง
2๏ธโฃ ๋ชจ๋๋ฆฌ์ โ ๋ง์ดํฌ๋ก์๋น์ค ์ ํ ์ ๋ต
๋ชจ๋๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง์ดํฌ๋ก์๋น์ค๋ก ์ ํํ ๋ ์ ์ง์ ์ ๊ทผ ๋ฐฉ์์ด ์ค์ํฉ๋๋ค.
ํ ๋ฒ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋ณํํ๋ ๊ฒ์ ๋ฆฌ์คํฌ๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ ๋๋ค.
โ 1. Strangler Fig ํจํด (๋จ๊ณ๋ณ ์ ํ)
โข ๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ถ ๊ธฐ๋ฅ๋ถํฐ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋ณํ
โข API Gateway๋ฅผ ํ์ฉํ์ฌ ํธ๋ํฝ์ ์ ์ง์ ์ผ๋ก ์๋ก์ด ์๋น์ค๋ก ์ด๋
โข ๋ฆฌ์คํฌ๋ฅผ ์ค์ด๋ฉด์ ์์ ํ๊ฒ ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ๋ฅ
๐ก ์ ์ฉ ์:
โข ๊ธฐ์กด ์ฌ์ฉ์ ์ธ์ฆ ๊ธฐ๋ฅ์ ๋ณ๋ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋ถ๋ฆฌ
โข ์ผ๋ถ ๊ธฐ๋ฅ์ ์๋ฒ๋ฆฌ์ค(Serverless)๋ก ์ ํ
โ 2. ์๋น์ค ๋ถํ (Decomposition by Business Capability)
โข ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น์ฆ๋์ค ๋๋ฉ์ธ๋ณ๋ก ๋ถ๋ฆฌํ์ฌ ๋ง์ดํฌ๋ก์๋น์ค๋ก ์ ํ
โข ์๋ฅผ ๋ค์ด ์ฃผ๋ฌธ ์๋น์ค, ๊ฒฐ์ ์๋น์ค, ๊ณ ๊ฐ ์๋น์ค ๋ฑ์ ๊ฐ๋ณ์ ์ผ๋ก ๋ถ๋ฆฌ
๐ก ์ ์ฉ ์:
โข ์ ์์๊ฑฐ๋ ์ฌ์ดํธ์์ ์ํ ๊ด๋ฆฌ, ์ฃผ๋ฌธ ๊ด๋ฆฌ, ๋ฐฐ์ก ๊ด๋ฆฌ ์๋น์ค๋ฅผ ๊ฐ๊ฐ ๋ถ๋ฆฌ
โ 3. ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ (Event-Driven Architecture)
โข ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น๋๊ธฐ ํต์ ์ ์ํ
โข ๋ฉ์์ง ๋ธ๋ก์ปค(Kafka, RabbitMQ ๋ฑ)๋ฅผ ํ์ฉํ์ฌ ์๋น์ค ๊ฐ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถค
๐ก ์ ์ฉ ์:
โข ์ฃผ๋ฌธ์ด ์๋ฃ๋๋ฉด **โ์ฃผ๋ฌธ ์์ฑ ์ด๋ฒคํธ(Order Created Event)โ**๋ฅผ ๋ฐํํ๊ณ , ๊ฒฐ์ ์๋น์ค์์ ์ด๋ฅผ ์ฒ๋ฆฌ
3๏ธโฃ ๋ง์ดํฌ๋ก์๋น์ค ์ ํ ์ ๊ณ ๋ คํด์ผ ํ ์์
๋ง์ดํฌ๋ก์๋น์ค๋ก ์ ํํ๋ฉด ์ด์ ๋ฐฉ์์ด ๊ธฐ์กด๊ณผ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๋ช ๊ฐ์ง ๊ณ ๋ คํด์ผ ํ ์ฌํญ์ด ์์ต๋๋ค.
โ 1. API ๊ฒ์ดํธ์จ์ด ์ ์ฉ
โข ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ๊ฐ๋ณ์ ์ผ๋ก API๋ฅผ ์ ๊ณตํ๋ฏ๋ก, API Gateway๋ฅผ ํตํด ๊ด๋ฆฌ
โข ์ธ์ฆ, ๋ก๊น , ํธ๋ํฝ ์ ์ด ๋ฑ์ ๊ธฐ๋ฅ์ ์ค์์์ ์ํ ๊ฐ๋ฅ
โ 2. ๋ฐ์ดํฐ ๋ถ๋ฆฌ ๋ฐ ๊ด๋ฆฌ
โข ๊ธฐ์กด ๋ชจ๋๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ณต์ ํ์ง๋ง,
๋ง์ดํฌ๋ก์๋น์ค๋ ๊ฐ ์๋น์ค๋ณ๋ก ๋ ๋ฆฝ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ๊ฐ์ง ์ ์์
โข CQRS(Command Query Responsibility Segregation) ํจํด์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ ์กฐํ/์์ ์ ๋ถ๋ฆฌ
โ 3. CI/CD ๋ฐ DevOps ํ๋ก์ธ์ค ์ ์ฉ
โข ๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์๋ ๊ฐ ์๋น์ค๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๋๋ฏ๋ก
CI/CD(Continuous Integration & Deployment) ์๋ํ๊ฐ ํ์
๐ก ์ถ์ฒ ํด:
โ CI/CD: Jenkins, GitHub Actions, ArgoCD
โ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ : Kubernetes, Docker Swarm
๐ Summary
โ ๊ธฐ์กด ๋ชจ๋๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋ผ์ฐ๋๋ก ์ด์ ํ ๋ ๋ฆฌํธ์คํ , ๋ฆฌํฉํ ๋ง, ๋ฆฌ์ํคํ ํ ์ค ์ ํ ๊ฐ๋ฅ
โ ๋ง์ดํฌ๋ก์๋น์ค๋ก ์ ํํ ๊ฒฝ์ฐ Strangler Fig ํจํด, ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ํ์ฉํ์ฌ ์ ์ง์ ์ ํ ํ์
โ API Gateway, ๋ฐ์ดํฐ ๋ถ๋ฆฌ, CI/CD ์๋ํ ๋ฑ ์ด์ ์ต์ ํ ์ ๋ต์ด ํ์