๊ฐ์ ๋ฉด์ ์ฌ๋ก๋ก ๋ฐฐ์ฐ๋ ๋๊ท๋ชจ ์์คํ ์ค๊ณ ๊ธฐ์ด 1์ฅ - ์ฌ์ฉ์ ์์ ๋ฐ๋ฅธ ๊ท๋ชจ ํ์ฅ์ฑ ์ฐธ์กฐ
๋จ์ผ ์๋ฒ ์ํคํ ์ฒ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ํ๋์ ์๋ฒ์์ ์คํ๋๋ ๊ฐ์ฅ ๊ฐ๋จํ ํํ์ ์์คํ ์ค๊ณ ๋ฐฉ์์ด๋ค.
์ด ๋ฐฉ์์ ์ด๊ธฐ ์๋น์ค ๊ตฌ์ถ์ด ์ฉ์ดํ๊ณ ์ ์ง๋ณด์๊ฐ ๊ฐ๋จํ์ง๋ง, ์ฌ์ฉ์ ์๊ฐ ์ฆ๊ฐํ๋ฉด ํ์ฅ์ฑ์ ์ ํ์ด ๋ฐ์ํ ์ ์๋ค.
www.example.com๊ณผ ๊ฐ์ ๋๋ฉ์ธ์ ์
๋ ฅํ๋ค.www.example.com์ IP ์ฃผ์(192.168.1.1 ๋ฑ)๋ฅผ ๋ฐํํ๋ค.GET, POST)์ ๋ฐ๋ผ ์น ์๋ฒ๊ฐ ์ฒ๋ฆฌํ ์์
์ด ๋ฌ๋ผ์ง๋ค.| ์ฅ์ | ์ค๋ช |
|---|---|
| ๊ตฌํ์ด ๊ฐ๋จํจ | ๋ชจ๋ ๊ธฐ๋ฅ์ด ํ๋์ ์๋ฒ์์ ๋์ํ๋ฏ๋ก ์ค์ ๋ฐ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํจ |
| ์ด๊ธฐ ๋น์ฉ์ด ์ ๋ ดํจ | ๋ณ๋์ ์ธํ๋ผ ๊ตฌ์ถ์ด ํ์ํ์ง ์์ ์ ๋ ดํ ๋น์ฉ์ผ๋ก ์ด์ ๊ฐ๋ฅ |
| ์ด์์ด ๋จ์ํจ | ์๋ฒ ํ๋๋ง ๊ด๋ฆฌํ๋ฉด ๋๋ฏ๋ก ๋คํธ์ํฌ ๋ฐ ๋ฐ์ดํฐ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ์์ |
| ๋ฐฐํฌ๊ฐ ๊ฐํธํจ | ๋จ์ผ ํ๊ฒฝ์์ ํ ์คํธ ๋ฐ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ์ฌ ๊ฐ๋ฐ ์๋๊ฐ ๋น ๋ฆ |
| ํ๊ณ | ์ค๋ช |
|---|---|
| ํ์ฅ์ฑ ๋ฌธ์ | ์ฌ์ฉ์๊ฐ ์ฆ๊ฐํ๋ฉด CPU, ๋ฉ๋ชจ๋ฆฌ, ๋คํธ์ํฌ ๋์ญํญ์ ํ๊ณ์ ๋๋ฌํ์ฌ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํจ |
| ๋จ์ผ ์ฅ์ ์ (SPOF) | ์๋ฒ๊ฐ ๋ค์ด๋๋ฉด ์๋น์ค ์ ์ฒด๊ฐ ์ค๋จ๋จ |
| ๋ณด์ ์ทจ์ฝ์ | ๋ชจ๋ ์์ฒญ์ด ๋จ์ผ ์๋ฒ๋ก ์ง์ค๋๋ฏ๋ก ๊ณต๊ฒฉ ๋์์ด ๋๊ธฐ ์ฌ์ |
| ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ์ ์ด๋ ค์ | ๋ฐ์ดํฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ ๊ณณ์ ์์ด ์ฅ์ ๋ฐ์ ์ ๋ฐ์ดํฐ ์์ค ์ํ์ด ํผ |
๋จ์ผ ์๋ฒ ์ํคํ ์ฒ๋ ์๊ท๋ชจ ํ๋ก์ ํธ๋ MVP(์ต์ ๊ธฐ๋ฅ ์ ํ)๋ฅผ ๊ฐ๋ฐํ ๋ ์ ํฉํ๋ค.
โ ์ธ์ ๋จ์ผ ์๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์์๊น?
โ ์ธ์ ๋จ์ผ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ ๊น?
์ฌ์ฉ์๊ฐ ์ฆ๊ฐํ๋ฉด ๋จ์ผ ์๋ฒ์์๋ ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ค์์ง๋ค.
๋ฐ๋ผ์ ์น ๊ณ์ธต(Web Tier)๊ณผ ๋ฐ์ดํฐ ๊ณ์ธต(Database Tier)์ ๋ถ๋ฆฌํ์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํ ์ ์๋๋ก ์ค๊ณํด์ผ ํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํฌ๊ฒ ๊ด๊ณํ(Relational, RDBMS)๊ณผ ๋น๊ด๊ณํ(NoSQL)์ผ๋ก ๋๋๋ค.
๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ์ ์๋ก ๋ค๋ฅธ ํน์ฑ๊ณผ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ง๋ค.
ํน์ง:
ํน์ง:
NoSQL์ ์ฃผ์ ์ ํ ๋ฐ ํน์ง:
| ์ ํ | ์ค๋ช | ์์ |
|---|---|---|
| ํค-๊ฐ ์ ์ฅ์ | Key์ Value๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ๋น ๋ฅธ ์กฐํ ์๋ ์ ๊ณต | Redis, DynamoDB |
| ๊ทธ๋ํ ์ ์ฅ์ | ๋ ธ๋(Node)์ ์ฃ์ง(Edge)๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ๊ด๊ณ ๋ถ์ ์ต์ ํ | Neo4j, ArangoDB |
| ์นผ๋ผ ์ ์ฅ์ | ์ปฌ๋ผ ๊ธฐ๋ฐ ์ ์ฅ์ผ๋ก ๋๊ท๋ชจ ๋ฐ์ดํฐ ๋ถ์์ ์ต์ ํ | Cassandra, HBase |
| ๋ฌธ์ ์ ์ฅ์ | JSON, BSON ๋ฑ์ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ | MongoDB, CouchDB |
์ผ๋ฐ์ ์ผ๋ก ๋๋ถ๋ถ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๊ด๊ณํ DB(RDBMS)๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ NoSQL์ด ๋ ์ ํฉํ ์ ์๋ค.
โ NoSQL์ด ์ ํฉํ ๊ฒฝ์ฐ
์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๋ฒ์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ํ์ฅํด์ผ ํ๋ค.
์ด๋, ํ์ฅ ๋ฐฉ๋ฒ์๋ ํฌ๊ฒ ์์ง์ ํ์ฅ(Scale-Up) ๊ณผ ์ํ์ ํ์ฅ(Scale-Out) ๋ ๊ฐ์ง๊ฐ ์๋ค.
| ํ์ฅ ๋ฐฉ์ | ์ค๋ช | ์ฅ์ | ๋จ์ |
|---|---|---|---|
| ์์ง์ ํ์ฅ (Scale-Up) | ๊ธฐ์กด ์๋ฒ์ ์ฑ๋ฅ์ ์ ๊ทธ๋ ์ด๋ํ์ฌ ์ฒ๋ฆฌ๋ ์ฆ๊ฐ | ๋จ์ํ ์ํคํ ์ฒ ์ ์ง, ๋น ๋ฅธ ์ ์ฉ ๊ฐ๋ฅ | ๋ฌผ๋ฆฌ์ ํ๊ณ ์กด์ฌ, ๋จ์ผ ์ฅ์ ์ (SPOF) |
| ์ํ์ ํ์ฅ (Scale-Out) | ์ฌ๋ฌ ๋์ ์๋ฒ๋ฅผ ์ถ๊ฐํ์ฌ ๋ถํ ๋ถ์ฐ | ํ์ฅ์ฑ ์ฐ์, ์ฅ์ ๋์ ๊ฐ๋ฅ | ๋คํธ์ํฌ ๋ณต์ก์ฑ ์ฆ๊ฐ, ๋ฐ์ดํฐ ๋๊ธฐํ ํ์ |
์์ง์ ํ์ฅ์ ๊ธฐ์กด ์๋ฒ์ CPU, RAM, ๋์คํฌ ์ฉ๋์ ์ ๊ทธ๋ ์ด๋ํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐฉ๋ฒ์ด๋ค.
๐ก ์ธ์ ์์ง์ ํ์ฅ์ ์ ํํ ๊น?
- ๋จ์ผ ์๋ฒ๋ก ์ด์ํ๋ ์์ ๊ท๋ชจ์ ์ ํ๋ฆฌ์ผ์ด์
- ํ์ฅ์ด ํ์ํ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถ์ฐํ ์๊ฐ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ์ด ๋ถ์กฑํ์ฌ ๋ฉ๋ชจ๋ฆฌ(RAM)๋ CPU ์ ๊ทธ๋ ์ด๋๊ฐ ํ์ํ ๊ฒฝ์ฐ
์ํ์ ํ์ฅ์ ์ฌ๋ฌ ๋์ ์๋ฒ๋ฅผ ์ถ๊ฐํ๊ณ ๋ก๋๋ฐธ๋ฐ์(Load Balancer)๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ๋ฅผ ๋ถ์ฐํ๋ ๋ฐฉ์์ด๋ค.
๐ก ์ธ์ ์ํ์ ํ์ฅ์ ์ ํํ ๊น?
- ํธ๋ํฝ์ด ๊ธ๊ฒฉํ ์ฆ๊ฐํ ๊ฐ๋ฅ์ฑ์ด ๋์ ์๋น์ค (์: ์ผํ๋ชฐ, SNS)
- ์ฅ์ ๋ฐ์ ์ ๋ค์ดํ์์ ์ต์ํํด์ผ ํ๋ ์๋น์ค
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ๊ธฐ/์ฐ๊ธฐ ๋ถํ๊ฐ ์ฌํ ๊ฒฝ์ฐ
๋ก๋๋ฐธ๋ฐ์๋ ์ฌ๋ฌ ์น ์๋ฒ ๊ฐ ํธ๋ํฝ์ ๋ถ์ฐํ์ฌ ๋ถํ๋ฅผ ๊ท ํ ์๊ฒ ์กฐ์ ํ๋ ์ญํ ์ ํ๋ค.
์ด๋ฅผ ํตํด ๊ฐ์ฉ์ฑ์ ๋์ด๊ณ ์ฅ์ ๋ฐ์ ์ ์๋ ๋ณต๊ตฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
| ๋ถํ ๋ถ์ฐ ๋ฐฉ์ | ์ค๋ช |
|---|---|
| ๋ผ์ด๋ ๋ก๋น (Round Robin) | ๊ฐ ์์ฒญ์ ์์ฐจ์ ์ผ๋ก ์๋ฒ์ ๋ฐฐ๋ถ |
| ์ต์ ์ฐ๊ฒฐ ๋ฐฉ์ (Least Connections) | ํ์ฌ ๊ฐ์ฅ ์ ์ ์ฐ๊ฒฐ์ ๊ฐ์ง ์๋ฒ๋ก ์์ฒญ ์ ๋ฌ |
| IP ํด์ฑ (IP Hashing) | ํน์ ์ฌ์ฉ์๊ฐ ํญ์ ๋์ผํ ์๋ฒ์ ์ฐ๊ฒฐ๋๋๋ก ์ค์ |
๋ก๋๋ฐธ๋ฐ์ ์ฌ์ฉ ์ ๊ณ ๋ คํ ์
- ์ธ์ ์ ์ง(Session Persistence): ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ๋ ์ํ๋ฅผ ์ ์งํ๋ ค๋ฉด ๊ฐ์ ์๋ฒ๋ก ์ฐ๊ฒฐํด์ผ ํ ์๋ ์์
- ํฌ์ค ์ฒดํฌ(Health Check): ์ฅ์ ๋ฐ์ํ ์๋ฒ๋ ์๋์ผ๋ก ํธ๋ํฝ์์ ์ ์ธํ๋๋ก ์ค์ ๊ฐ๋ฅ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญ์ ์ฝ๊ธฐ/์ฐ๊ธฐ ๋ถํ๋ฅผ ๋ถ์ฐํ๊ณ ์ฅ์ ๋ฐ์ ์ ์๋น์ค ์ง์์ฑ์ ์ ์งํ๊ธฐ ์ํด ๋ค์คํ๊ฐ ํ์ํ๋ค.
| ๋ฐฉ์ | ์ค๋ช |
|---|---|
| Master-Slave | ์ฐ๊ธฐ๋ Master์์๋ง ์ํ, ์ฝ๊ธฐ๋ Slave์์ ๋ถ์ฐ |
| Master-Master | ๋ ๊ฐ ์ด์์ Master์์ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ํ ๊ฐ๋ฅ |
| Sharding | ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ DB ์ธ์คํด์ค๋ก ๋ถํ ์ ์ฅ |
โ ๋ ๋์ ์ฑ๋ฅ โ ์ฝ๊ธฐ ๋ถํ๋ ์ฌ๋ฌ Slave ๋ ธ๋๋ก ๋ถ์ฐ
โ ๊ณ ๊ฐ์ฉ์ฑ(High Availability) โ Master ์ฅ์ ์ Slave๋ฅผ ์น๊ฒฉ ๊ฐ๋ฅ
โ ์ง์ญ ๋ถ์ฐ ๊ฐ๋ฅ โ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋จ์ด์ง ์์น์ ๋ฐ์ดํฐ ๋ณต์ ๊ฐ๋ฅ
์๋ฒ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ฅ์ ๊ณ ๋ คํ ๋๋ ์์ง์ ํ์ฅ๊ณผ ์ํ์ ํ์ฅ์ ์ฅ๋จ์ ์ ๋น๊ตํ์ฌ ์ ์ ํ ๋ฐฉ์์ ์ ํํด์ผ ํ๋ค.
โ ์์ง์ ํ์ฅ์ด ์ ํฉํ ๊ฒฝ์ฐ
โ ์ํ์ ํ์ฅ์ด ์ ํฉํ ๊ฒฝ์ฐ
์บ์๋ ์์ฃผ ์ฐธ์กฐ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ์ฌ ๋ฐ๋ณต์ ์ธ ์ฐ์ฐ์ ์ค์ด๊ณ , ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ธฐ์ ์ด๋ค.
์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค(DB) ๋ถํ๋ฅผ ์ค์ด๊ณ , ๋น ๋ฅธ ์๋ต ์๋๋ฅผ ์ ๊ณตํ ์ ์๋ค.
์บ์๋ ์ฌ๋ฌ ๊ณ์ธต์์ ํ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ฃผ๋ก ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์ฉ๋๋ค.
| ์บ์ ๊ณ์ธต | ์ค๋ช | ์์ |
|---|---|---|
| ์ ํ๋ฆฌ์ผ์ด์ ์บ์ | ์ ํ๋ฆฌ์ผ์ด์ ๋ด๋ถ์์ ๋ฐ์ดํฐ ์ ์ฅ | Local Cache, Memcached |
| ๋ฐ์ดํฐ๋ฒ ์ด์ค ์บ์ | DB์์ ์กฐํํ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑ | MySQL Query Cache, Redis |
| ์น ์บ์ | HTTP ์์ฒญ์ ์บ์ฑํ์ฌ ๋น ๋ฅธ ํ์ด์ง ๋ก๋ ์ ๊ณต | Varnish, Nginx Cache |
| CDN ์บ์ | ์ ์ ํ์ผ(์ด๋ฏธ์ง, CSS, JS) ์บ์ฑ | Cloudflare, AWS CloudFront |
โ ์บ์ฑ์ ์ ํฉํ ๋ฐ์ดํฐ:
โ ์บ์ฑ์ ๋ถ์ ํฉํ ๋ฐ์ดํฐ:
๋ง๋ฃ๋์ง ์์ ์บ์ ๋ฐ์ดํฐ๊ฐ ์ค๋ ์ ์ง๋๋ฉด ์ค๋๋ ์ ๋ณด๊ฐ ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋ ์ํ์ด ์๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ์ ํ ๋ง๋ฃ ์ ์ฑ ์ด ํ์ํ๋ค.
| ๋ง๋ฃ ์ ์ฑ | ์ค๋ช |
|---|---|
| TTL(Time-To-Live) | ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ |
| LRU(Least Recently Used) | ๊ฐ์ฅ ์ค๋ ์ฌ์ฉ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ |
| LFU(Least Frequently Used) | ์ฌ์ฉ ๋น๋๊ฐ ๋ฎ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ |
| FIFO(First In First Out) | ๋จผ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ์ญ์ |
์บ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ผ๊ด์ฑ์ด ์ ์ง๋์ง ์์ผ๋ฉด ์๋ชป๋ ์ ๋ณด๊ฐ ๋ฐํ๋ ์ํ์ด ์๋ค.
์ด๋ฅผ ํด๊ฒฐํ๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
| ๋ฐฉ๋ฒ | ์ค๋ช |
|---|---|
| Write-Through | ๋ฐ์ดํฐ๋ฅผ DB์ ์ ์ฅํ ๋ ์บ์์๋ ์ ์ฅ |
| Write-Back | ์บ์์ ๋จผ์ ์ฐ๊ณ , ์ผ์ ์๊ฐ ํ DB์ ๋ฐ์ |
| Cache Invalidation | DB ๋ณ๊ฒฝ ์ ์บ์ ๋ฐ์ดํฐ ์ญ์ |
์ด๋ฅผ ํตํด ์ฌ์ฉ์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ฒ์์ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ์ฌ ์น์ฌ์ดํธ ๋ก๋ฉ ์๋๋ฅผ ํฅ์์ํจ๋ค.
| ์ด์ | ์ค๋ช |
|---|---|
| ์๋ต ์๋ ํฅ์ | ์ฌ์ฉ์์ ๊ฐ๊น์ด CDN ์๋ฒ์์ ์ฝํ ์ธ ๋ฅผ ์ ๊ณต |
| ์๋ฒ ๋ถํ ๊ฐ์ | ์๋ณธ ์๋ฒ์ ๋ํ ์์ฒญ ์๋ฅผ ์ค์ |
| ๋์ญํญ ์ ๊ฐ | ์ ์ ์ฝํ ์ธ ์ ์ก์ ์ต์ ํํ์ฌ ๋คํธ์ํฌ ๋น์ฉ ์ ๊ฐ |
| ํธ๋ํฝ ๊ธ์ฆ ๋์ | ๊ฐ์์ค๋ฌ์ด ํธ๋ํฝ ์ฆ๊ฐ์๋ ์์ ์ ์ธ ์๋น์ค ์ ๊ณต |
server {
location /static/ {
proxy_pass <http://cdn.example.com>;
error_page 502 = @fallback;
}
location @fallback {
root /var/www/html/static/;
}
}
๋๊ท๋ชจ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์น ๊ณ์ธต์ ์ํ์ ํ์ฅ(Scale-Out) ํ๋ ค๋ฉด ๋ฌด์ํ ์ํคํ ์ฒ(Stateless Architecture)๋ฅผ ์ ์ฉํด์ผ ํ๋ค.
์น ์๋ฒ๊ฐ ํน์ ์ํ๋ฅผ ์ ์งํ๋ฉด ํ์ฅ์ฑ๊ณผ ์ฅ์ ๋์์ด ์ด๋ ค์์ง๋ฏ๋ก, ์ํ ์ ๋ณด๋ฅผ ์ธ๋ถ ์ ์ฅ์์ ๋ณด๊ดํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ฌด์ํ(State-less) ์น ๊ณ์ธต์์๋ ๊ฐ ์์ฒญ์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉฐ, ์น ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋๋ค.
์ด ๋ฐฉ์์ ์ํ์ ํ์ฅ(Scale-Out)์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ํน์ ์๋ฒ์ ์์กดํ์ง ์๋๋ก ํ๋ค.
์ํ๋ฅผ ์ ์ง(Stateful)ํ๋ ์น ๊ณ์ธต์ ํด๋ผ์ด์ธํธ ์ธ์ ์ ๋ณด๋ฅผ ์๋ฒ๊ฐ ์ง์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
์ด ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ํญ์ ๊ฐ์ ์๋ฒ๋ก ๊ฐ์ผ ํ๋ฉฐ, ๋ก๋๋ฐธ๋ฐ์๋ ๊ณ ์ ์ธ์ (Persistent Session) ๋๋ ์ธ์ ์คํฐํค(Session Stickiness) ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ํน์ ์๋ฒ๋ก ์ ์งํด์ผ ํ๋ค.
๋ฌด์ํ ์น ๊ณ์ธต์์๋ ์ํ ์ ๋ณด๋ฅผ ์น ์๋ฒ์์ ์ ๊ฑฐํ๊ณ , ํ์ํ ๋ ์ธ๋ถ ์ ์ฅ์์์ ์กฐํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
| ์ ์ฅ์ ์ ํ | ์ค๋ช | ์์ |
|---|---|---|
| ์ธ์ ์ ์ฅ์ | ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ DB ๋๋ ์บ์์ ์ ์ฅ | Redis, Memcached |
| ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ | ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ ํ ํฐ์ ์ ์ฅํ์ฌ ๋งค ์์ฒญ๋ง๋ค ์ ์ก | JWT, OAuth |
| ๋ถ์ฐ ๋ฐ์ดํฐ ์ ์ฅ์ | ์ํ ์ ๋ณด๋ฅผ ๊ณต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ | MySQL, PostgreSQL |
โ ์์ : JWT๋ฅผ ์ด์ฉํ ์ธ์ฆ ๋ฐฉ์
- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ๋ฉด JWT๋ฅผ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ๋ฌ
- ์ดํ ๋ชจ๋ ์์ฒญ์์ JWT๋ฅผ ํฌํจํ์ฌ ์ธ์ฆ ์ํ
- ์๋ฒ๊ฐ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ผ๋ฏ๋ก ๋ชจ๋ ์๋ฒ์์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
๋๊ท๋ชจ ์๋น์ค์์๋ ๋จ์ผ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ณด๋ค ๋ค์ค ๋ฐ์ดํฐ ์ผํฐ ์ํคํ ์ฒ(Multi Data Center Architecture)๋ฅผ ๋์ ํ์ฌ ๊ฐ์ฉ์ฑ๊ณผ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
| ํธ๋ํฝ ์ฐํ ๋ฐฉ๋ฒ | ์ค๋ช |
|---|---|
| GeoDNS | ์ฌ์ฉ์์ ์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ์ดํฐ ์ผํฐ๋ก ์ฐ๊ฒฐ |
| Anycast IP | ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ์ ๋์ผํ IP๋ฅผ ์ ๊ณตํ์ฌ ์ต์ ์ ๊ฒฝ๋ก ์ ํ |
| ๋ก๋๋ฐธ๋ฐ์ | ๋ถํ๋ฅผ ๋ถ์ฐํ์ฌ ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ๋ก ํธ๋ํฝ ์ ๋ฌ |
โ ์์ : GeoDNS๋ฅผ ํ์ฉํ ํธ๋ํฝ ์ฐํ
- ๋ฏธ๊ตญ ์ฌ์ฉ์๋ US ๋ฐ์ดํฐ ์ผํฐ
- ์ ๋ฝ ์ฌ์ฉ์๋ EU ๋ฐ์ดํฐ ์ผํฐ
- ์์์ ์ฌ์ฉ์๋ APAC ๋ฐ์ดํฐ ์ผํฐ๋ก ์ฐ๊ฒฐ๋๋๋ก ๊ตฌ์ฑ
๋ค์ค ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์ด์ํ ๋๋ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํ ๋ฐ์ดํฐ ๋๊ธฐํ ์ ๋ต์ด ํ์ํ๋ค.
| ๋๊ธฐํ ๋ฐฉ์ | ์ค๋ช |
|---|---|
| Master-Slave ๋ณต์ | ํ ๊ฐ์ Master์์ ์ฐ๊ธฐ, ์ฌ๋ฌ Slave์์ ์ฝ๊ธฐ ์ํ |
| Multi-Master ๋ณต์ | ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ์์ ์ฐ๊ธฐ/์ฝ๊ธฐ ๊ฐ๋ฅ (์ถฉ๋ ํด๊ฒฐ ํ์) |
| Eventual Consistency | ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋๊ธฐํ๋จ |
์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์ด์ํ๋ ๊ฒฝ์ฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ ๋ฐ ํ ์คํธ ์ ๋ต์ด ์ค์ํ๋ค.
โ ์์ : ๋ธ๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ
- Green: ์๋ก์ด ๋ฒ์ ์ด ์ ์ฉ๋ ์๋ฒ ๊ทธ๋ฃน
- Blue: ๊ธฐ์กด ๋ฒ์ ์ด ์ ์ง๋๋ ์๋ฒ ๊ทธ๋ฃน
- ์ ๋ฒ์ ์ด ์์ ์ ์ธ์ง ํ์ธ ํ ์ ์ฒด ํธ๋ํฝ์ Green์ผ๋ก ์ ํ
์ด๋ฅผ ํตํด ์์ฐ์(Producer)์ ์๋น์(Consumer) ๊ฐ์ ๋น๋๊ธฐ ๋ฉ์์ง ์ ๋ฌ์ด ๊ฐ๋ฅํ๋ค.
๋ฉ์์ง ํ๋ ์์คํ ๊ฐ์ ๋น๋๊ธฐ ๋ฐ์ดํฐ ์ ์ก์ ์ํ ๋ฒํผ ์ญํ ์ ํ๋ฉฐ, ์์ฐ์์ ์๋น์๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ ์ ์๋๋ก ํ๋ค.
๋ฉ์์ง ํ๋ ์์ฐ์(Producer)์ ์๋น์(Consumer)๋ก ๊ตฌ์ฑ๋๋ค.
graph LR
A["Producer (์์ฐ์)"] -->|๋ฉ์์ง ์ ์ก| B["Message Queue"]
B -->|๋ฉ์์ง ์ ๋ฌ| C["Consumer (์๋น์)"]
B -->|๋ฉ์์ง ์ ๋ฌ| D["Consumer (์๋น์)"]
| ๋ฉ์์ง ํ ์์คํ | ํน์ง |
|---|---|
| RabbitMQ | ๋ฉ์์ง ๋ผ์ฐํ , ํธ๋์ญ์ ์ง์, AMQP ํ๋กํ ์ฝ ๊ธฐ๋ฐ |
| Apache Kafka | ๋๋ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ, ๋ก๊ทธ ๊ธฐ๋ฐ ๋ฉ์์ง ์ฒ๋ฆฌ |
| AWS SQS | ๊ด๋ฆฌํ ๋ฉ์์ง ํ ์๋น์ค, ์๋ฒ๋ฆฌ์ค ํ๊ฒฝ์์ ์ ํฉ |
| Google Pub/Sub | ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ, ๋น๋๊ธฐ ๋ฉ์์ง |
โ ์์ : RabbitMQ๋ฅผ ํ์ฉํ ๋น๋๊ธฐ ๋ฉ์์ง ์ฒ๋ฆฌ
- ์ฌ์ฉ์ ์์ฒญ์ ์ฒ๋ฆฌํ ๋, ์ด๋ฉ์ผ ๋ฐ์ก์ ๋๊ธฐ์ ์ผ๋ก ์ํํ๋ฉด ์๋ต ์๊ฐ์ด ๊ธธ์ด์ง ์ ์์.
- ๋ฉ์์ง ํ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฉ์ผ ๋ฐ์ก ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ ์ฌ์ฉ์ ์๋ต ์๋๋ฅผ ๊ฐ์ ํ ์ ์์.
์์คํ ์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ์ ์งํ๋ ค๋ฉด ๋ก๊ทธ(Log)์ ๋ฉํธ๋ฆญ(Metrics)์ ๋ถ์ํ๊ณ , ์๋ํ(Auto-scaling & Automation)๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ํ์์ ์ด๋ค.
๋ก๊ทธ(Log)๋ ์์คํ ์ ๋์์ ๊ธฐ๋กํ๋ ๋ฐ์ดํฐ์ด๋ฉฐ, ์ฅ์ ๋ฐ์ ์ ์์ธ์ ๋ถ์ํ๋ ๋ฐ ํ์์ ์ด๋ค.
| ๋ก๊ทธ ์ ํ | ์ค๋ช |
|---|---|
| ์ ํ๋ฆฌ์ผ์ด์ ๋ก๊ทธ | ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ํ ์ด๋ฒคํธ ๋ฐ ์ค๋ฅ ๊ธฐ๋ก |
| ์์คํ ๋ก๊ทธ | OS ๋ฐ ์๋ฒ์์ ๋ฐ์ํ ์ด๋ฒคํธ ๊ธฐ๋ก |
| ๋ณด์ ๋ก๊ทธ | ๋ก๊ทธ์ธ ๋ฐ ์ธ์ฆ ๊ด๋ จ ํ๋ ๊ธฐ๋ก |
| ๋คํธ์ํฌ ๋ก๊ทธ | ํธ๋ํฝ ๋ชจ๋ํฐ๋ง ๋ฐ ๋คํธ์ํฌ ์ด๋ฒคํธ ๊ธฐ๋ก |
| ๋๊ตฌ | ์ค๋ช |
|---|---|
| ELK Stack (Elasticsearch, Logstash, Kibana) | ๋ก๊ทธ ์์ง, ์ ์ฅ, ๋ถ์ ๋ฐ ์๊ฐํ |
| Splunk | ์ค์๊ฐ ๋ก๊ทธ ๋ชจ๋ํฐ๋ง ๋ฐ ๋ถ์ |
| Fluentd | ๋ก๊ทธ ์์ง ๋ฐ ์ ๋ฌ์ ์ต์ ํ๋ ์คํ์์ค ๋๊ตฌ |
โ ์์ : ELK Stack์ ํ์ฉํ ๋ก๊ทธ ๋ถ์
- Logstash๋ก ๋ค์ํ ์์ค์์ ๋ก๊ทธ๋ฅผ ์์งํ๊ณ , Elasticsearch์ ์ ์ฅํ ํ Kibana์์ ์๊ฐํ ๊ฐ๋ฅ
๋ฉํธ๋ฆญ(Metrics)์ ์์คํ ์ ์ฑ๋ฅ ๋ฐ ์ํ๋ฅผ ์ธก์ ํ๋ ๋ฐ์ดํฐ๋ก, ์ค์๊ฐ ๋ชจ๋ํฐ๋ง์ ํตํด ์ฅ์ ๋ฅผ ์ฌ์ ์ ๊ฐ์งํ ์ ์๋ค.
| ๋ฉํธ๋ฆญ ์ ํ | ์ค๋ช |
|---|---|
| ํธ์คํธ ๋ฉํธ๋ฆญ | CPU, RAM, ๋์คํฌ ์ฌ์ฉ๋ ๋ฑ |
| ์ ํ๋ฆฌ์ผ์ด์ ๋ฉํธ๋ฆญ | ์๋ต ์๊ฐ, ์ค๋ฅ์จ ๋ฑ |
| ๋น์ฆ๋์ค ๋ฉํธ๋ฆญ | ์ฌ์ฉ์ ์, ๊ฑฐ๋๋, ํธ๋์ญ์ ์ ๋ฑ |
| ๋๊ตฌ | ์ค๋ช |
|---|---|
| Prometheus | ์๊ณ์ด ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๋ชจ๋ํฐ๋ง |
| Grafana | ์ค์๊ฐ ๋์๋ณด๋ ์๊ฐํ ๋๊ตฌ |
| Datadog | ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ๋ชจ๋ํฐ๋ง ๋ฐ ๊ฒฝ๊ณ ์์คํ |
โ ์์ : Prometheus & Grafana๋ฅผ ํ์ฉํ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง
- Prometheus๊ฐ ์์คํ ๋ฉํธ๋ฆญ์ ์์งํ๊ณ , Grafana์์ ๋์๋ณด๋๋ฅผ ํตํด ์ค์๊ฐ ๋ชจ๋ํฐ๋ง ๊ฐ๋ฅ
| ์๋ํ ๋๊ตฌ | ์ค๋ช |
|---|---|
| AWS Auto Scaling | ํธ๋ํฝ ์ฆ๊ฐ์ ๋ฐ๋ผ EC2 ์ธ์คํด์ค ์๋ ์ถ๊ฐ/์ ๊ฑฐ |
| Kubernetes Horizontal Pod Autoscaler | ์ปจํ ์ด๋ ์๋ฅผ ์๋์ผ๋ก ํ์ฅ |
| Terraform | ์ธํ๋ผ๋ฅผ ์ฝ๋๋ก ๊ด๋ฆฌํ๋ IaC(Infrastructure as Code) ๋๊ตฌ |
| Ansible | ์๋ฒ ์ค์ ๋ฐ ๋ฐฐํฌ ์๋ํ |
โ ์์ : AWS Auto Scaling ํ์ฉ
- EC2 ์ธ์คํด์ค๋ฅผ ์๋ ํ์ฅํ์ฌ ํธ๋ํฝ ๋ณํ์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๋๋ก ์ค์
๋๊ท๋ชจ ํธ๋ํฝ๊ณผ ๋ฐ์ดํฐ ์ฆ๊ฐ์ ๋๋นํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค(DB)๋ ์ง์์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅํด์ผ ํ๋ค.
ํ์ฅ ๋ฐฉ๋ฒ์๋ ์์ง์ ํ์ฅ(Scale-Up)๊ณผ ์ํ์ ํ์ฅ(Scale-Out, ์ค๋ฉ)์ด ์์ผ๋ฉฐ, ๊ฐ๊ฐ ์ฅ๋จ์ ์ด ์กด์ฌํ๋ค.
์์ง์ ํ์ฅ์ ๊ธฐ์กด ์๋ฒ์ ํ๋์จ์ด ์ฑ๋ฅ์ ์ ๊ทธ๋ ์ด๋ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฒ๋ฆฌ ์ฉ๋์ ์ฆ๊ฐ์ํค๋ ๋ฐฉ์์ด๋ค.
โ ์ธ์ ์์ง์ ํ์ฅ์ ์ ํํ ๊น?
์ํ์ ํ์ฅ์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ฅผ ์ถ๊ฐํ์ฌ ๋ถํ๋ฅผ ๋ถ์ฐํ๋ ๋ฐฉ์์ด๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์ค๋ฉ(Sharding) ๊ธฐ์ ์ ์ฌ์ฉํ๋ค.
์ค๋ฉ์ ์ค๋(Shard) ๋ผ๊ณ ๋ถ๋ฆฌ๋ ์์ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋๋์ด ์ ์ฅํ๋ ๊ธฐ์ ์ด๋ค.
๋ชจ๋ ์ค๋๋ ๊ฐ์ ์คํค๋ง(Schema)๋ฅผ ์ฌ์ฉํ์ง๋ง, ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ ์ค๋ณต๋์ง ์๋๋ค.
graph TD;
A[์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค] -->|Shard Key์ ๋ฐ๋ผ ๋ฐ์ดํฐ ๋ถํ | B[Shard 1];
A -->|Shard Key์ ๋ฐ๋ผ ๋ฐ์ดํฐ ๋ถํ | C[Shard 2];
A -->|Shard Key์ ๋ฐ๋ผ ๋ฐ์ดํฐ ๋ถํ | D[Shard 3];
๊ฐ์ฅ ์ค์ํ ์์๋ ์ค๋ฉ ํค(Sharding Key)๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ค๊ณํ๋ ๊ฒ์ด๋ค.
์ค๋ฉ ํค(๋๋ ํํฐ์ ํค)๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ค ์ค๋์ ์ ์ฅ๋ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ธฐ์ค ๊ฐ์ด๋ค.
๋ฐ์ดํฐ๊ฐ ํน์ ์ค๋์ ์ง์ค๋๊ฑฐ๋ ์ฉ๋์ ์ด๊ณผํ๋ฉด ์๋ก์ด ์ค๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค.
โ ๋ฐ์ดํฐ ์ฌ์ค๋ฉ์ด ํ์ํ ๊ฒฝ์ฐ
| ํ์ฅ ๋ฐฉ์ | ์ฅ์ | ๋จ์ | ์ฌ์ฉ ์ฌ๋ก |
|---|---|---|---|
| ์์ง์ ํ์ฅ(Scale-Up) | ์ด์์ด ๋จ์ํจ, ์ฆ๊ฐ์ ์ธ ์ฑ๋ฅ ํฅ์ ๊ฐ๋ฅ | ๋ฌผ๋ฆฌ์ ํ๊ณ, ๊ณ ๋น์ฉ, ๋จ์ผ ์ฅ์ ์ | ์๊ท๋ชจ ์๋น์ค, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ์ด ์ด๋ ค์ด ๊ฒฝ์ฐ |
| ์ํ์ ํ์ฅ(Scale-Out, Sharding) | ๋ฌดํํ ํ์ฅ ๊ฐ๋ฅ, ์ฅ์ ๋ฐ์ ์ ์ผ๋ถ ์ค๋๋ง ์ํฅ | ์ค๋ฉ ํค ์ค๊ณ ํ์, ์กฐ์ธ ์ด๋ ค์, ์ฌ์ค๋ฉ ํ์ | ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๊ธ๋ก๋ฒ ์๋น์ค |