์๋ฒ ์ด์คํ์ ๋ถ์ฐ ์ฒ๋ฆฌ๋ ๊ณ ๊ฐ์ฉ์ฑ๊ณผ ์์ ์ฑ์ ํ๋ณดํ๊ธฐ ์ํด ํ์์ ์ด๋ค. ๋จ์ผ ์๋ฒ๋ก๋ ๋๋์ ํธ๋ํฝ๊ณผ ์ฅ์ ๋ฐ์ ์ ๋ณต๊ตฌ๋ฅผ ๊ฐ๋นํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ค์์ ์๋ฒ๋ก ๋ถํ๋ฅผ ๋ถ์ฐํ๊ณ ๋ฐฑ์ ์์คํ ์ ๋ง๋ จํด์ผ ํ๋ค. ํนํ, ์ด์ปค๋จธ์ค๋ ๊ธ์ต ์๋น์ค์ฒ๋ผ ์ค์๊ฐ ์ฒ๋ฆฌ๊ฐ ์ค์ํ ํ๊ฒฝ์์๋ ์๋ ํ์ฅ(Auto Scaling)๊ณผ ๋ฌด์ค๋จ ์ด์์ด ํ์์ ์ด๋ค.
1. ์๋ฒ ์ด์คํ (Server Redundancy)
์๋ฒ ์ด์คํ๋ ์ฅ์ ๋๋น(High Availability, HA - ๊ณ ๊ฐ์ฉ์ฑ)๋ฅผ ์ํ ๊ฐ๋
์ด๋ค.
ํ๋์ ์๋ฒ๊ฐ ๋ค์ด๋๋๋ผ๋ ๋ค๋ฅธ ์๋ฒ๊ฐ ๋์ ์ญํ ์ ์ํํ ์ ์๋๋ก ๋ฐฑ์
์๋ฒ๋ฅผ ์ค๋นํ๋ ๋ฐฉ์์ด๋ค.
โ๏ธ ์๋ฅผ ๋ค๋ฉด?
DB ์๋ฒ ์ด์คํ: Master-Slave ๊ตฌ์กฐ
์น ์๋ฒ ์ด์คํ: ๋ก๋๋ฐธ๋ฐ์ + ๋ ๊ฐ์ ๋์ผํ ์น ์๋ฒ
โ๏ธ ํน์ง
- Failover(์ฅ์ ๋ฐ์ ์ ์ ํ): ํ ์๋ฒ๊ฐ ์ฃฝ์ผ๋ฉด ๋ค๋ฅธ ์๋ฒ๊ฐ ๋์ ํจ
- Active-Active or Active-Standby ๊ตฌ์ฑ ๊ฐ๋ฅ
- Active-Active: ๋ ์๋ฒ๊ฐ ๋์์ ์ด์๋๋ค๊ฐ ํ์ชฝ์ด ์ฃฝ์ผ๋ฉด ๋๋จธ์ง๊ฐ ์ ์ฒด๋ฅผ ๋ด๋น
- Active-Standby: ํ ์๋ฒ๋ง ์ด์๋๊ณ ๋ค๋ฅธ ํ๋๋ ๋๊ธฐ
- ์ฅ์ ๋์ ๋ชฉ์ (์ฑ๋ฅ ๋ถ์ฐ์ด ์๋)
2. ์๋ฒ ๋ถ์ฐ ์์คํ (Distributed System)
๋ถ์ฐ ์์คํ
์ ์ฌ๋ฌ ์๋ฒ๊ฐ ํ๋์ ์์คํ
์ฒ๋ผ ๋์ํ๋ ๊ตฌ์กฐ์ด๋ค.
์ฆ, ์ฑ๋ฅ์ ๋์ด๊ณ ์์
์ ๋ถ์ฐํ๊ธฐ ์ํด ์ฌ๋ฌ ์๋ฒ๊ฐ ํ๋ ฅํด์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
์ด์ปค๋จธ์ค ํ๋ซํผ์ด๋ ๋ํ ์์น ์์ง์ ๋ถ์ฐ ์๋น์ค(Distributed System)๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๊ณ ์๋ค.
๋ถ์ฐ ์ฒ๋ฆฌ๋ ๋๋ถ๋ถ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ(MSA) + ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค + ๋ก๋ ๋ฐธ๋ฐ์ฑ ์กฐํฉ์ ์ฌ์ฉํด ๋๋์ ํธ๋ํฝ์ ๋๋์ด ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
์ด์ปค๋จธ์ค ํ๋ซํผ์์๋ ์๋ง์ ์ด์ฉ์๊ฐ ๋์์ ์ ์ํ์ฌ ์ด๋น ์์ญ~์๋ฐฑ๋ง ๊ฑด์ ํธ๋์ญ์ ์ด ๋ฐ์ํ๋ค. ๋จ์ผ ์๋ฒ๋ก๋ ์ด๋ฌํ ํธ๋ํฝ์ ๊ฐ๋นํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ถ์ฐ ์ฒ๋ฆฌ๊ฐ ํ์์ ์ด๋ค. ๋ํ, ๋ฌผ๋ฅ ๋ฐ ์ฃผ๋ฌธ ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ด๊ณ ๊ฒ์์ ์ต์ ํํ๊ธฐ ์ํด์๋ ๋ถ์ฐ ์์คํ ์ด ํ์ํ๋ค. ํนํ ๋ธ๋ํ๋ผ์ด๋ฐ์ด์ ๊ฐ์ ์ธ์ผ ๊ธฐ๊ฐ์๋ ํธ๋ํฝ์ด ํญ์ฆํ๊ธฐ ๋๋ฌธ์, ์๋ ํ์ฅ(Auto Scaling) ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ์๋ฒ ๋ค์ด ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ผ์ ์์ ์ ์ธ ์๋น์ค ์ด์์ ์ํด ๋ถ์ฐ ์์คํ ์ ํ์ฉํ ์ ์ฐํ ํ์ฅ์ฑ๊ณผ ๋ถํ ๋ถ์ฐ์ด ํ์์ ์ด๋ค.
โ๏ธ ์๋ฅผ ๋ค๋ฉด?
์๋ฅผ ๋ค์ด์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ (MSA, Microservices Architecture)์ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด์. ๊ฐ ๊ธฐ๋ฅ์ ๋ ๋ฆฝ์ ์ธ ์๋น์ค(์๋ฒ)๋ก ๋๋๊ณ , API๋ฅผ ํตํด ํต์ ํ๋ ๋ฐฉ์์ด๋ค. ์ฟ ํก์ด๋ ์๋ง์กด๊ฐ์ ๋ํ ์ด์ปค๋จธ์ค ํ๋ซํผ ์น์ฌ์ดํธ์์ ํํ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ํ๋์ ๋ํ ์๋ฒ์์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ธ ์๋น์ค๋ก ๋๋์ด ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ์ด๋ค.
์ํ ์๋น์ค(์ํ ๋ชฉ๋ก, ๊ฒ์), ํ์ ๊ด๋ฆฌ ์๋น์ค(๋ก๊ทธ์ธ, ํ์๊ฐ์ ), ์ฃผ๋ฌธ ์๋น์ค(์ฅ๋ฐ๊ตฌ๋, ๊ฒฐ์ ), ๋ฐฐ์ก ์๋น์ค(์ด์ก์ฅ, ๋ฐฐ์ก ์กฐํ) ๋ฑ์ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ธ ์๋ฒ๋ก ๋ถ๋ฆฌํ์ฌ ์ด์ํ๋ ๋ฐฉ์์ด๋ค. ๊ฐ ์๋น์ค๋ ๊ฐ๋ณ์ ์ผ๋ก ๋์ํ๋ฉฐ, ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๋ฐ ํ์ฅ์ด ๊ฐ๋ฅํ๋ค. ๋ํ, ์๋น์ค ๊ฐ์๋ API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค. ์ด๋ฌํ ์ํคํ ์ฒ๋ฅผ ์ ์ฉํ๋ฉด ํน์ ์๋น์ค(์: ๊ฒฐ์ ์๋น์ค)์ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ ค๋ ์ ์ฒด ์์คํ ์ด ๋ง๋น๋์ง ์๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉ๋๋ AWS, Kubernetes์ ๊ฐ์ ํ๊ฒฝ์์๋ ๊ฐ๋ณ ์๋น์ค๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ธ์คํด์ค๋ก ๋ฐฐํฌ๋๋ค.
โ๏ธ ํน์ง
- ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค (์: Cassandra, Google Spanner)
- ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์๋ฒ์ ๋๋ ์ ์ฅํ๊ณ , ํ์ํ ๋ ๊ฐ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ด
- ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ (MSA, Microservices Architecture)
- ๊ธฐ๋ฅ๋ณ๋ก ์๋ฒ๋ฅผ ๋ถ๋ฆฌํ์ฌ API๋ฅผ ํตํด ํต์ (ex: ์ฃผ๋ฌธ ์๋น์ค, ๊ฒฐ์ ์๋น์ค, ๋ฐฐ์ก ์๋น์ค ๊ฐ๊ฐ ๋ถ๋ฆฌ)
- MapReduce ๊ธฐ๋ฐ ๋น ๋ฐ์ดํฐ ์์คํ (์: Hadoop, Spark)
- ์์ ๋ถ์ฐ (Load Distribution)
- ๊ฐ ์๋ฒ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ๋ฉด์๋ ํ๋ ฅํจ
- ํ์ฅ์ฑ(Scalability) ์ฐ์ (์๋ฒ ์ถ๊ฐ ๊ฐ๋ฅ)
- ํ ๋๊ฐ ์ฃฝ์ด๋ ์์คํ ์ ์ฒด๊ฐ ์ํฅ์ ๋ ๋ฐ์
โญ ์ฆ, ์๋ฒ ์ด์คํ๋ ๋ฐฑ์ ๊ฐ๋ , ๋ถ์ฐ ์์คํ ์ ์ฌ๋ฌ ๊ฐ๊ฐ ํจ๊ป ์ผํ๋ ๊ฐ๋ !
3. Load Balancing (๋ก๋ ๋ฐธ๋ฐ์ฑ)
๊ทธ๋ ๋ค๋ฉด ์๋ฒ ๋ถ์ฐ ์์คํ (Distributed System)๊ณผ ๋ก๋ ๋ฐธ๋ฐ์ฑ(Load Balancing)์ ๋น์ทํ ๊ฐ๋ ์ผ๊น?
๋์ ๊ด๋ จ์ ์์ง๋ง ๊ฐ์ ๊ฐ๋
์ ์๋๋ค.
โ๏ธ ๋ก๋ ๋ฐธ๋ฐ์ฑ (Load Balancing)์ด๋?
์ฌ๋ฌ ์๋ฒ ์ค ์ด๋ ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์ง ๋ถ๋ฐฐํ๋ ์ญํ ์ ํ๋ค.
์ฆ, ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ถ์ฐํ์ฌ ํน์ ์๋ฒ์ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆฌ์ง ์๋๋ก ์กฐ์ ํ๋ ๊ธฐ๋ฅ์ ํ๋ ๊ฒ์ด ๋ก๋๋ฐธ๋ฐ์์ด๋ค.
๋ณดํต์ ๋ก๋ ๋ฐธ๋ฐ์(Load Balancer)๊ฐ ํ๋ก์(Proxy)์ญํ ์ ํ๋ฉด์ ํธ๋ํฝ์ ๊ด๋ฆฌํ๋ค.
๋ก๋๋ฐธ๋ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์๋น์ค: Nginx, HAProxy, AWS ELB, L4/L7 ์ค์์น ๋ฑ
โ ์๋ฅผ ๋ค๋ฉด?
์น ์๋ฒ๊ฐ 3๋ ์๋ค๊ณ ํ๋ฉด, ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๊ฐ๊ฐ ๋ค๋ฅธ ์๋ฒ๋ก ๋ฐฐ๋ถํ๋ค.
๋จ์ํ ์์ฒญ์ ๋๋๋ ๊ฒ์ด์ง, ์๋ฒ๋ค๋ผ๋ฆฌ ์ง์ ์ ์ผ๋ก ํ์
ํ๋ ๊ฒ์ ์๋๋ค.
๋ฐ๋ฉด ์๋ฒ ๋ถ์ฐ ์์คํ
(Distributed System) ์ ๋จ์ํ ์์ฒญ์ ๋๋๋ ๊ฒ์ด ์๋๋ผ, ํ๋์ ์์คํ
์ ์ฌ๋ฌ ์๋ฒ๊ฐ ํ๋ ฅํ์ฌ ๊ตฌ์ฑํ๋ค๊ณ ์์์ ์์ ํ๋ค. ๊ฐ ์๋ฒ(๋
ธ๋)๊ฐ ํน์ ์ญํ ์ ์ํํ๋ฉฐ, ๋ฐ์ดํฐ ๊ณต์ ๋ฐ ์ฐ์ฐ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋ฒ ๋ถ์ฐ์ฒ๋ฆฌ์ด๊ณ ๊ฐ๋ณ ์๋ฒ๊ฐ ์ฅ์ ๋ฅผ ์ผ์ผ์ผ๋ ์ ์ฒด ์์คํ
์ด ๋์ํ ์ ์๋๋ก ์ค๊ณ๋๋ค.
์ฐธ๊ณ ์๋ฃ & ํฌ์คํ ์ ๋์์ ์ฃผ์ ๋ธ๋ก๊ทธ
1. https://nairns.tistory.com/96