[MSA] MSA๋ ๋ฌด์์ธ๊ฐ? ๊ฐ๋ ์ดํดํ๊ธฐ
๋ชฉ์ฐจ
1. MSA๋?
2. MSA์ ๋ฑ์ฅ๋ฐฐ๊ฒฝ
3. MSA์ ํน์ง
4. MSA์ ์ฅ์
5. MSA์ ๋จ์
MSA?
MicroService Architecture์ ์ค์๋ง
๐๐ป ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ๋ํ ์ ํํ ์ ์๋ ์๋ค. ํ์ง๋ง ๋ง์ดํฌ๋ก์๋น์ค๋ ์๊ณ , ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๊ฐ๋ฅํ ๊ฐ๊ฐ์ ๊ธฐ๋ฅ์ ์ํํ๋ ์๋น์ค๋ก ๊ตฌ์ฑ๋ ํ๋ ์์ํฌ๋ผ๊ณ ํ ์ ์๋ค. ๋ง์ดํฌ๋ก์๋น์ค๋ ์์ ํ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๊ณ , ๋ค๋ฅธ ๊ธฐ์ ์คํ(๊ฐ๋ฐ ์ธ์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ)์ด ์ฌ์ฉ ๊ฐ๋ฅํ ๋จ์ผ ์ฌ์ ์์ญ์ ์ด์ ์ ๋๋ค.
MSA์ ๋ฑ์ฅ๋ฐฐ๊ฒฝ
Monolithic Architecture๋ ์ํํธ์จ์ด์ ๋ชจ๋ ๊ตฌ์ฑ์์๊ฐ ํ ํ๋ก์ ํธ์ ํตํฉ๋์ด ์๋ ํํ์ด๋ค. ์น ๊ฐ๋ฐ์ ์๋ก ๋ค๋ฉด ์น ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๊ธฐ ์ํด ๋ชจ๋๋ณ๋ก ๊ฐ๋ฐ์ ํ๊ณ , ๊ฐ๋ฐ์ด ์๋ฃ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ํ๋์ ๊ฒฐ๊ณผ๋ฌผ๋ก ํจํค์งํ์ฌ ๋ฐฐํฌ๋๋ ํํ๋ฅผ ๋งํ๋ค. ์ด๋ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋๋ฆฌ์ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ผ ํ๋ฉฐ, ์น์ ๊ฒฝ์ฐ WARํ์ผ๋ก ๋น๋๋์ด WAS์ ๋ฐฐํฌํ๋ ํํ๋ฅผ ๋งํ๋ค. ์ฃผ๋ก ์๊ท๋ชจ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋๋ค.
ํ์ง๋ง ์ผ์ ๊ท๋ชจ ์ด์์ ์๋น์ค, ํน์ ์๋ฐฑ๋ช ์ด์์ ๊ฐ๋ฐ์๊ฐ ํฌ์ ๋๋ ํ๋ก์ ํธ์์ Monolithic Architecture๋ ํ๊ณ๋ฅผ ๋ณด์ธ๋ค.
- ๋ถ๋ถ ์ฅ์ ๊ฐ ์ ์ฒด ์๋น์ค์ ์ฅ์ ๋ก ํ๋๋ ์ ์๋ค.
- ๊ฐ๋ฐ์์ ์๋ชป๋ ์ฝ๋ ๋ฐฐํฌ ๋๋ ๊ฐ์์ค๋ฐ ํธ๋ํฝ ์ฆ๊ฐ๋ก ์ธํด ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋, ์๋น์ค ์ ์ฒด์ ์ฅ์ ๋ก ํ๋๋ ์ ์๋ค.
- ๋ถ๋ถ์ ์ธ *Scale-out(์ฌ๋ฌ server๋ก ๋๋์ด ์ผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์)์ด ์ด๋ ต๋ค.
- Monolithic Architecture์์๋ ์ฌ์ฉ๋์ง ์๋ ๋ค๋ฅธ ๋ชจ๋ ์๋น์ค๊ฐ Scale-out๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ถ๋ถ Scale-out์ด ์ด๋ ต๋ค.
- ์๋น์ค์ ๋ณ๊ฒฝ์ด ์ด๋ ต๊ณ , ์์ ์ ์ฅ์ ์ ์ํฅ๋ ํ์
์ด ํ๋ค๋ค.
- ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ํ๋์ ์๋น์ค์ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์๊ธฐ ๋๋ฌธ์ ์์ ์ ๋ํ ์ํฅ๋ ํ์ ์ด ํ๋ค๋ค.
- ๋ฐฐํฌ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค.
- ์ต๊ทผ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ CI/CD๋ฅผ ํตํ ๊ฐ๋ฐ๋ถํฐ ๋ฐฐํฌ๊น์ง ๋น ๋ฅด๊ฒ ๋ฐ์ํ๋ ์ถ์ธ์ด๋ค. ๊ทธ๋ฌ๋ ๊ท๋ชจ๊ฐ ์ปค์ง์ ๋ฐ๋ผ ์์ ๋ณ๊ฒฝ์๋ ๋์ ์์ค์ ํ ์คํธ ๋น์ฉ์ด ๋ฐ์ํ๊ธฐ๋ ํ๋ฉฐ, ๋ง์ ์ฌ๋์ด ํ๋์ ์์คํ ์ ๊ฐ๋ฐํ์ฌ ๋ฐฐํฌํ๊ธฐ ๋๋ฌธ์ ์ํฅ์ ์ค ์ ๋ฐ์ ์๋ค.
- ํ Framework์ ์ธ์ด์ ์ข
์์ ์ด๋ค.
- Spring framework๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, blockchain ์ฐ๋ ๋ชจ๋์ ์ถ๊ฐํ ๋ node.js๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ฉฐ ๊ฐ์ธ์ด๋ค. ๊ทธ๋ฌ๋ java๋ฅผ ์ด์ฉํ์ฌ ํด๋น ๋ชจ๋์ ์์ฑํ ์ ๋ฐ์ ์๋ค. ์ ์ ํ๋ framework๊ฐ Spring์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฌํ Monolithic Architecture์ ๋ฌธ์ ์ ๋ค์ ๋ณด์ํ๊ธฐ ์ํด MSA๊ฐ ๋ฑ์ฅํ๊ฒ ๋์๋ค. ๊ธฐ์กด์ ํน์ ํ ๋ฌผ๋ฆฌ์ ์ธ ์๋ฒ์ ์๋น์ค๋ฅผ ์ฌ๋ฆฌ๋ on-promise ์๋ฒ ๊ธฐ๋ฐ์ Monolithic Architecture์์ ์ด์ ๋ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ์ด์ฉํ์ฌ ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ MicroService Architecture๋ก ๋ง์ ์๋น์ค๋ค์ด ์ ํ๋๊ณ ์๋ค.
MSA์ ํน์ง
๐๐ป MSA๋ API๋ฅผ ํตํด์๋ง ์ํธ์์ฉํ ์ ์๋ค. ์ฆ, ๋ง์ดํฌ๋ก ์๋น์ค๋ ์๋น์ค์ end-point(์ ๊ทผ์ )์ API ํํ๋ก ์ธ๋ถ์ ๋ ธ์ถํ๊ณ , ์ค์ง์ ์ธ ์ธ๋ถ ์ฌํญ์ ๋ชจ๋ ์ถ์ํํ๋ค. ๋ด๋ถ์ ๊ตฌํ ๋ก์ง, ์ํคํ ์ฒ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ์ง ์ ์ง ์ฒด๊ณ์ ๊ฐ์ ๊ธฐ์ ์ ์ธ ์ฌํญ๋ค์ ์๋น์ค API์ ์ํด ์ฒ ์ ํ๊ฒ ๊ฐ๋ ค์ง๋ค.
๋ฐ๋ผ์ *SOA(Service Oriented Architecture)์ ํน์ง์ ๋ค์ ๊ณตํต์ผ๋ก ๊ฐ์ง๋ค.
*SOA - ๋๊ท๋ชจ ์ปดํจํฐ ์์คํ ์ ๊ตฌ์ถํ ๋์ ๊ฐ๋ ์ผ๋ก, ์ ๋ฌด์ ์ผ ์ฒ๋ฆฌ์ ํด๋นํ๋ ์ํํธ์จ์ด ๊ธฐ๋ฅ์ ์๋น์ค๋ก ํ๋จํ๊ณ ๊ทธ ์๋น์ค๋ฅผ ๋คํธ์ํฌ์์ ์ฐ๋ํ์ฌ ์์คํ ์ ์ฒด๋ฅผ ๊ตฌ์ถํด ๊ฐ๋ ๋ฐฉ๋ฒ๋ก ์ด๋ค. ์ ๋ฌด ์ฒ๋ฆฌ ๋ณํ๋ฅผ ์์คํ ์ ๋น ๋ฅด๊ฒ ๋ฐ์ํ๊ณ ์ ํ๋ ์์์ ๋์ํ๊ธฐ ์ํด 2004๋ ๋ถํฐ IT ์ ๊ณ์์ ์ฃผ๋ชฉ ํ๊ณ ์๋ค.
- ํ๋ซํผ์ ์ข ์๋์ง ์๋ ํ์ค ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ธฐ์ ์ ์ ๋ฌด๋ฅผ ํํํ '๋์จํ๊ฒ ์ฐ๊ฒฐ๋๊ณ (Loosly coupled) ์ํธ ์กฐํฉ ๊ฐ๋ฅํ ์ํํธ์จ์ด'์ด๋ค.
- SOA์์๋ ๊ฐ๊ฐ์ ์๋น์ค๊ฐ ๋ฐ์ดํฐ ๊ณ์ธต, ๋น์ฆ๋์ค ๋ก์ง, ๋ทฐ์ ๋ํ ๋ชจ๋์ ๋ชจ๋ ๊ฐ์ง๊ณ ์๊ณ , ๊ฐ ์๋น์ค ๊ฐ์ ์์กด์ฑ์ด ์ต์ํ๋๋ค.
- SOA ์์คํ ์ ๊ท๋ชจ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๋น์ค์ ์ค๋ณต์ด ๋ฐ์ํ ์ ์๊ณ , ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด๋ฏธ ๊ตฌํ๋ ์๋น์ค๊ฐ ์๋์ง๋ฅผ ๊ฒ์ํ ์ ์์ด์ผ ํ๋ค.
SOA ์ํคํ ์ฒ ๋ชจ๋ธ ์์ธํ ๋ด์ฉ ๋ณด๋ฌ๊ฐ๊ธฐ
- Fundamental SOA(ํตํฉ)
- Networked SOA(์ ์ฐ์ฑ๊ณผ ํต์ ์ถ๊ฐ)
- Process Oriented SOA(๋ฏผ์ฒฉ์ฑ์ ์ถ๊ฐ)
์ ๋๋ก ์ค๊ณ ๋ ๋ง์ดํฌ๋ก์๋น์ค๋ ํ๋์ ๋น์ฆ๋์ค ๋ฒ์์ ๋ง์ถฐ ๋ง๋ค์ด์ง๋ฏ๋ก ํ๋์ ๊ธฐ๋ฅ๋ง ์ํํ๋ค. ์ฆ, ์ดํ๋ฆฌ์ผ์ด์ ์ถ์์ฒ๋ผ ํ๋์ ๋ชฉํ๋ฅผ ํฅํด ์ผํ์ง๋ง ์๊ธฐ๊ฐ ๊ฐ๋ฐํ๋ ์๋น์ค๋ง ์ฑ ์์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค.
์ดํ๋ฆฌ์ผ์ด์ ์ ํญ์ ๊ธฐ์ ์ค๋ฆฝ์ ํ๋กํ ์ฝ์ ์ฌ์ฉํด ํต์ ํ๋ฏ๋ก ์๋น์ค ๊ตฌํ ๊ธฐ์ ๊ณผ๋ ๋ฌด๊ดํ๋ค. ๋ฐ๋ผ์ ๋ง์ดํฌ๋ก์๋น์ค ๊ธฐ๋ฐ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ค์ํ ์ธ์ด์ ๊ธฐ์ ๋ก ๊ตฌ์ถํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ง์ดํฌ๋ก์๋น์ค๋ SOA์์ ์ฌ์ฉ๋๋ ์ง์คํ๋ ๊ด๋ฆฌ ์ฒด๊ณ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. ๋ง์ดํฌ๋ก์๋น์ค ๊ตฌํ์ฒด์ ๊ณตํต์ ์ธ ํน์ง ์ค ํ๋๋ ESB(Enterprise Service Bus)์ ๊ฐ์ ๋ฌด๊ฑฐ์ด ์ ํ์ ์์กดํ์ง ์๋๋ค๋ ์ ์ด๋ค. REST ๋ฑ ๊ฐ๋ฒผ์ด ํต์ ์ํคํ ์ฒ, ๋๋ Kafka ๋ฑ์ ์ด์ฉํ message stream์ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
MSA์ ์ฅ์
๊ฐ๊ฐ์ ์๋น์ค๋ ๋ชจ๋ํ๊ฐ ๋์ด์์ผ๋ฉฐ ์ด๋ฌํ ๋ชจ๋๊น๋ฆฌ๋ RPC ๋๋ message-driven API๋ฑ์ ์ด์ฉํ์ฌ ํต์ ํ๋ค. ์ด๋ฌํ MSA๋ ๊ฐ๊ฐ ๊ฐ๋ณ์ ์๋น์ค ๊ฐ๋ฐ์ ๋น ๋ฅด๊ฒ ํ๋ฉฐ, ์ ์ง๋ณด์๋ ์ฝ๊ฒํ ์ ์๋๋ก ํ๋ค.
ํ ๋จ์๋ก ์ ์ ํ ์์ค์์ ๊ธฐ์ ์คํ์ ๋ค๋ฅด๊ฒ ๊ฐ์ ธ๊ฐ ์ ์๋ค. ํ์ฌ๊ฐ java์ spring ๊ธฐ๋ฐ์ด๋ผ๋ MSA๋ฅผ ์ ์ฉํ๋ฉด node.js๋ก ๋ธ๋ก์ฒด์ธ ๊ฐ๋ฐ ๋ชจ๋์ ์ฐ๋ํจ์ ๋ฌด๋ฆฌ๊ฐ ์๋ค.
๋ง์ดํฌ๋ก์๋น์ค๋ ์๋น์ค๋ณ๋ก ๋ ๋ฆฝ์ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ์ง์์ ์ธ ๋ฐฐํฌ CD๋ ๋ชจ๋๋ก์์ ๋นํด์ ๊ฐ๋ณ๊ฒ ํ ์ ์๋ค.
๋ง์ดํฌ๋ก์๋น์ค๋ ๊ฐ๊ฐ ์๋น์ค์ ๋ถํ์ ๋ฐ๋ผ ๊ฐ๋ณ์ ์ผ๋ก scale-out์ด ๊ฐ๋ฅํ๋ค. ๋ฉ๋ชจ๋ฆฌ, CPU์ ์ผ๋ก ์๋น๋ถ๋ถ ์ด๋์ด ๋๋ค.
MSA์ ๋จ์
MSA๋ ๋ชจ๋๋ฆฌ์์ ๋นํด ์๋์ ์ผ๋ก ๋ง์ด ๋ณต์กํ๋ค. ์๋น์ค๊ฐ ๋ชจ๋ ๋ถ์ฐ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ๋ด๋ถ ์์คํ ์ ํต์ ์ ์ด๋ป๊ฒ ๊ฐ์ ธ๊ฐ์ผ ํ ์ง ์ ํด์ผํ๋ค. ๋ํ, ํต์ ์ ์ฅ์ ์ ์๋ฒ์ ๋ถํ ๋ฑ์ด ์์ ๊ฒฝ์ฐ ์ด๋ป๊ฒ transaction์ ์ ์งํ ์ง ๊ฒฐ์ ํ๊ณ ๊ตฌํํด์ผํ๋ค.
๋ชจ๋๋ฆฌ์์์๋ ๋จ์ผ ํธ๋์ญ์ ์ ์ ์งํ๋ฉด ๋์ง๋ง MSA์์๋ ๋น์ฆ๋์ค์ ๋ํ DB๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋น์ค๋ ๊ฐ๊ธฐ ๋ค๋ฅด๊ณ , ์๋น์ค์ ์ฐ๊ฒฐ์ ์ํด์๋ ํต์ ์ด ํฌํจ๋๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์ ์ ์ ์งํ๋๊ฒ ์ด๋ ต๋ค.
ํตํฉ ํ ์คํธ๊ฐ ์ด๋ ต๋ค. ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์ค์ ์ด์ํ๊ฒฝ์ ๋์ผํ๊ฒ ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ์ฝ์ง ์๋ค.
์ค์ ์ด์ํ๊ฒฝ์ ๋ํด์ ๋ฐฐํฌํ๋ ๊ฒ์ด ์ฝ์ง ์๋ค. ๋ง์ดํฌ๋ก์๋น์ค์ ๊ฒฝ์ฐ ์๋น์ค 1๊ฐ๋ฅผ ์ฌ๋ฐฐํฌ ํ๋ค๊ณ ํ๋ฉด ๋ค๋ฅธ ์๋น์ค๋ค๊ณผ์ ์ฐ๊ณ๊ฐ ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง๊ณ ์๋์ง๋ ํ์ธํด์ผํ๋ค.
์ด์ ๋ฆฌ
- ์ผ๋ฐ์ ์ธ mvc ํจํด์ผ๋ก ํ์๋ ์์ ๊ท๋ชจ์ ํ๋ก์ ํธ๋ก๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ํฐ ํ๋ก์ ํธ๋ ํธ๋ํฝ์ด ๋ง์ ๋๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค. msa๋ฅผ ํ์ฉํด์ ์ค๊ณ๋ฅผ ํ๋ฉด ๋ค์ํ ํ๋ ์์ํฌ ์ธ์ด๋ฅผ ์ธ์ ์๊ณ ๋ฐฐํฌ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ์ง์๋๋ค.์ฆ ๋๋์ด์ ธ์๊ธฐ ๋๋ฌธ์ ์ฅ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ๋์ฑ ์ฝ๋ค.