MSA๋ฅผ ๊ณต๋ถํ๊ฒ ๋ ๊ณ๊ธฐ
์์ ์ ๋ชจ ์คํํธ์
์ ๊ธฐ์ ๋ฉด์ ์์ "์ ๋ช
๊ฐ์ ๊ณต์ฐ ํฐ์ผํ
์ผ๋ก ๋ฐ๋ ค์ฌ ํน์ ๊ธฐ๊ฐ์ ๋ชฐ๋ ค์ฌ ํธ๋ํฝ์ ๋๋นํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋๊ฐ?"
๋ผ๋ ์ง๋ฌธ์ ๋ฐ์์๋ค.
๋น์ ๋์ ๋ต๋ณ์, Auto-Scaling๊ณผ Waiting Queue๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด์๋ค.
CPU ์ฌ์ฉ๋์ ํน์ ์์น๋ฅผ ๋์ด๊ฐ๋ฉด ์ธ์คํด์ค๋ฅผ ๋ณต์ ํ๊ณ , ๋ฉ์์ง ํ๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ํฝ ์ ์ด์ ๋ฐ๋ผ ์ค์ ๋๊ธฐ ์ค์ธ ์ฌ์ฉ์๋ค์ ์๋ณ ๊ฐ๋ฅํ ์์ด๋๋ฅผ ๋ด์ ๋ฉ์์ง๋ฅผ ๊ด๋ฆฌํ๊ณ ๋น์ฉ ํจ์จ์ฑ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
ํ์ง๋ง, ๊ณ ๋ คํ์ง ์์๋ ๋ถ๋ถ์ด ์์๋๋ฐ ์ค์ ์ฌ์ฉ์๋ ์๋ง ๋ช
, ์์ญ๋ง ๋ช
์ด ๋์์ ๊ฐ์ 0.1์ด ์ด๋ด๋ก ๋ชฐ๋ฆด ์๋ ์๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฐ ์ํฉ์ Auto-Scaling ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ธ์คํด์ค๊ฐ ๋ณต์ ๋๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ๋๋ ์๊ฐ์ ๊ธฐ๋ค๋ฆฌ๋ค ๋ณด๋ฉด ์ด๋ฏธ ์ฅ์ ๊ฐ ๋ฐ์ํด ์์ ๊ฒ์ด๋ค. ๐
ํด๊ฒฐ ๋ฐฉ๋ฒ์
๋ถํ ํ
์คํธ๋ฅผ ํตํด ํ๋์ ์ธ์คํด์ค๊ฐ ๊ฒฌ๋ ์ ์๋ ์คํธ๋ ์ค๋ฅผ ์ธก์ ํ๊ณ ๋ฏธ๋ฆฌ ์์ธก๋๋ ์ฌ์ฉ์์ ์๋ณด๋ค
๋ ํฐ Traffic์ ๊ฒฌ๋ ์ ์๋๋ก ์ธ์คํด์ค๋ฅผ ๋ฏธ๋ฆฌ ์ฌ๋ฌ ๊ฐ ๋ณต์ ํ์ฌ ์คํํด ๋๋ ๊ฒ์ด๋ค.
(๋ฌผ๋ก , ๋ ๋ง์ ๋ณต์กํ ์ผ์ด ๋จ์ ์์ ๊ฒ์)
๋ํ, ์ฌ๊ธฐ์ MSA๋ฅผ ๊ณต๋ถํ๊ฒ ๋ ๊ณ๊ธฐ๊ฐ ์๋ค.
ํธ๋ํฝ์ด ๋ชฐ๋ฆฌ๋ ๊ฒ์ ์ํ๊ณผ ํฐ์ผ ๊ตฌ๋งค ์ด๋ฒคํธ๋ฅผ ๋ด๋นํ๋ ์๋น์ค์ด๋ค. ํ์ง๋ง, Monolithic ํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ทธ๋๋ก ๋ณต์ ํ๋ค๋ฉด ํ์๋ ์๋ ๋ค๋ฅธ ์ด๋ฒคํธ๋ฅผ ์ํ ์์๋ ๋๋ฆฌ๊ฒ ๋๊ณ ๊ตฌ๋งค ์ด๋ฒคํธ์ ์ง์คํ ์ ์๋ค.
์ด๋, ์๋น์ค๋ฅผ Micro Service๋ก ์๊ฒ ๋๋์ด ๋
๋ฆฝ์ ์ผ๋ก ๋ง๋ค๊ฒ ๋๋ค๋ฉด, ๊ตฌ๋งค ์ด๋ฒคํธ๋ง ์์์ ํจ๊ณผ์ ์ผ๋ก ๋๋ฆด ์ ์๋ค.
์ด๊ฒ์ด, Amazon์ 0.66์ด ๋ฐฐํฌ์ ๋น๋ฐ์ด๋ค.
Monolith์ Micro Service์ ์ฐจ์ด
Monolithic Architecture
๋ชจ๋ ธ๋ฆฌ์ ์ํคํ ์ฒ๋ ์ฐ๋ฆฌ๊ฐ ์์ฃผ ๊ตฌ์ฑํ๋ ๋จ์ผ ์ฝ๋ ๋ฒ ์ด์ค ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ์ด๋ค. ์ ์ฒด๊ฐ ํ๋์ Language๋ก ์์ฑ๋์ด ๋จ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋๋ค.
1) Monolithic Architecture ์ฅ์
- ๋จ์ํ๋ค: ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ๋๋ก ๋ญ์ณ์๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ ์ฌํญ์ด ํ์ํ ๋ ํ ๊ณณ์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์คํํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ธํ๋ผ ๊ด๋ฆฌ๋ ํธํ๋ค.
- ํ ์คํธ๊ฐ ์ฝ๋ค: ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์์กด์ฑ์ด ์๊ธฐ ๋๋ฌธ์, ํ ์คํธ๊ฐ ์ฝ๋ค.
- ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ฝ๋ค: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถ๋ฆฌํ๋ ค๋ฉด ์๋น์ค ๊ฐ์ ํต์ , ๋ฐฐํฌ, ์ธํ๋ผ ์ค๊ณ ๋ฑ ๋ง์ ๋ถ๋ถ์ ์์ด์ ๋ณต์กํด์ง์ง๋ง, ๋ชจ๋๋ฆฌ์ ํ ๊ตฌ์กฐ๋ ๋จ์ํ๊ฒ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
2) Monolithic Architecture ๋จ์
์ฅ์ ์ด ์์ผ๋ฉด ๋จ์ ์ด ์๋ ๊ฒ ์ด์น๋ค..
- ์ ์ฐํ์ง ์๋ค: ํน์ ์ด๋ฒคํธ์ ๋ํด์๋ง ํ์ฅํ ์ ์๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด๋ฅผ ํ์ฅํด์ผ ํ๋ค.
- ํ์ ๋ถ๋ฆฌํ๊ธฐ ์ฝ์ง ์๋ค: ๋ชจ๋ ํ์ด ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ผ๋ก ์์ ์ ์งํํ๋ฉด, ์๋ฌด๋ฆฌ ๊ท์น์ ์ ์ ํ๋๋ผ๋ ์๋ ์์ด ์ถฉ๋์ด ๋ฐ์ํ๊ณ ์ปค๋ฎค๋์ผ์ด์ ์ ๋ง์ ๋น์ฉ์ด ๋ค ๊ฒ์ด๋ค.
- ๊ธฐ์ ์ฌ์ฉ์ด ์ ํ๋๋ค: ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๊ณ ์๋ Language๋ฅผ ์ผ๋ถ๋ง ๋ฐ๊ฟ ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค๋ ๊ธฐ๊ฐ ๋์ผํ ๊ธฐ์ ์ ์ฌ์ฉํด์ผ ํ๋ค.
Micro Service Architecture
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์๋น์ค๋ก ๋๋๊ณ , ์๋ก ์ํฉ์ ๋ฐ๋ผ 100% ๋ ๋ฆฝ์ ์ด์ง๋ ์์ง๋ง ๋์จํ๊ฒ ๊ฒฐํฉ๋๋๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ์์ด๋ค. ๊ฐ ์๋น์ค๋ง๋ค ๊ฐ๋ณ Database๋ฅผ ์ฌ์ฉํ๊ณ , ์ด์ ๋ฐ๋ผ ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ฑ ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํจ์ผ๋ก ๋ง์ ๊ฒฝํ์ด ํ์ํ๋ค.
1) Micro Service Architecture ์ฅ์
Monolithic์ ๋จ์ ์ด MSA์ ์ฅ์ ์ด ๋๋ค.
- ์ ์ฐํ๋ค: ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์์ผ๋ฏ๋ก ํน์ ์ด๋ฒคํธ๋ฅผ ๋ด๋นํ๋ ์๋น์ค๋ง ํ์ฅํ๊ฑฐ๋ ์ถ์ํ ์ ์๋ค.
- ํ์ ๋ถ๋ฆฌํ๊ธฐ ์ฝ๋ค: ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ถ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ ํ๋ง๋ค ํ๋์ ์๋น์ค๋ฅผ ๋ด๋นํ๋ ์์ผ๋ก, ํ๋ง๋ค์ ๋์จํ ๊ฒฐํฉ์ด ํ์ฑ๋ ์ ์๋ค.
- ๊ธฐ์ ์ฌ์ฉ์ด ์ ์ฐํ๋ค: ๊ฐ ํ์์ Language๋ ๊ธฐ์ ์คํ์ ์ ์ํ๊ณ ๊ฐ๋ฐํ ์ ์๋ค. ํ ์ค, ๋น๊ทผ ๋ฑ ์ฌ๋ฌ ๊ธฐ์ ์์ ํ๋ง๋ค Python, Java, Kotlin, Ruby, Golang ๋ฑ ๋ค์ํ ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ์๋ค.
- ๋ฏผ์ฒฉํ๋ค: ์๋ง์กด์ด 0.66์ด๋ง๋ค ์๋ก์ด ์ฌํญ์ ๋ฐฐํฌํ๋ฏ์ด, ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฏผ์ฒฉํ๊ฒ ์ ๋ฒ์ ์ ๋ฐฐํฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค.
- ์ ์ฒด ์๋น์ค ์ฅ์ ์ํ ๊ฐ์: ๋ชจ๋ ธ๋ฆฌ์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ๋ถ๋ถ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ ์ฒด๋ก ์ ์ด๋์ง๋ง, ๋ง์ดํฌ๋ก ์๋น์ค๋ ์๊ธฐ ์์ ์ ์๋น์ค์๋ง ์ํฅ์ ๋ฏธ์น๋ฏ๋ก, ๋ค๋ฅธ ๋ง์ดํฌ๋ก ์๋น์ค์๋ ์ฅ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
2) Micro Service Architecture ๋จ์
MSA๋ ๋ง์ ๋๊ฐ๋ฅผ ์น๋ค์ผ ๋ค๋ฃฐ ์ ์๋ค..
- ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ํต์ : ๊ฐ ์๋น์ค๋ง๋ค ํต์ ํ๊ธฐ ์ํด์๋ ๋๊ธฐ or ๋น๋๊ธฐ ํต์ ์ ์ฌ์ฉํ์ฌ์ผ ํ๋ฉฐ, ์ด๋ฐ ๋ถ๋ถ์์ kafka ํน์ ๋ค๋ฅธ ๊ธฐ์ ์ ๋์ ํด์ผ ํ๋ฏ๋ก ๋ณต์กํด์ง ์ ์๋ค.
- ํ ์คํธ๊ฐ ์ด๋ ต๋ค: ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ๋ค๋ฅธ ๋ง์ดํฌ๋ก์๋น์ค์ ์์กดํ๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด ๊ฒฝ์ฐ์ ๋จ์ ํ ์คํธ๋ Mock ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์งํํ ์ ์๊ฒ ์ง๋ง, ํตํฉ ํ ์คํธ์ ๊ฒฝ์ฐ ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค๋ ๋ฉ์์ง ํ๊ฐ ์คํ๋๊ณ ์๋ ํ๊ฒฝ์์ ์งํํด์ผ ํ๊ธฐ์ ๋ณต์กํด์ง ์ ์๋ค.
- ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์ํ ์์ ์ด ํ์ํ๋ค: ๊ฐ ๋ง์ดํฌ๋ก ์๋น์ค์์ ์๋ก ์ค๋ณต๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์ํ ์์ ์ด ํ์ํ๋ค.
- ์ฅ์ ๋ฐ์ ์ ๋๋ฒ๊น ์ด ์ด๋ ต๋ค: ๋๋ฒ๊น ์์ ์ฌ๋ฌ ๋ง์ดํฌ๋ก ์๋น์ค์ ๋ฉ์์ง ํ ๋ฑ ์ฌ๋ฌ ์๋น์ค๋ฅผ ์คํํ ์ํ๋ก ์งํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ณต์กํ๋ค.
MSA ํน์ง
์์์ ์ธ๊ธํ MSA์ ์ฅ์ ๊ณผ ๋น์ทํ์ง๋ง, ๋งํดํ์ธ๋ฌ๊ฐ ์ธ๊ธํ MSA์ ํน์ง์ ์๋์ ๊ฐ๋ค.
- ์
๋ฌด ๊ธฐ๋ฅ์ ์ค์ฌ์ผ๋ก ํ์ ๊ตฌ์ฑํ ์ ์๋ค.
- ๊ธฐํ์, ์ค๊ณ์, FE•BE ๊ฐ๋ฐ์, ๋์์ด๋, ํ ์คํฐ ๋ฑ์ ์ง๊ตฐ์ด One Team
- ์ค์ ๊ฑฐ๋ฒ๋์ค ํ์์ด ์๋๋ผ, ์์จ์ ์ธ ๋ถ๊ถ ๊ฑฐ๋ฒ๋์ค๋ก ํด๋ฆฌ๊ทธ๋ํ๊ฒ ์์จ์ ์ธ ์ ํ์ ํ ์ ์๋ค.
- ํ๋ก์ ํธ๊ฐ ์๋๋ผ, ํ๋ก๋ํธ๋ฅผ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ ์๋ช
์ฃผ๊ธฐ๊ฐ ๋ณํ๋์๋ค.
- ์ ์ง ๋ฐ๋ณต์ ์ธ ๋ชจ๋ธ, ์ ํ ์ค์ฌ์ Agile ๊ฐ๋ฐ ๋ฐฉ์์ผ๋ก 2~3์ฃผ ๋จ์์ Sprint๋ฅผ ํตํด ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌํ๋ค.
- ๋ง์ ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ํจ์จ์ ์ผ๋ก ๋ฐฐํฌํ๊ธฐ ์ํด ์ธํ๋ผ ์๋ํ๋ฅผ ๊ตฌ์ฑํด์ผ ํ๋ค.
- ์ด์ ์, ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ๋ฐฐํฌ ์๋ํ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ ์ ์ด ์๋ค.
์ด๋, ํ๋ก์ฐ๋ฅผ ๋งํ์๋ฉด
1. Github์ Master ๋ธ๋์น์ ์๋ก์ด ์ฝ๋๊ฐ Merge๋๋ค.
2. Github Webhook ์ ํตํด Jenkins์ ๋น๋ ํ์ดํ๋ผ์ธ์ด Trigger๋๋ค.
3. ์์ค ์ฝ๋๋ฅผ ๋น๋ํ๊ณ Docker Image๋ฅผ AWS ECR๋ก ์ ๋ก๋ ํ๋ค.
4. ์ด์ ํ๊ฒฝ์ ์ ์ฅ๋ ๋ฐฐํฌ Shell Script๊ฐ ์คํ๋์ด ์๋ก์ด ๋ฒ์ ์ด ์คํ๋๋ค. - ์ฌ๊ธฐ์, ๋ ์ค๋ฌด์ ์ผ๋ก๋ ํ ์คํธ ํ๊ฒฝ์ ๋จผ์ ๋ฐฐํฌํด์ ํ ์คํธ๊ฐ ์ ์ฒด ์ฑ๊ณตํ์ ๋, ์ด์ ํ๊ฒฝ์ ๋ฐฐํฌ๋๋๋ก ํ๋ ๊ฒ์ด ์ข๋ค.
- ์ด์ ์, ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ๋ฐฐํฌ ์๋ํ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ ์ ์ด ์๋ค.
- ๋ถ์ฐ๋ DB ํ๊ฒฝ์ ๊ฐ์ง๋ค.
- ๋ฌผ๋ก , DB๊ฐ ๋ถ์ฐ๋์ด ์์ง ์๋ค๊ณ ํด์ MSA๊ฐ ์๋๋ค๋ผ๊ณ ๋ ํ์ง ๋ชปํ์ง๋ง, MSA์ ์ฅ์ ์ ์ด๋ฆฌ์ง ๋ชปํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ๋ถ์ฐ๋ DB ํ๊ฒฝ์์ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ๋ง์ถฐ์ฃผ๊ธฐ ์ํด์ ํธ๋์ญ์ ์ ๋ถ๋ฆฌํ๊ณ Message Queue ๋งค์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ๋ณด์ ํธ๋์ญ์ ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ์ฉํด์ผ ํ๋ค.