Index
MSA๋ ๋ฌด์์ธ๊ฐ?
MSA๋ ๋ง์ดํฌ๋ก ์๋น์ค ์ํคํ ์ณ์ ์ค์๋ง์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฌ์ ์ ์ ์๋ ๋ฌด์์ผ๊น?
์ธ๊ณ์์ ์ ๋ช ํ ๊ธฐ์ ์ธ aws์์ ๋ด๋ฆฐ ์ ์๋ฅผ ์ดํด๋ณด์.
๋ง์ดํฌ๋ก์๋น์ค๋ ์ํํธ์จ์ด๊ฐ ์ ์ ์๋ API๋ฅผ ํตํด ํต์ ํ๋ ์๊ท๋ชจ์ ๋ ๋ฆฝ์ ์ธ ์๋น์ค๋ก ๊ตฌ์ฑ๋์ด ์๋ ๊ฒฝ์ฐ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ํ ์ํคํ ์ฒ ๋ฐ ์กฐ์ง์ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
๊ฝค๋ ๋ต๋ณ์ด ์ด๋ ต๊ฒ ์ ํ์๋ ๊ฒ ๊ฐ์ง๋ง ํต์ฌ์ ์ธ ๋ถ๋ถ๋ง ์ถ์ถํด๋ณด์.
API๋ฅผ ํตํด ํต์ ํ๋ ์๊ท๋ชจ์ ๋
๋ฆฝ์ ์ธ ์๋น์ค
์ด๊ฒ์ด ํต์ฌ!
์ฌ๊ธฐ์ API๋ http ํต์ ์ด ๋ ์๋ ์๊ณ ๋ฉ์ธ์ง๊ธฐ๋ฐ์ ์ด๋ฒคํธ๋ฐฉ์์ด ๋ ์๋ ์์ต๋๋ค.
์ ๋๋ฆ๋๋ก(?) ์๊ฐํ ์ ์๋ ์๋์ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์ ์๊ฒ(Micro)์ ๋จ์๋ ์ ์ฉ๋์์ ๋ฐ๋ผ ๋จ์๊ฐ ๋ฌ๋ผ์ง ์ ์๋๋ฐ, ์ฌ๊ธฐ์ ์ค๋ช ํ๋ ๋จ์๋ ๊ฐ์ฅ ํํ ์ฌ์ฉ๋๋ ์๋ฒ ๋จ์๋ผ ์๊ฐํ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋์ ์ด๊ฒ ์ ๊ทธ๋ ๊ฒ ํซํ๋ฐ?
์์ฆ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ฑ์ฉ๊ณต๊ณ ๋ฅผ ๋ณด๋ฉด ์ฐ๋์ฌํญ์ ๋น ์ง์ง ์๊ณ ์ ํ์๋ ๊ฒ์ ์ฝ๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
โข MSA ํ๊ฒฝ์ ๋๊ท๋ชจ ํธ๋ํฝ, ๊ณ ๊ฐ์ฉ์ฑ ์์คํ ๊ฐ๋ฐ์ ๊ด์ฌ์ด ๋ง์ ๋ถ
โข MSA ๊ธฐ๋ฐ ๋์ฉ๋ ์ฒ๋ฆฌ ์์คํ ๋์์ธ ์ค๊ณ
โข MSA, SOA ๊ธฐ๋ฐ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๊ฒฝํํด ๋ณด์ ๋ถ
๊ทธ๋ ๋ค๋ฉด, ์ ์ด๋ ๊ฒ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ณ๊ฐ ์ด๋ ๊ฒ ํซํ๊ฒ์ผ๊น์?
์ ๋๋ฆ๋๋ก์ ๊ฒฐ๋ก ์ ๋จผ์ ๋ง์๋๋ฆฌ์๋ฉด, ์ฌ์ฉ์๊ฐ ๋ง์ ์๋น์ค๋ค์ด ํด๊ฒฐํด์ผํ๋ ๋์ฉ๋ ํธ๋ํฝ
์ ๋ํด ๋์ํ๊ธฐ์ํ ํ์์กฐ๊ฑด์ด ์๋ ํ์์กฐ๊ฑด
์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ทํ๋ฆญ์ค์ ๊ฐ์ด ์ด์ฉ์๊ฐ ์๋์ ์ผ๋ก ๋ง๋ค๋ฉด ๊ทธ๊ฒ์ ํ์์กฐ๊ฑด์ด ์๋ ํ์์กฐ๊ฑด์ด ๋๊ฒ ์ง์
๊ฒฐ๊ตญ ๋์ฉ๋ ํธ๋ํฝ์ ๊ฐ๋นํ๊ธฐ ์ํ โ ์ฅ์ ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํ ์์กด์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ ์ผํฉ๋๋ค.
๊ทธ๋ ๋ค๊ณ ๋ฌด์กฐ๊ฑด์ ์ผ๋ก MSA๊ฐ ์ข๋ค๊ณ ์ฒ์๋ถํฐ ์๋น์ค๋ฅผ ๋๋๋ ๊ฒ์ ๋งค์ฐ๋งค์ฐ ์์ข์ต๋๋ค.
MSA๋ ์ํํ์ธ๊ฐ?
์ ๋ ์ ๋ ์ํํ์ด ๋ ์ ์์ต๋๋ค.
์ํฉ์ ๋ฐ๋ผ ๋ชจ๋๋ฆฌ์ค๊ฐ ์ ํฉํ ๊ฒฝ์ฐ๋ ๋ง์ต๋๋ค.
๋จ์ ์ธ ์๋ฅผ ๋ค์ด, ์ด์ฉ์๊ฐ ๋ณ๋ก ์๋ ์ฌ๋ด์๋น์ค๋ฅผ MSA๋ก ๊ตฌ์ถํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
(์ฌ๋ด์๋น์ค ์ค์์๋ ํธ๋ํฝ์ด ๋์น๋ ์๋น์ค๋ค์ ์ ์ธํฉ๋๋ค.)
๋ชจ๋๋ฆฌ์ค๋ผ๋ฉด ๊ฐ๋จํ๊ฒ @Transactional
๋ก ํด๊ฒฐํ ์ ์๋ ๊ฒ๋ค์ ๋ถ์ฐ๋ ํ๊ฒฝ์์ ํธ๋์ญ์
์ ๊ด๋ฆฌํด์ผํฉ๋๋ค.
๊น๊ฒ ์๊ฐํ์ง ์๊ณ ๋, ๋ฒ์จ ๋กค๋ฐฑ์ ์ด๋ป๊ฒํ์ง? ๊ณค๋ํ๋ค.. ๋ผ๊ณ ์๊ฐ์ด ๋์ค๊ฒ๋๋ค.
(์์ธํ ๋ด์ฉ์ https://waspro.tistory.com/734 ์ด ๋ธ๋ก๊ทธ์ ๊ธ์ ํ์ธํด๋ณด์ธ์)
์ด์ฒ๋ผ ๋ชจ๋๋ฆฌ์ค๋ก ๊ฐ๋ฐํ๋ ์ ์ง์ ์ผ๋ก MSA ํ๊ฒฝ์ผ๋ก ๊ฐ๊ฒ๋๋ ๊ฒ์ด์ง, ์์๋ถํฐ MSAํ๊ฒฝ์ ๋งค์ฐ ์ณ์ง ๋ชปํ ์ค๊ณ์ ๋๋ค.
So my primary guideline would be don't even consider microservices unless you have a system that's too complex to manage as a monolith. The majority of software systems should be built as a single monolithic application. Do pay attention to good modularity within that monolith, but don't try to separate it into separate services. - Martin Fowler
๋ฐ๋ผ์ ์ ์ ์ฃผ์ ์ง์นจ์ ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ๊ณ ๋ คํ์ง ์๋ ๊ฒ์ ๋๋ค. ๋ชจ๋๋ฆฌ์ค๋ก ๊ด๋ฆฌํ๊ธฐ์๋ ๋๋ฌด ๋ณต์กํ ์์คํ ์ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด ๋ง์ด์ฃ . ๋๋ถ๋ถ์ ์ํํธ์จ์ด ์์คํ ์ ๋ชจ๋๋ฆฌ์ค๋ก ๊ตฌ์ถ๋์ด์ผ ํฉ๋๋ค. ๋ชจ๋ ธ๋ฆฌ์ค ๋ด์ ๋ชจ๋ํ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด๋, ์ด๋ฅผ ๋ณ๋์ ์๋น์ค๋ก ๋ถ๋ฆฌํ๋ ค๊ณ ํ์ง ๋ง์ญ์์ค. - ๋งํด ํ์ธ๋ฌ
์ด์ฒ๋ผ ์๋น์ค๊ฐ ์ปค์ง๋ฉด์ ์์คํ ์ด ๋ณต์กํด์ง๊ณ MSA๋ก ๋์ด๊ฐ๋ ํ์ํ ๋ฐฐํฌ, ๋ชจ๋ํฐ๋ง, ์ฅ์ ์ฒ๋ฆฌ, ์ต์ข ์ผ๊ด์ฑ, ๋ถ์ฐ ์์คํ ๋ฑ๋ฑ ๊ฒ๋ค ๋ณด๋ค ๋น์ฉ์ด ํฌ๋ค๋ฉด MSA๋ฅผ ์ ์ฉํด์ผ๋๋ ์๊ฐ์ผ ๊ฒ์ ๋๋ค.
MSA์ ์ง์ค
๋ง์ดํฌ๋ก์๋น์ค๊ฐ ์๋ชป ์ค๊ณ๋์์ ๋ ํ์ฅํ๋ ๊ฒ์ ์ด๋ ต์ง๋ง ํ์ฅํ ๋ค์ ๋ง์ดํฌ๋ก์๋น์คํํ๋ ๊ฒ์ ์ฝ์ต๋๋ค.
์๋น์ค ๊ฐ์ ์์ ์ ์ธ ๊ฒฝ๊ณ(bounded context)๋ฅผ ๊ฐ์ง ๋ ์ ๋์ํฉ๋๋ค.
๋น์ฆ๋์ค๊ฐ ์ถ๊ฐ๋๊ณ ๋ณ๊ฒฝ๋๋ค๋ฉด ๋ฆฌํฉํ ๋ง์ ๋ณต์ก๋๋ ๋ชจ๋๋ฆฌ์ค๋ณด๋ค ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ํจ์ฌ ์ด๋ ต์ต๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋จผ์ ๋ชจ๋๋ฆฌ์ค๋ฅผ ๊ตฌ์ถํ์ฌ ์ฌ๋ฐ๋ฅธ ๊ฒฝ๊ณ๊ฐ ๋ฌด์์ธ์ง ํ์ ํ ํ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ์ ์ฉํด์ผ ํฉ๋๋ค.
MSA ์ฅ/๋จ์
๋ง์ดํฌ๋ก ์๋น์ค๋ ๋์ฉ๋ ํธ๋ํฝ์ ๋์ํ๊ธฐ ์ํ ์ํคํ ์ณ ์ ๋๋ค.
์ฅ์ ๊ฐ ๋ ๊ฒ์ผ๋ก ์์ํ๊ณ ์๋น์ค๊ฐ ์ฅ์ ์ ์ ํ๋ฅผ ๋ง๊ณ ๋จ์ผ์ฅ์ ์ง์
์ ์์ ์ฅ์ ๋ด์ฑ์ ๊ฐํ๊ฒ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ด์ปค๋จธ์ค ์๋น์ค๊ฐ ๋ฌผ๊ฑด์ ๊ตฌ๋งคํ๋๋ฐ ๊ฒฐ์ DB์ ๋ฌธ์ ๊ฐ ์๊ฒจ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฒฐ์ DB์ ๋ฌธ์ ๊ฐ ์๊ฒจ ์ํ ๊ฒ์๋ ์ฐ์์ ์ผ๋ก ์ฅ์ ๊ฐ ๋ฐ์ํด ๋ชจ๋ ์๋น์ค๊ฐ ๋ค์ด๋๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
ํ์ง๋ง DB๋ฅผ ๊ฐ ๋ ๋ฆฝ์ ์ธ ์ปจํ ์คํธ๋ฅผ ๊ตฌ์ฑํ์ฌ ๊ฒฐ์ , ๊ฒ์, ์ฃผ๋ฌธ ๋ฑ์ผ๋ก ๋๋์ด ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ํ๋ค๋ฉด ๊ฒฐ์ ์ ์๋น์ค๊ฐ ๋ค์ด๋์ด๋ ์ํ ๊ฒ์์ ๊ฐ๋ฅํ๊ฒํ์ฌ ์ฅ๋ฐ๊ตฌ๋ ๋ฑ ๊ฒฐ์ ์ ๊น์ง์ ํ๋ก์ธ์ค๋ ์ ์์ผ๋ก ๋์๊ฐ์ผํฉ๋๋ค.
๊ทธ ์ดํ ๊ฒฐ์ ์๋น์ค๊ฐ ์ ์์๋๋๋ฉด ๋ค์ด์จ ์ด๋ฒคํธ ์์๋๋ก ์๋์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋๊ฒ ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋ง์ดํฌ๋ก์๋น์ค์ ํฐ ์ฅ์ ์ ๋๋ค.
๋ํ ์ ์ฐฉ์ ์ด๋ฒคํธ์ฒ๋ผ ํธ๋ํฝ์ด ๋ชฐ๋ ค ๋ถํ๊ฐ ์์๋๋ ์๊ฐ์ ์คํ ์ค์ผ์ผ์ ํตํด ๋์ฉ๋ ํธ๋ํฝ์ ์ฝ๊ฒ ๋์ํ ์๋ ์์ต๋๋ค.
ํ์ง๋ง ์ข์์ ์ด ์์ผ๋ฉด ๋ฐ๋ผ์ค๋ ๋จ์ ๋ ์กด์ฌํ๋๋ฐ, ๊ทธ๊ฒ์ ๋ฐ๋ก ์์์ ์ค๋ช
ํ ๋น์ฉ๋ฐ์
์
๋๋ค.
๋ชจ๋๋ฆฌ์ค ์๋น์ค๋ก ๊ณ ๋ฏผํ ํ์์๋ ์ํฉ๋ค์ ๋ง์ ๋น์ฉ์ ๋ฐ์์์ผ ๊ตฌ์ฑํด์ผํ๊ธฐ ๋๋ฌธ์ ์ตํ์ ์๋จ์ผ๋ก ์๊ฐํ์ฌ ๋์ ํด์ผ ํฉ๋๋ค.
์ฑ๊ณต์ ์ธ MSA ์ฌ๋ก - ์ฐ์ํํ์ ๋ค
๋ฐฐ๋ฌ์๋ฏผ์กฑ์์ ๋งค์ฐ ๊ฐ์ฌํ๊ฒ๋ ๋ง์ดํฌ๋ก์๋น์ค๋ก ์ ํํ๋ ๋ฐฐ๊ฒฝ๊ณผ ๊ธฐ์ ์ด์ผ๊ธฐ๋ฅผ ๋งค์ฐ ๊ฐ๋ตํ๊ณ ํต์ฌ๋ง ์ ๋ฆฌํ์ฌ ์ค๋ช ํด์ค ์์์ด ์์ต๋๋ค.
์์ ๋ด์ฉ์ ์์ฝํด๋ณด์๋ฉด ํฌ๊ฒ 4๊ฐ์ง์ ์์ฌ๋ก ์ด๋ค์ง๋๋ค.
๋ชจ๋๋ฆฌ์ค ํ๊ฒฝ์ ์นํจ ๋๋์ค
- 2015๋ ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ์ ๋ฃจ๋นDB ํ๋๋ก ์ ์ฒด ์๋น์ค๋ฅผ ์ด์์ค์ด์์
- ์นํจ์ด๋ฒคํธ(์นํจ๋๋์ค) ๊ณต๊ฒฉ์ ํ๋ก ํธ์๋ฒ๊ฐ ์ฃฝ์
- IDC โ AWS ํ๋ฃจ๋ง์ ์ด์
- AWS ์ด์ ํ๊ธฐ๋๋ฌธ์ ์ค์ผ์ผ์์ 100๋์ฆ์ค
- ๊ทธ๋ฌ๋๋ ์ฃผ๋ฌธ ์๋ฒ๊ฐ ์ฃฝ์
- ์ฃผ๋ฌธ AWS ์ด์
- ์ค์ผ์ผ์์ํด์ ์ฑ๊ณต
- ๊ทธ๋ฌ๋๋ ๊ฒฐ์ โ ์ธ๋ถ PG, ์นด๋์ฌ ์ฃฝ์
- ๊ทธ ๋ค์๋ ์ฅ๋น 2๋ฐฐ ํฌ์ ํด์ ๋์ํจ
๋ง์ดํฌ๋ก์๋น์ค๋ก ๋๋ฌํ๊ธฐ ์ํ ์ฒซ๊ฑธ์
- 2017๋ ๋ชจ๋๋ฆฌ์ค ๊ตฌ์กฐ์์ ํ๋์ฉ ๋ด์ด๋
- ๊ฐ๊ฒ ๋ชฉ๋ก+๊ฒ์์ ๋ผ์ด๋ด์ ES๋ก ๋ถ์ โ ๋ฃจ๋น DB๋ก ๊ฐ๋ ๋ถํ๊ฐ ํ์คํ ์ค์ด๋ฌ
- CQRS ํจํด
- ๋ช ๋ น๊ณผ ์ฟผ๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์์
- ๊ฐ๊ฒ ์์ธ ํ์ด์ง๋ ํธ๋ํฝ์ ๊ฐ๋นํ ์ ์์ด ๋ผ์ด๋ โ aws ๋ค์ด๋๋ชจ DB(nosql)๋ก select์ ํนํ๋๊ฒ์ ์ฌ์ฉ โ ๋ฃจ๋น DB์์ ๋ฐฐ์น๊ฐ ๊ณ์๋๋ฉด์ ์์ธ์ํจ
- ๊ฐ๊ฒ์์ธ, ๊ฐ๊ฒ๋ชฉ๋ก+๊ฒ์ ๋ถ๋ฆฌ๊ฐ ์๋ฃ๋จ
- ๊ทธ๋ค์ ์ฃผ๋ฌธ, ๋ฆฌ๋ทฐ๋ฅผ ๋ถ๋ฆฌ
- ์ฌ์ค ์ฃผ๋ฌธ์ด ๋น์ฆ๋์ค๊ฐ ์ ์ผ ๋ณต์กํจ
- ์ธ๋ถ API์ฐ๋์ด ๊ต์ฅํ ๋ง์ด ์ฎ์ฌ์์์
- ๋จ์ ์ผ๋ก ์ฃผ๋ฌธ์ด ์๋ฃ๋๋ฉด ๋ฆฌ๋ทฐ ์์คํ ์ ์ ๋ฌํด์ ๋ฆฌ๋ทฐ๋ฅผ ํด๋ฌ๋ผ๋ ์ฑํธ์๋ฅผ ๋ ๋ ค์ผํ๋ api๊ฐ ์์์
- ์ฃผ๋ฌธ์ด ์๋ฃ๋๋๋ฐ ๋ฆฌ๋ทฐ ์์คํ ์ด ์ฃฝ์ด๋ฒ๋ฆฌ๋ฉด ์ฃผ๋ฌธ์ด ์๋๋ ์ด์ํ ํ์์ด ๋ฐ์ํจ
- ๊ทธ๋์ ์ด ๋ง์ ์ธ๋ถ api๋ฅผ ์๋ฒฝํ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ๋ก ํจ
- aws - sqs ๋ฅผ ํตํด์ ์ฃผ๋ฌธ์์คํ ์์ ๋ฐ์๋๋ ์ด๋ฒคํธ(์์ฑ, ์ ์, ๋ฐฐ๋ฌ์๋ฃ, ์ทจ์ ๋ฑ)๋ค์ ๋ฉ์ธ์งํ๋ก ์ ๋ฌ
- ์ด๋ ๊ฒ๋๋ฉด ๊ธฐ์กด์ ๋ฆฌ๋ทฐ์์คํ ์ด ์ฃฝ์ด๋ ๋์ํ๊ฒ๋๊ณ api์ฝ์ด ์ ์ค๋ ๋ถ๋ถ๋ api ๊ฐ ์ด์๋๋ฉด ๋ค์ ์ฌ์ฒ๋ฆฌ ํ ์ ์๊ฒ ๊ฐ์ ๋จ
- ์์คํ ํ๋ณต๋ ฅ์ด ๊ธ๊ฒฉํ ์ข์์ง
- ํฌ๊ฒ 3๊ฐ์ง์ ์์ฑ์ ๊ฐ์ง ์ด๋ฒคํธ ํ๋ฅผ ๋ฐ์์ํด
- ๋ฆฌ๋ทฐ ์์คํ ์ ๋ฌ(์ธ๋ถ API)
- ๋ ๊ฑฐ์DB ์ฑํฌ(๋ฐ์ดํฐ ๋๊ธฐํ)
- ๋ผ์ด๋์ค ์์คํ (DB write โ ๋ฐ์ดํฐ ๋๊ธฐํ?)
- ํ๋์ db์์ msa๊ตฌ์กฐ๋ก ๊ฐ๋ฉด์ ๋ณ๊ฐ์ db๊ฐ ๋์ด ๊ฐ์ ์ปฌ๋ผ์ ๋ถ๋ฆฌํ ์ ๋ฐ์ ์์
- ๋ฐ์ดํฐ ๋๊ธฐํ ์ด์ ๋ฐ์
- ๊ฒ์, ์์ธ, nosql ์กฐํ์ ํนํ๋ ๊ณณ(Q)
- ๋ช ๋ น(C)์ด ๋ฐ์ํด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด๋ฒคํธ๋ฅผ ๋ฐํํด์ ์กฐํDB์ ์๋ฆผ
- ์กฐํ DB๋ ์๋ฆผ์ ๋ฐ๊ณ ์ฟผ๋ฆฌ๋ชจ๋ธ์์ ๊ฐฑ์
์ด๋ฒคํธ ์ ํ์ ๋๊ธฐํ
- Eventually consistency(์ต์ข
์ ์ผ๊ด์ฑ)
- ๋ฐ์ดํฐ๋ ์ธ์ ๊ฐ๋ ๋ค ๋ง์ถ์ด์ง๋ค
- ๋ฐ์ดํฐ ์ฑํฌ 1~3์ด
- ๋ฌธ์ ๋ฐ์์ ํด๋น ์์คํ ์ด ์ด๋ฒคํธ๋ง ์ฌ๋ฐํ
- ๋๋ถ๋ถ zero-payload ๋ฐฉ์ ์ฌ์ฉ
- ์ด๋ฒคํธ์ ์๋ณ์(ex ๊ฐ๊ฒID)์ ์ต์ํ์ ์ ๋ณด๋ง ๋ฐํ
- ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์์ ์ ์กฐํ API๋ก ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์กฐํํด์ ์ ์ฅ
- ๊ทธ๋ผ ์ด๋ ๊ฒ ํ๋ ์ด์ ๋?
- ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํด์ผํ๋๋ฐ ๊ฐฑ์ ํด์ผ๋ ๋ฐ์ดํฐ๊ฐ 2๊ฐ ๋์์์ค๋ฉด ์ด๋ค๊ฒ ์ฐ์ ์ธ์ง ๋น๊ตํด์ผ๋๊ณ ๋ง์ ๊ณ ๋ฏผ์ด ๋ค์ด๊ฐ(๋น์ฉ ๋ฐ์)
- ๊ทธ๋ฌ์ง ๋ง๊ณ id๊ฐ๋ง ๋ฐ์์ํค๊ณ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋๋ฉด ๋ฌด์กฐ๊ฑด ๊ฐฑ์ ํ์ (๋น์ฉ๊ฐ์) ํญ์ ์ต์ ์ผ๋ก ๋ณด๊ณ ๊ฐฑ์ ํ์
- ํ๋ง๋ค ์ํ๋ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅผ์๋ฐ์ ์๋๋ฐ ๊ทธ๋ฌ๋ฉด ํ๋ง๋ค ๋ค๋ฅธ ์ ๋ณด๋ฅผ ์ ๋ฌํด์ค์ผํจ(๋น์ฉ๋ฐ์)
- ๊ทธ๋์ id๊ฐ๋ง ์ด๋ฒคํธ ๋ฉ์ธ์ง๋ก ๋ฐํํ๊ณ ๊ฐํ์์ ํ์ํ ์ ๋ณด๋ค์ ์กฐํ API๋ฅผ ์คํ์๋ง๊ฒ ์ด์ด๋
- ์ต์ ๋ฐ์ดํฐ ๋ณด๊ด ์์น
- ๊ฐ ์์คํ ์์ ํ์ํ ์ต์ํ์ ๋ฐ์ดํฐ๋ง ๋ณด๊ดํ๋ค
- ๋ฐ์ดํฐ๋ฅผ ๋ค๊ฐ์ง๊ณ ์์ผ๋ฉด ๋ฌผ๋ฆฌ์ ์ธ ๊ด๊ณ๋ ์์ง๋ง ๋
ผ๋ฆฌ์ ์ธ ๊ด๊ณ๊ฐ ์ฑ๋ฆฝ๋์ด ๋ฐ์ดํฐ๋ฅผ ๋ค ๋น๊ตํด์ ์ฒ๋ฆฌํด์ผํจ
- ํ์์๋ ๋ฐ์ดํฐ๋ ๋ค๊ณ ์๋ค๋ฉด ํน์ ์์คํ
์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํด๋ด์ผ๋๋ ์ํฉ์ด ๋ฐ์ํจ (๋น์ฉ๋ฐ์)
- A ์์คํ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ํ๋๋ฐ B ์์คํ ์ ๋๊ฐ์ ์ ๋ณด๊ฐ ์๋๋ฐ ๋ค๋ฅธ๊ฐ์ ๊ฐ์ง๊ณ ์์๋ ์ด๋ป๊ฒ ๋น๊ตํ ๊ฒ์ธ๊ฐ? (๋น์ฉ๋ฐ์)
- B ์์คํ ์์ ํ์์๋ ์ ๋ณด์ธ๋ฐ๋ ๋ถ๊ตฌํ๊ณ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ฉด ๋น๊ตํด๋ด์ผ ๋๋ ๋น์ฉ์ ์ค์
- ํ์์๋ ๋ฐ์ดํฐ๋ ๋ค๊ณ ์๋ค๋ฉด ํน์ ์์คํ
์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํด๋ด์ผ๋๋ ์ํฉ์ด ๋ฐ์ํจ (๋น์ฉ๋ฐ์)
- ๊ฐ ์์คํ
๋ค์ ํด๋ฆฌ๊ธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ฅ์
- ์ฑ๋ฅ์ด ์ค์ํ ๋ ธ์ถ์ชฝ์ ๋ ๋์ค๋ nosql
- ๊ฒ์์ด๋ ๊ด๊ณ ๋ฆฌ์คํ ์ชฝ์ es
- ์ค์ง์ ์ write๊ฐ ์ฃผ์์คํ ์ธ ๊ณณ์ rdb
์์ ๋จ๊ณ
DB
- ์กฐํ(๊ณ ์ฑ๋ฅ)
- ๊ฐ๊ฒ๋ ธ์ถ: dynamo db, mongo db(nosql), redis(cache)
- ๊ด๊ณ ๋ฆฌ์คํ , ๊ฒ์: es(๊ฒ์์์ง)
- ๋ฐ๋ก๊ฒฐ์ ๋ผ์ด๋ธ: redis(cache)
- ๋ช
๋ น(์์ ์ฑ)
- ๊ด๊ณ : ์ค๋ก๋ผ db(rdb)
- ๊ฐ๊ฒ/์ ์ฃผ: ์ค๋ก๋ผ db(rdb)
- ๋์ฉ๋ํธ๋ํฝ์ด ๋นก ๋ชฐ๋ ค๋ cqrs ๊ตฌ์กฐ์ด๊ธฐ๋๋ฌธ์ ์ด์๋จ์ ์ ์์
- msa ๊ตฌ์กฐ๋ก ๊ฐ๋ณ ์ค์ผ์ผ๋ง ๊ฐ๋ฅ
์ฅ์ ๊ฒฉ๋ฆฌ
- ๊ฐ ์์คํ ์ด ๋ด๋ถ์ ํ์ํ ๋ฐ์ดํฐ ๋ณด๊ด
- ๋ด๋ถ ์๋น์ค(๊ด๊ณ , ๊ฒ์)์ ๋ชจ๋ ๋ณ๊ฒฝ ๋ด์ญ์ด ์ด๋ฒคํธ๋ก ์ ๋ฌ
- ์ฅ์ ์ ๋ฐ์ดํฐ ์ฑํฌ๊ฐ ๋ฆ์ด์ ธ๋ ๊ณ ๊ฐ ์๋น์ค ๊ฐ๋ฅ
๋ฐ์ดํฐ ์ฑํฌ ์ฅ์ ๋์
- ์ด๋ฒคํธ ์ฌ๋ฐํ
- ํ ์ฅ์ ๋ฐ์์
- ์ ์ฒด IMPORT API ์ ๊ณต
- ๋ถ๋ถ IMPORT API ์ ๊ณต
- ์ต๊ทผ ์ ๋ฐ์ดํธ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋จ์๋ก ๋ถ๋ถ ์ ๊ณต (๋ฐฐ์น์ฑ)
๊ธฐํ
- ์ ๊ทน์ ์ธ ์บ์ ์ฌ์ฉ
- ์ํท ๋ธ๋ ์ด์ปค
- ๋น๋๊ธฐ ๋
ผ๋ธ๋ญํน ์์คํ
์ ์ฉ
- ์คํ๋ง ์นํ๋ญ์ค, ๋ฆฌ์กํฐ
- ๊ฐ๊ฒ๋ ธ์ถ, ๊ด๊ณ ๋ฆฌ์คํ , ๊ฒ์
์ ๋ฆฌ
- ๋ฐฐ๋ฏผ์ ๊ฑฐ๋ํ CQRS
- ์ฑ๋ฅ์ด ์ค์ํ ์ธ๋ถ ์์คํ (์กฐํ)๊ณผ ๋น์ฆ๋์ค ๋ช ๋ น์ด ๋ง์ ๋ด๋ถ ์์คํ (๋ช ๋ น)์ผ๋ก ๋ถ๋ฆฌ
- ์ด๋ฒคํธ ๋ฐํ์ ํตํ Eventually consistency(์ต์ข ์ ์ผ๊ด์ฑ)
- ๊ฐ ์์คํ
์ API ๋๋ ์ด๋ฒคํธ ๋ฐฉ์์ผ๋ก ์ฐ๋
- ์ฃผ๋ฌธ์ ๋ง์ง๋ง validation์ api๋ฅผ ํตํด ์งํํจ
- ์ง์ง ๋ง๋๊ฐ ํ์ธ
- ์ด๋ฒคํธ ๋ฐฉ์์ ์ต์ข ์ ์ผ๊ด์ฑ์ด์ง๋ง, ์ค์๊ฐ ๋๊ธฐํ๊ฐ ์๋๊ธฐ ๋๋ฌธ
- ์ฃผ๋ฌธ์ ๋ง์ง๋ง validation์ api๋ฅผ ํตํด ์งํํจ
์ดํ
- MSA ๊ผญํด์ผ๋๋?
- ๋งํ๋ค์ํผ ์์กด์ ๋ฌธ์
- ํธ๋ํฝ์ด ๋ง๊ณ
- ์ฌ์ฉ์๋ ๋ง๊ณ
- ์ฅ์ ๋ ๋ง๋ค๋ฉด
- ์์กด์ ์๋จ์ผ๋ก ํด๊ฒฐํด์ผํจ
- MSA ํ๊ธฐ์ ์ ๋จ์ํ ์กฐ์ธํ๋๋ง ํด์ ํด๊ฒฐ์ด ๋ ๊ฑฐ๋ฅผ ๋ฐ์ดํฐ ๋๊ธฐํ์ ๊ฒฝ์จ์ผ๋๊ณ ํธ๋์ญ์ ์ ๊ฒฝ์จ์ผ๋๊ณ ๊ทธ๋ฐ ๋น์ฉ์ด 10๋ฐฐ์ ๋ ๋๋์
- ๊ทธ๋ฐ ๋น์ฉ์ ์์ํ ๋งํผ์ ์ด์ ์ด ์์๋ โ ์์กด์ ์๋จ
๋ง๋ฌด๋ฆฌ
๋ง์ดํฌ๋ก์๋น์ค์ ๋ํด ์์๋ณด๊ธฐ ์ ์ ๋ฌด์กฐ๊ฑด ์ข์์ค๋ก๋ง ์์๋ ๋ฐ์ฑ์ ์๊ฐ์ด ๋์์ต๋๋ค.
๋ฐฐ๋ฏผ์์ ์ฌ๋ฆฐ ๋ง์ดํฌ๋ก์๋น์ค ์ฌํ๊ธฐ๋ ์์ผ๋ก ๊ณฑ์น์ผ๋ฉด์ ์์์ ์์ฒญํ๊ฒ ๋ ๊ฒ ๊ฐ๋ค์.. ๐ซ
์์กด์ ์๋จ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ์ ๊น์ง ๋ฐ์ด๋๋์ปจํ ์คํธ๋ฅผ ๋ถ๋ฅํ๊ณ ๋ฉํฐ๋ชจ๋๋ก ๊ตฌ์ฑํ๋ ๊ฒ๋ถํฐ ์งํํ ํ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๋์ ํด์ผ ์์ ์ ์ธ ์๋น์ค๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค๋ ๋ง์ ํฐ ๊ณต๊ฐ์ ํฉ๋๋ค..
์ด ๊ธ์์ ์คํจ์ฌ๋ก๋ฅผ ๋ค๋ฃจ์ง ์์์ง๋ง, ๋ง์ ๊ธฐ์ ๋ค์ด ์ํ์ฐฉ์ค๋ฅผ ๊ฒช์๊ณ , ๊ทธ ์ํ์ฐฉ์ค ๋ค์ ์ ๊ฐ ์๋ ๊ฒ์ ์ ๋ฐฐ ๊ฐ๋ฐ์๋ค์๊ฒ ๊น์ ๊ฐ์ฌํจ์ ๋๋ผ๋ฉฐ.. ์ด๋ง ๊ธ์ ๋ง๋ฌด๋ฆฌ ์ง๊ฒ ์ต๋๋ค.
๋ค์ ๊ธ์ ๋ง์ดํฌ๋ก์๋น์ค์์ ์์ฃผ ๋ฑ์ฅํ๋ CQRS ํจํด์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๋!
Uploaded by N2T