MSA
MSA (Microservice Architecture)
์ ํ๋ฆฌ์ผ์ด์
์ ์๊ณ ๋
๋ฆฝ์ ์ธ ์๋น์ค๋ค์ ๋ชจ์์ผ๋ก ๊ตฌ์ฑํ๋ ์ํคํ
์ฒ
โข
MSA ๊ตฌ์กฐ
โข
์ผํ๋ชฐ ์ฌ์ดํธ ์์
โข
MSA ๊ตฌ์ฑ์์
MSA ๊ตฌ์กฐ
graph TD
A[Client] --> B[API Gateway]
B --> C[Service A]
B --> D[Service B]
B --> E[Service C]
C --> F[Database A]
D --> G[Database B]
E --> H[Database C]
style A fill:#f9f,stroke:#333,stroke-width:2px
style B fill:#bbf,stroke:#333,stroke-width:2px
style C fill:#dfd,stroke:#333,stroke-width:2px
style D fill:#dfd,stroke:#333,stroke-width:2px
style E fill:#dfd,stroke:#333,stroke-width:2px
style F fill:#fdd,stroke:#333,stroke-width:2px
style G fill:#fdd,stroke:#333,stroke-width:2px
style H fill:#fdd,stroke:#333,stroke-width:2pxMermaid
๋ณต์ฌ
์ ๋ค์ด์ด๊ทธ๋จ์ MSA์ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค:
โข
ํด๋ผ์ด์ธํธ: ์ฌ์ฉ์ ๋๋ ๋ค๋ฅธ ์์คํ
์์ ์์ฒญ์ ๋ณด๋
๋๋ค.
โข
API Gateway: ๋ชจ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋จ์ผ ์ง์
์ ์ญํ ์ ํฉ๋๋ค.
โข
๋ง์ดํฌ๋ก์๋น์ค (Service A, B, C): ๊ฐ๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ๋์ํ๋ ์์ ์๋น์ค๋ค์
๋๋ค.
โข
๋ฐ์ดํฐ๋ฒ ์ด์ค: ๊ฐ ์๋น์ค๋ ์์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
์ผํ๋ชฐ ์ฌ์ดํธ ์์
์ผํ๋ชฐ ์ฌ์ดํธ๋ฅผ ์์๋ก ํ MSA ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
graph TD
A[๊ณ ๊ฐ] --> B[API Gateway]
B --> C[์ํ ์๋น์ค]
B --> D[์ฃผ๋ฌธ ์๋น์ค]
B --> E[๊ฒฐ์ ์๋น์ค]
B --> F[๋ฐฐ์ก ์๋น์ค]
B --> G[๋ฆฌ๋ทฐ ์๋น์ค]
C --> H[์ํ DB]
D --> I[์ฃผ๋ฌธ DB]
E --> J[๊ฒฐ์ DB]
F --> K[๋ฐฐ์ก DB]
G --> L[๋ฆฌ๋ทฐ DB]
style A fill:#f9f,stroke:#333,stroke-width:2px
style B fill:#bbf,stroke:#333,stroke-width:2px
style C,D,E,F,G fill:#dfd,stroke:#333,stroke-width:2px
style H,I,J,K,L fill:#fdd,stroke:#333,stroke-width:2pxMermaid
๋ณต์ฌ
์ด ๋ค์ด์ด๊ทธ๋จ์ ์ผํ๋ชฐ ์ฌ์ดํธ์ MSA ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค:
โข
๊ณ ๊ฐ: ์ผํ๋ชฐ์ ์ด์ฉํ๋ ์ฌ์ฉ์์
๋๋ค.
โข
API Gateway: ๋ชจ๋ ๊ณ ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์ ์ ํ ์๋น์ค๋ก ๋ผ์ฐํ
ํฉ๋๋ค.
โข
๋ง์ดํฌ๋ก์๋น์ค:
โฆ
์ํ ์๋น์ค: ์ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
โฆ
์ฃผ๋ฌธ ์๋น์ค: ์ฃผ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค.
โฆ
๊ฒฐ์ ์๋น์ค: ๊ฒฐ์ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค.
โฆ
๋ฐฐ์ก ์๋น์ค: ๋ฐฐ์ก ๊ด๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค.
โฆ
๋ฆฌ๋ทฐ ์๋น์ค: ๊ณ ๊ฐ ๋ฆฌ๋ทฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
โข
๋ฐ์ดํฐ๋ฒ ์ด์ค: ๊ฐ ์๋น์ค๋ ๋
๋ฆฝ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ์ง๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ํตํด ๊ฐ ์๋น์ค๋ ๋
๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ, ๋ฐฐํฌ, ํ์ฅ๋ ์ ์์ผ๋ฉฐ, ์ ์ฒด ์์คํ
์ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ด ํฅ์๋ฉ๋๋ค.
MSA ๊ตฌ์ฑ์์
MSA์ ์ฃผ์ ๊ตฌ์ฑ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
โข
๋ง์ดํฌ๋ก์๋น์ค
โข
API Gateway
โข
์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ
โข
๋ก๋ ๋ฐธ๋ฐ์
โข
๋ฐ์ดํฐ๋ฒ ์ด์ค
โข
๋ฉ์์ง ํ
โข
์ปจํ
์ด๋
โข
์๋น์ค ์ค์ผ์คํธ๋ ์ด์
โข
๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น
โข
CI/CD ํ์ดํ๋ผ์ธ
๊ฐ ๊ตฌ์ฑ์์๋ MSA ์์คํ
์ ํจ์จ์ ์ธ ์ด์๊ณผ ๊ด๋ฆฌ๋ฅผ ์ํด ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
๋ค์์ ์ผํ๋ชฐ ์ฌ์ดํธ๋ฅผ ์์๋ก ํ MSA์ ๋ชจ๋ ์ฃผ์ ๊ตฌ์ฑ์์๋ฅผ ํฌํจํ๋ ๊ตฌ์กฐ๋์
๋๋ค:
๊ตฌ์กฐ๋ ๋ค์ ๊ทธ๋ฆฌ๊ธฐ
graph TD
A[๊ณ ๊ฐ] --> B[API Gateway]
B --> C[์ํ ์๋น์ค]
B --> D[์ฃผ๋ฌธ ์๋น์ค]
B --> E[๊ฒฐ์ ์๋น์ค]
B --> F[๋ฐฐ์ก ์๋น์ค]
B --> G[๋ฆฌ๋ทฐ ์๋น์ค]
H[์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ] --> B
H --> C
H --> D
H --> E
H --> F
H --> G
I[๋ก๋ ๋ฐธ๋ฐ์] --> B
C --> J[์ํ DB]
D --> K[์ฃผ๋ฌธ DB]
E --> L[๊ฒฐ์ DB]
F --> M[๋ฐฐ์ก DB]
G --> N[๋ฆฌ๋ทฐ DB]
O[๋ฉ์์ง ํ] --> C
O --> D
O --> E
O --> F
P[์ปจํ
์ด๋ ์ค์ผ์คํธ๋ ์ด์
] --> C
P --> D
P --> E
P --> F
P --> G
Q[๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น
] --> B
Q --> C
Q --> D
Q --> E
Q --> F
Q --> G
R[CI/CD ํ์ดํ๋ผ์ธ] --> C
R --> D
R --> E
R --> F
R --> G
style A fill:#f9f,stroke:#333,stroke-width:2px
style B fill:#bbf,stroke:#333,stroke-width:2px
style C,D,E,F,G fill:#dfd,stroke:#333,stroke-width:2px
style H,I,O,P,Q,R fill:#ffa,stroke:#333,stroke-width:2px
style J,K,L,M,N fill:#fdd,stroke:#333,stroke-width:2pxMermaid
๋ณต์ฌ
์ด ๋ค์ด์ด๊ทธ๋จ์ MSA์ ์ฃผ์ ๊ตฌ์ฑ์์๋ฅผ ๋ชจ๋ ํฌํจํ๊ณ ์์ต๋๋ค:
โข
๋ง์ดํฌ๋ก์๋น์ค: ์ํ, ์ฃผ๋ฌธ, ๊ฒฐ์ , ๋ฐฐ์ก, ๋ฆฌ๋ทฐ ์๋น์ค
โข
API Gateway: ๋ชจ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋จ์ผ ์ง์
์
โข
์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ: ๊ฐ ์๋น์ค์ ์์น๋ฅผ ๋์ ์ผ๋ก ํ์
โข
๋ก๋ ๋ฐธ๋ฐ์: ํธ๋ํฝ์ ์ฌ๋ฌ ์๋น์ค ์ธ์คํด์ค์ ๋ถ์ฐ
โข
๋ฐ์ดํฐ๋ฒ ์ด์ค: ๊ฐ ์๋น์ค๋ณ ๋
๋ฆฝ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค
โข
๋ฉ์์ง ํ: ์๋น์ค ๊ฐ ๋น๋๊ธฐ ํต์ ์ ์ํ ๋ฉ์์ง ๋ธ๋ก์ปค
โข
์ปจํ
์ด๋ ์ค์ผ์คํธ๋ ์ด์
: ์ปจํ
์ด๋ํ๋ ์๋น์ค์ ๋ฐฐํฌ์ ๊ด๋ฆฌ
โข
๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น
: ์์คํ
์ํ์ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
โข
CI/CD ํ์ดํ๋ผ์ธ: ์ง์์ ์ธ ํตํฉ๊ณผ ๋ฐฐํฌ ์๋ํ
์ด ๊ตฌ์กฐ๋ฅผ ํตํด ์ผํ๋ชฐ ์ฌ์ดํธ๋ ํ์ฅ์ฑ, ์ ์ฐ์ฑ, ๊ทธ๋ฆฌ๊ณ ์ฅ์ ๊ฒฉ๋ฆฌ ๋ฑ MSA์ ์ด์ ์ ๋ชจ๋ ํ์ฉํ ์ ์์ต๋๋ค.
