๊ตญ๋ฏผ๋ํ๊ต์์ "ํด๋ผ์ฐ๋ ์ปดํจํ " ๊ต๊ณผ๋ชฉ์ ์งํํ์๋
์ด๊ฒฝ์ฉ ๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค
Monolithic Application and Microservice Application
Monolithic application
- ํ๋์ ์๋ฒ์์ ๋ค๋ฅธ ๋ชฉ์ ์ ๊ฐ์ง๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์
- ์๋ฒ์ ์ฉ๋์ด ์ปค์ผ ํ ํ์๊ฐ ์์ (์๋น์ค ์ข
๋ฅ์ ํ์ฅ ๋ณด์ฅ)
- Scale-up ์ ๊ทผ์ด ์ ๋นํ ๊ฒฝ์ฐ๊ฐ ๋ง์
=> ํ๋์ ์๋ฒ์์ ๋์ํ๋ฏ๋ก - Scale-out์ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ ๋ง์
=> ์ผ๋ถ์ ๋ชจ๋์ด ์ํํ์ฅ์ ์ง์ํ์ง ์์ ๊ฒฝ์ฐ (ex. ๋ฐ์ดํฐ๋ฒ ์ด์ค)
๋ฐ์ดํฐ ์ผ๊ด์ฑ, ๋ฌด๊ฒฐ์ฑ, ํธ๋์ญ์ ์ฒ๋ฆฌ(ACID ๊ท์น) ๋ฑ์ด ์ผ๋ฐ์ ์ธ RDBMS์์ ๋งค์ฐ ์ค์ํ ์์๋ก ์์ฉํ๊ธฐ ๋๋ฌธ์
DB๋ ๋ณธ์ง์ ์ผ๋ก๋ Scale-out (์ํ ํ์ฅ)์ด ์ด๋ ค์ด ๊ฒฝ์ฐ๊ฐ ๋ง์
ํ์ง๋ง, ์์ ๋ถ๊ฐ๋ฅํ๊ฑด ์๋๊ณ ํน์ ๊ธฐ์ ์ด๋ ํจํด์ผ๋ก ์ ํ์ ์ธ ์ํ ํ์ฅ์ด ๊ฐ๋ฅํจ (Read Replica, NoSQL, Sharding ๋ฑ)
Microservice-based application
- ๋ง์ดํฌ๋ก์๋น์ค๋ ๋
๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๊ฐ๋ฅํด์ผ ํ๋ฉฐ, static ํ ์ธ๋ถ API ์ ๊ณต
(Monolithic์ ๊ฒฝ์ฐ ๋ด๋ถ์ ์ผ๋ก ๋ชจ๋ ๊ธฐ๋ฅ์ด tightly-coupled ์ด๋ฏ๋ก ํ๋์ ๋ชจ๋ ๋ณ๊ฒฝ์ด ์ ์ฒด API์ ๋์์ ์ํฅ ๋ฏธ์น ์ ์์) - ๋ณต์กํ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ํ๋์ ์๋น์ค๋ก ๋ด์ฌ๋์ด ์๋ monolithic ์์คํ
์ ์ฌ๋ฌ๊ฐ์ ๋
๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ ํ ๋ฐฐํฌ
- ์ฌ๋ฌ ์ปดํฌ๋ํธ ๊ฐ ํต์ ํ๋กํ ์ฝ ์ ์ ํ์ (HTTP REST API, gRPC ๋ฑ)
Microservice ๊ตฌ์กฐ์ ์ฅ๋จ์
์ฅ์
๊ณ ๊ฐ์ฉ์ฑ ์์คํ ๊ตฌ์ฑ
- ํ์ฅ์ด ํ์ํ ์๋น์ค์ ๋ํด์๋ง ํ์ฅ ๊ฐ๋ฅ
(๋ค๋ฅธ ์๋น์ค๊น์ง ๋ถํ์ํ ํ์ฅ ํ์ ์์) - ํ์์ ๋ฐ๋ผ ํน์ ์๋น์ค๋ง ์ฌ๋ฌ ์๋ฒ์ ๋ณต์ ๋์ด ์์ ์ฑ์ ๋์ฌ์ค ์ ์์
์ข ์ ์ํํธ์จ์ด ๊ด๋ฆฌ
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ํํธ์จ์ด๋ฅผ ๋ค์ ๋ฐฐํฌํ ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ๋งค์ฐ ์ด๋ ค์ธ ์ ์์
- ๋ง์ ์๋น์ค๋ก ๊ตฌ์ฑ๋ ์์ฉ์ monolithic ํํ๋ก ๊ตฌ์ฑํ ๊ฒฝ์ฐ ๊ฐ ์๋น์ค๊ฐ ํ์๋ก ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ์ ํฐ ์ด๋ ค์์ด ์๊น
(conflict ๊ฐ๋ฅ์ฑ) - ๋ง์ดํฌ๋ก ์๋น์ค ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ์ฌ๋ฌ ์๋น์ค๊ฐ ์ํํธ์จ์ด ์ข ์ ๋ฌธ์ ํด๊ฒฐ ๊ฐ๋ฅ
๋จ์
1. ๋ณต์ก์ฑ ์ฆ๊ฐ
2. ๋ฐฐํฌ์ ๋ชจ๋ํฐ๋ง ๋ถ๋ด
=> ์๋น์ค๋ณ๋ก ๋ฐฐํฌ ์ฃผ๊ธฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ CI/CD ํ์ดํ๋ผ์ธ์ ๋ ์ธ๋ถํํด์ผํจ
3. ๋คํธ์ํฌ ์ฑ๋ฅ ์ด์
=> ์๋น์ค ๊ฐ ํต์ ์ด HTTP, gRPC ๋ฑ ๋คํธ์ํฌ๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ฏ๋ก ๋คํธ์ํฌ ์ฅ์ ๊ฐ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์
4. ๋ฐ์ดํฐ ์ผ๊ด์ฑ (Consistency)๋ฅผ ์ ์งํ๊ธฐ ์ด๋ ค์
=> ๊ฐ ์๋น์ค๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ
(๋ถ์ฐ ํธ๋์ญ์
์ ๊ตฌํํ๊ฑฐ๋ eventual consistency๋ฅผ ์์ฉํด์ผํ ์ ๋ ์์)