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:2px
Mermaid
๋ณต์ฌ
์ ๋ค์ด์ด๊ทธ๋จ์ 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:2px
Mermaid
๋ณต์ฌ
์ด ๋ค์ด์ด๊ทธ๋จ์ ์ผํ๋ชฐ ์ฌ์ดํธ์ 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:2px
Mermaid
๋ณต์ฌ
์ด ๋ค์ด์ด๊ทธ๋จ์ MSA์ ์ฃผ์ ๊ตฌ์ฑ์์๋ฅผ ๋ชจ๋ ํฌํจํ๊ณ ์์ต๋๋ค:
โข
๋ง์ดํฌ๋ก์๋น์ค: ์ํ, ์ฃผ๋ฌธ, ๊ฒฐ์ , ๋ฐฐ์ก, ๋ฆฌ๋ทฐ ์๋น์ค
โข
API Gateway: ๋ชจ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋จ์ผ ์ง์
์
โข
์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ: ๊ฐ ์๋น์ค์ ์์น๋ฅผ ๋์ ์ผ๋ก ํ์
โข
๋ก๋ ๋ฐธ๋ฐ์: ํธ๋ํฝ์ ์ฌ๋ฌ ์๋น์ค ์ธ์คํด์ค์ ๋ถ์ฐ
โข
๋ฐ์ดํฐ๋ฒ ์ด์ค: ๊ฐ ์๋น์ค๋ณ ๋
๋ฆฝ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค
โข
๋ฉ์์ง ํ: ์๋น์ค ๊ฐ ๋น๋๊ธฐ ํต์ ์ ์ํ ๋ฉ์์ง ๋ธ๋ก์ปค
โข
์ปจํ
์ด๋ ์ค์ผ์คํธ๋ ์ด์
: ์ปจํ
์ด๋ํ๋ ์๋น์ค์ ๋ฐฐํฌ์ ๊ด๋ฆฌ
โข
๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น
: ์์คํ
์ํ์ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
โข
CI/CD ํ์ดํ๋ผ์ธ: ์ง์์ ์ธ ํตํฉ๊ณผ ๋ฐฐํฌ ์๋ํ
์ด ๊ตฌ์กฐ๋ฅผ ํตํด ์ผํ๋ชฐ ์ฌ์ดํธ๋ ํ์ฅ์ฑ, ์ ์ฐ์ฑ, ๊ทธ๋ฆฌ๊ณ ์ฅ์ ๊ฒฉ๋ฆฌ ๋ฑ MSA์ ์ด์ ์ ๋ชจ๋ ํ์ฉํ ์ ์์ต๋๋ค.