์ฝ์ ๋ ์ง : 2024.08.13
์ง์์ด : ์๋ ์ค ์ฌ
์ถํ์ฌ : ์ธ์ฌ์ดํธ
โ๏ธ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ
๐ ์์คํ ๊ท๋ชจ ํ์ฅ ๋ฐฉ๋ฒ ์ ๋ฆฌ
- ์น ๊ณ์ธต์ ๋ฌด์ํ ๊ณ์ธต์ผ๋ก
- ๋ชจ๋ ๊ณ์ธต์ ๋ค์คํ ๋์
- ๊ฐ๋ฅํ ํ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์บ์ํ ๊ฒ
- ์ฌ๋ฌ ๋ฐ์ดํฐ ์ผํฐ๋ฅผ ์ง์ํ ๊ฒ
- ์ ์ ์ฝํ ์ธ ๋ CDN์ ํตํด ์๋น์คํ ๊ฒ
- ๋ฐ์ดํฐ ๊ณ์ธต์ ์ค๋ฉ์ ํตํด ๊ทธ ๊ท๋ชจ๋ฅผ ํ์ฅํ ๊ฒ
- ๊ฐ ๊ณ์ธต์ ๋ ๋ฆฝ์ ์๋น์ค๋ก ๋ถํ ํ ๊ฒ
- ์์คํ ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ , ์๋ํ ๋๊ตฌ๋ค์ ํ์ฉํ ๊ฒ
1. ๋จ์ผ ์๋ฒ ์ํคํ ์ฒ
- ์ฌ์ฉ์ ๋จ๋ง(์น/์ฑ)์์ ๋๋ฉ์ธ์ผ๋ก ์ ์
- DNS์ ๋๋ฉ์ธ์ ์กฐํํ์ฌ IP ์ฃผ์๋ก ๋ณํ
- IP ์ฃผ์๋ก HTTP ์์ฒญ
- HTML์ด๋ JSON ์๋ต
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์น/๋ชจ๋ฐ์ผ์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํด ๋๊ฐ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ด๊ณํ / ๋น๊ด๊ณํ ์ค ์ ํํด์ผ ํ๋ค.
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ ์ด๋ธ, ์ด, ์ปฌ๋ผ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํํํ๊ณ , ํ ์ด๋ธ ์กฐ์ธ ๊ฐ๋ฅ
- MySQL, Oracle, PostgreSQL ๋ฑ
- ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(NoSQL)
- ํ ์ด๋ธ ์กฐ์ธ ๊ธฐ๋ฅ์ด ์๋ค.
- CouchDB, Neo4j, Cassandra, Amazon DynamoDB ๋ฑ
- NoSQL์ ๋ค์ ๋ค ๋ถ๋ฅ๋ก ๋๋ ์ ์๋ค.
- ํค-๊ฐ ์ ์ฅ์
- ๊ทธ๋ํ ์ ์ฅ์
- ์นผ๋ผ ์ ์ฅ์
- ๋ฌธ์ ์ ์ฅ์
- ๋๋ถ๋ถ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ํฉํ๋, ๋ค์์ ๊ฒฝ์ฐ NoSQL์ ๊ณ ๋ คํด๋ณผ ์ ์๋ค.
- ์์ฃผ ๋ฎ์ ์๋ต ์ง์ฐ์๊ฐ์ด ์๊ตฌ๋ ๋
- ๋ค๋ฃจ๋ ๋ฐ์ดํฐ๊ฐ ๋น์ ํ์ด๋ผ ๊ด๊ณํ ๋ฐ์ดํฐ๊ฐ ์๋ ๋
- ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํ/์ญ์ง๋ ฌํ ํ ์ ์๊ธฐ๋ง ํ๋ฉด ๋ ๋
- ์์ฃผ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ํ์๊ฐ ์์ ๋
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
3. ์น ๊ณ์ธต์ ์์ง์ ๊ท๋ชจ ํ์ฅ vs ์ํ์ ๊ท๋ชจ ํ์ฅ
์์ง์ ๊ท๋ชจ ํ์ฅ(scale up)
- ์๋ฒ์ ๊ณ ์ฌ์ ์์(๋ ์ข์ CPU, ๋ ๋ง์ RAM ๋ฑ)์ ์ถ๊ฐํ๋ ๊ฒ
- ํธ๋ํฝ ์์ด ์ ์ ๋ ์ ํฉํ๋ค.
- ์ฅ์ : ๋จ์ํ๋ค.
- ๋จ์ :
- ๋จ์ผ ์๋ฒ์ ์์์ ์ฆ์คํ๋ ๋ฐ์๋ ํ๊ณ๊ฐ ์๋ค.
- ์ฅ์ ๋ฐ์์ ์๋น์ค๊ฐ ์ค๋จ๋ฉ๋๋ค. ์ฅ์ ์ ๋ํ ์๋๋ณต๊ตฌ ๋ฐฉ์์ด๋ ๋ค์คํ ๋ฐฉ์์ด ํ์ํ๋ค.
์ํ์ ๊ท๋ชจ ํ์ฅ(scale out)
- ๋ ๋ง์ ์๋ฒ๋ฅผ ์ถ๊ฐํ์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๊ฒ
- ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ง์์ ์ข ๋ ์ ํฉํ ๋ฐฉ์์ด๋ค.
- ๋ก๋๋ฐธ๋ฐ์๊ฐ ํ์ํด์ง๋ค.
๋ก๋๋ฐธ๋ฐ์
- ๋ถํ ๋ถ์ฐ ์งํฉ์ ์ํ ์น ์๋ฒ๋ค์๊ฒ ํธ๋ํฝ ๋ถํ๋ฅผ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐํ๋ ์ญํ
- ์ฌ์ฉ์ ๋จ๋ง์ ๋ก๋๋ฐธ๋ฐ์์ ๊ณต๊ฐ(public) IP๋ก ์ ์ํ๊ณ , ๋ก๋๋ฐธ๋ฐ์๋ ๋ณด์์ ์ํด ์๋ฒ์ ์ฌ์ค(private) IP๋ก ํต์ ํ๋ค.
- ์๋ฒ1์ด ๋ค์ด๋๋ฉด ๋ชจ๋ ํธ๋ํฝ์ ์๋ฒ2๋ก ์ ์ก๋๋ค. โก๏ธ ์ฅ์ ์๋๋ณต๊ตฌ & ๊ฐ์ฉ์ฑ ํฅ์!
4. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ค์คํ : master-slave ๊ตฌ์กฐ
- ์๋ณธ์ ์ฃผ(master) ์๋ฒ์, ์ฌ๋ณธ์ ๋ถ(slave) ์๋ฒ์ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค.
- ์ฐ๊ธฐ ์ฐ์ฐ(insert, delete, update)์ ์ฃผ ์๋ฒ์์๋ง ์ง์ํ๋ค.
- ๋ถ ์๋ฒ์์๋ ์ฃผ ์๋ฒ์์ ๊ทธ ์ฌ๋ณธ์ ์ ๋ฌ๋ฐ์ผ๋ฉฐ ์ฝ๊ธฐ ์ฐ์ฐ(select)๋ง ์ง์ํ๋ค.
- ๋๋ถ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ธฐ ์ฐ์ฐ์ ๋น์ค์ด ํจ์ฌ ๋์์ ๋ถ ์๋ฒ์ ๊ฐ์๊ฐ ๋ ๋ง๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ค์คํ์ ์ฅ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๊ฐ ๋ถ์ฐ๋์ด ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ ์ง์(query)๊ฐ ๋์ด๋ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์๋ค.
- ์ผ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๊ฐ ํ๊ดด๋ผ๋ ๋ค๋ฅธ ์๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๋ณด์กด๋๋ค.
- ์ง์ญ์ ์ผ๋ก ์ฌ๋ฌ ์ฅ์์ ๋ณต์ ํ์ฌ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ๋ค๋ฅธ ์๋ฒ์์ ๊ฐ์ ธ์์ ๊ณ์ ์๋น์ค๊ฐ ๊ฐ๋ฅํด์ง๋ค.
์ถ๊ฐ์ ์ผ๋ก ์๊ฐํด๋ด์ผ ํ ์
- ๋ถ ์๋ฒ๊ฐ ๋ค์ด๋ ๊ฒฝ์ฐ
- ๋ถ ์๋ฒ๊ฐ ํ ๋๋ผ๋ฉด ์ฝ๊ธฐ ์ฐ์ฐ์ ์ผ์์ ์ผ๋ก ์ฃผ ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๊ณ ์ฆ์ ์๋ก์ด slave ์๋ฒ ์ถ๊ฐ
- ๋ถ ์๋ฒ๊ฐ ์ฌ๋ฌ ๋๋ผ๋ฉด ๋ค๋ฅธ ๋ถ ์๋ฒ๊ฐ ์ฝ๊ธฐ ์ฐ์ฐ ์ฒ๋ฆฌ
- ์ฃผ ์๋ฒ๊ฐ ๋ค์ด๋ ๊ฒฝ์ฐ
- ๋ถ ์๋ฒ๊ฐ ํ ๋๋ผ๋ฉด ํด๋น ์๋ฒ๊ฐ ์๋ก์ด ์ฃผ ์๋ฒ๊ฐ ๋๊ณ ์ผ์์ ์ผ๋ก ๋ชจ๋ ์ฐ์ฐ ์ฒ๋ฆฌ. ์ดํ ์๋ก์ด slave ์๋ฒ ์ถ๊ฐ
- ๋ถ ์๋ฒ์ ๋ณด๊ด๋ ๋ฐ์ดํฐ๊ฐ ์ต์ ์ํ๊ฐ ์๋ ์ ์๊ธฐ ๋๋ฌธ์, ์๋ ๋ฐ์ดํฐ๋ ๋ณต๊ตฌ ์คํฌ๋ฆฝํธ๋ฅผ ๋๋ ค์ ์ถ๊ฐ
5. ์บ์ฑ
- ์บ์๋ ๊ฐ๋น์ผ ์ฐ์ฐ ๊ฒฐ๊ณผ ๋๋ ์์ฃผ ์ฐธ์กฐ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์์ ๋๊ณ , ์์ฒญ์ด ๋ณด๋ค ๋นจ๋ฆฌ ์ฒ๋ฆฌ๋ ์ ์๋๋ก ํ๋ ์ ์ฅ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ๋ฅผ ์ค์ด๊ณ ์๋ฒ์ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ค. ๋ํ, ์บ์ ๊ณ์ธต์ ๋ฐ๋ก ๋๋ฉด ์ด๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅ์ํฌ ์ ์๋ค.
- ์ฝ๊ธฐ ์ฃผ๋ํ ์บ์ ์ ๋ต(read-through caching strategy)
- ์น์๋ฒ๊ฐ ์บ์์ ์๋ต์ด ์ ์ฅ๋์ด ์๋์ง ๋ณด๊ณ ์์ผ๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์ ๋ฐํํฉ
- ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐพ์์ ์บ์์ ์ ์ฅํ ๋ค ํด๋ผ์ด์ธํธ์ ๋ฐํ
์บ์ ์ฌ์ฉ์ ์ ์ํ ์
- ๋ฐ์ดํฐ ๊ฐฑ์ ์ ์์ฃผ ์ผ์ด๋์ง ์์ง๋ง ์ฐธ์กฐ๋ ๋น๋ฒํ๊ฒ ์ผ์ด๋ ๋ ๊ณ ๋ คํด๋ณผ ๋ง ํ๋ค.
- ์์์ ์ผ๋ก ๋ณด๊ดํ ๋ฐ์ดํฐ๋ ์บ์์ ๋๋ฉด ์ ๋๋ค.
- ๋๋ฌด ์งง์ง๋ ๊ธธ์ง๋ ์์ ๋ง๋ฃ ๊ธฐํ์ ๋์ด์ผ ํ๋ค.
- ์ ์ฅ์์ ์๋ณธ์ ๊ฐฑ์ ํ๋ ์ฐ์ฐ๊ณผ ์บ์๋ฅผ ๊ฐฑ์ ํ๋ ์ฐ์ฐ์ด ๋จ์ผ ํธ๋์ญ์
์ผ๋ก ์ฒ๋ฆฌ๋์ง ์๋ ๊ฒฝ์ฐ ์ผ๊ด์ฑ์ด ๊นจ์ง ์ ์๋ค.
- Scaling Memcache at Facebook [์ฐธ๊ณ ]
- ์ฌ๋ฌ ์ง์ญ์ ๊ฑธ์ณ ์บ์ ์๋ฒ๋ฅผ ๋ถ์ฐ์์ผ ๋จ์ผ ์ฅ์ ์ง์ ์ด ๋๋ ๊ฒ์ ํผํด์ผ ํ๋ค.
- ์บ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๋ฌด ์์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ์์ฃผ ์บ์์์ ๋ฐ๋ ค๋๋ฒ๋ ค ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ค. โก๏ธ ์บ์ ๋ฉ๋ชจ๋ฆฌ ๊ณผํ ๋น
- ์บ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฝ ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฉ์ถํด์ผ ํ ๋ ์ ๋ต์ ๊ณ ๋ คํด์ผ ํ๋ค.
- LRU(Least Recently Used)
- LFU(Least Frequently Used)
- FIFO(First In First Out)
6. ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN)
- CDN์ ์ ์ ์ฝํ ์ธ ๋ฅผ ์ ์กํ๋ ๋ฐ ์ฐ์ด๋ ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ์๋ฒ์ ๋คํธ์ํฌ๋ก, ์ด๋ฏธ์ง, ๋น๋์ค, CSS, JavaScript ํ์ผ ๋ฑ์ ์บ์ํ ์ ์๋ค.
๋์ ๊ณผ์
- ์ฌ์ฉ์๊ฐ ์ ์ ์ฝํ ์ธ ์ ๊ทผํ๋ฉด CDN ์๋น์ค ์ฌ์ฉ์๊ฐ ์ ๊ณตํ URL๋ก ์์ฒญํ๋ค.(์ฌ์ฉ์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณณ์ผ๋ก)
- ์ฝํ ์ธ ๊ฐ CDN ์๋ฒ์ ์์ผ๋ฉด ์๋ณธ ์๋ฒ์ ์์ฒญํ๋ค.
- ์๋ณธ ์๋ฒ๊ฐ CDN ์๋ฒ์ ํ์ผ์ ๋ฐํํฉ๋๋ค. ์ด๋ ์๋ต ํค๋์ *TTL ๊ฐ์ด ๋ค์ด์์ต๋๋ค. TTL์ ๋ช
์๋ ์๊ฐ์ด ๋๋ ๋๊น์ง ์บ์๋๋ค.
* TTL: Time To Live. ํด๋น ํ์ผ์ด ์ผ๋ง๋ ์ค๋ ์บ์๋ ์ ์๋์ง ์ค๋ช ํ๋ ๊ฐ - CDN ์๋ฒ๋ ํ์ผ์ ์บ์ํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฐํํฉ๋๋ค.
CDN ์ฌ์ฉ ์ ๊ณ ๋ คํด์ผ ํ ์ฌํญ
- CDN์ ์ 3์ฌ์ ์์ ์ํด ์ด์๋๋ฏ๋ก ๋ฐ์ดํฐ ์ ์ก ์์ ๋ฐ๋ผ ๋น์ฉ์ด ๋ฐ์ํ๋ค. ์์ฃผ ์ฌ์ฉ๋์ง ์๋ ์ฝํ ์ธ ๋ ๋นผ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ๋ค.
- ์ ์ ํ ๋ง๋ฃ ์ํ ์ค์ ํด์ผ ํ๋ค.
- CDN ์ฅ์ ๋ฐ์ ์ ์ด๋ฅผ ๊ฐ์งํ์ฌ ์๋ณธ ์๋ฒ๋ก๋ถํฐ ๊ฐ์ ธ์ค๋๋ก ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ์ฑํ ํ์๊ฐ ์๋ค.
- ์บ์๋ ์ฝํ
์ธ ๋ฌดํจํ : ์บ์๋ ๋ฐ์ดํฐ์ ์๋ณธ ์๋ฒ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ์์ง ๋ง๋ฃ๋์ง ์์ ์ฝํ
์ธ ๋ผ๋ CDN์์ ์ ๊ฑฐํ ์ ์์ด์ผ ํ๋ค.
- CDN ์๋น์ค ์ฌ์ ์๊ฐ ์ ๊ณตํ๋ API๋ฅผ ์ฌ์ฉํ๋ค.
- URL ๋ง์ง๋ง์ ๋ฒ์ ๋ฒํธ๋ฅผ ์ฃผ์ด ์ฝํ ์ธ ์ ๋ค๋ฅธ ๋ฒ์ ์ผ๋ก ์๋น์คํ ์ ์๋๋ก ํ๋ค.
7. ๋ฌด์ํ ์น ๊ณ์ธต
- ์ํ ์ ๋ณด(์ธ์ ๋ฑ)๋ฅผ ์น ๊ณ์ธต์์ ์ ๊ฑฐํ๊ณ , RDBMS๋ NoSQL, ์บ์ ์์คํ (Memcached, Redis)์ ๋ณด๊ดํด์ผ ํ๋ค.
- ์น ์๋ฒ์์ ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด ๊ฐ์ ์ฌ์ฉ์์ ์์ฒญ์ ๊ฐ์ ์๋ฒ๋ก๋ง ๋ณด๋ด์ผ ํด์ ์๋ ๊ท๋ชจ ํ์ฅ์ด ์ด๋ ค์์ง๋ค.
- ์ํ ์ ๋ณด๋ฅผ ๊ณต์ ์ ์ฅ์์์ ๊ฐ์ ธ์ค๋๋ก ํ์ฌ ์น์๋ฒ๋ก๋ถํฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค.
8. ๋ฐ์ดํฐ์ผํฐ
- ์ฅ์ ๊ฐ ์๋ ์ํฉ์์ ์ฌ์ฉ์๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ์ดํฐ์ผํฐ๋ก ์๋ด๋๋ค. โก๏ธ ์ง๋ฆฌ์ ๋ผ์ฐํ
- ๋ฐ์ดํฐ์ผํฐ ์ค ํ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ชจ๋ ํธ๋ํฝ์ ์ฅ์ ๊ฐ ์๋ ๋ฐ์ดํฐ์ผํฐ๋ก ์ ์ก๋๋ค.
๊ธฐ์ ์ ๋์
- ํธ๋ํฝ ์ฐํ : ์ฌ์ฉ์์๊ฒ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฐ์ดํฐ ์ผํฐ๋ก ํธ๋ํฝ์ ๋ณด๋ด์ค์ผ ํ๋ค.
- ๋ฐ์ดํฐ ๋๊ธฐํ : ๋ฐ์ดํฐ ์ผํฐ๋ง๋ค ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๊ฒฝ์ฐ ํด๋น ๋ฐ์ดํฐ์ผํฐ์ ์ฐพ๋ ๋ฐ์ดํฐ๊ฐ ์์ ์๋ ์๋ค. ์ด์ ๋ํ ๋ณดํธ์ ์ธ ์ ๋ต์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฐ์ดํฐ์ผํฐ์ ๊ฑธ์ณ ๋ค์คํํ๋ ๊ฒ์ด๋ค.
- ํ ์คํธ์ ๋ฐฐํฌ : ์๋ํ๋ ๋ฐฐํฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๋ฐ์ดํฐ ์ผํฐ์ ๋์ผํ ์๋น์ค๊ฐ ์ค์น๋๋๋ก ํ ์ ์๋ค.
9. ๋ฉ์์ง ํ
- ๋ฉ์์ง์ ๋ฌด์์ค(๋ฉ์ธ์งํ์ ๋ณด๊ด๋ ๋ฉ์์ง๋ ์๋น๊ฐ ๊บผ๋ผ ๋๊น์ง ์์ ํ ๋ณด๊ด๋จ)์ ๋ณด์ฅํ๋, ๋น๋๊ธฐ ํต์ ์ ์ง์ํ๋ ์ปดํฌ๋ํธ
๋์ ๋ฐฉ์
- ์์ฐ์(๋๋ ๋ฐํ์)๊ฐ ๋ฉ์์ง๋ฅผ ๋ง๋ค์ด์ ๋ฉ์์ง ํ์ ๋ฐํ
- ์๋น์(๋๋ ๊ตฌ๋ ์)๊ฐ ๋ฉ์์ง๋ฅผ ๋ฐ์ ๊ทธ์ ๋ง๋ ๋์ ์ํ
์ฌ์ฉ ์์
- ์ฌ์ง ๋ณด์ ์ ํ๋ฆฌ์ผ์ด์ : ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์๋ ์ฌ์ง ๋ณด์ ํ๋ก์ธ์ค๋ฅผ ๋ฉ์์ง ํ์ ๋ฃ๊ณ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ฃ
10. ๋ก๊ทธ, ๋ฉํธ๋ฆญ ๊ทธ๋ฆฌ๊ณ ์๋ํ
- ์๋น์ค์ ์ฌ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ๋ก๊ทธ, ๋ฉํธ๋ฆญ, ์๋ํ ๊ฐ์ ๊ฒ๋ค์ด ํ์ํด์ง๋ค.
- ๋ก๊ทธ : ์๋ฌ ๋ก๊ทธ ๋ชจ๋ํฐ๋ง. ๋ก๊ทธ๋ฅผ ๋จ์ผ ์๋น์ค๋ก ๋ชจ์์ฃผ๋ ๋๊ตฌ ํ์ฉํ๋ฉด ํธ๋ฆฌํ๋ค.
- ๋ฉํธ๋ฆญ : ์ฌ์
ํํฉ์ ๊ดํ ์ ์ฉํ ์ ๋ณด๋ ์์คํ
ํ์ฌ ์ํ๋ฅผ ํ์
ํ ์ ์๋ค.
- ํธ์คํธ ๋จ์ ๋ฉํธ๋ฆญ : CPU, ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ I/O
- ์ข ํฉ ๋ฉํธ๋ฆญ : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ์ธต์ ์ฑ๋ฅ, ์บ์ ๊ณ์ธต์ ์ฑ๋ฅ
- ํต์ฌ ๋น์ฆ๋์ค ๋ฉํธ๋ฆญ : DAU, ์์ต, ์ฌ๋ฐฉ๋ฌธ
- ์๋ํ : CI ๋๊ตฌ๋ก ๋น๋/ํ ์คํธ/๋ฐฐํฌ ์ ์ฐจ ์๋ํํ์ฌ ๊ฐ๋ฐ ์์ฐ์ฑ์ ํฅ์์ํฌ ์ ์๋ค.
11. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ท๋ชจ ํ์ฅ
์์ง์ ํ์ฅ(scale up)
- ๊ธฐ์กด ์๋ฒ์ ๋ ๋ง์ ๊ณ ์ฑ๋ฅ์ ์์(CPU, RAM, ๋์คํฌ ๋ฑ) ์ฆ์ค
- ํ๊ณ
- ์๋ฒ ํ๋์จ์ด์ ํ๊ณ๋ก ๋ฌดํ ์ฆ์ค์ ๋ถ๊ฐ๋ฅ
- ๋จ์ผ ์ฅ์ ์ง์ ์ผ๋ก ์ธํ ์ํ์ฑ์ด ์๋ค.
- ์์ ์ฆ์ค์ ๋ํ ๋น์ฉ์ด ์ฆ๊ฐํ๋ค.
์ํ์ ํ์ฅ(sharding)
- ๋ ๋ง์ ์๋ฒ๋ฅผ ์ถ๊ฐํด์ ์ฑ๋ฅ ํฅ์
- ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค๋(shard)๋ก ๋ถํ ํ๋ ๊ธฐ์ ์ด๋ค.
- ๋ชจ๋ ์ค๋๋ ๊ฐ์ ์คํค๋ง๋ฅผ ์ฐ์ง๋ง, ์ค๋์ ๋ณด๊ด๋๋ ๋ฐ์ดํฐ ์ฌ์ด์๋ ์ค๋ณต์ด ์๋ค.
- ์ค๋ฉ ์ ๋ต ๊ตฌํ์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ค๋ฉ ํค๋ฅผ ์ด๋ป๊ฒ ์ ํ๋๋์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๊ณ ๋ฅด๊ฒ ๋ถํ ํ ์ ์๋๋ก ํ๋ ๊ฒ ์ค์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด, user ๋ฐ์ดํฐ๋ฅผ user_id % 4๋ฅผ ํด์ ํจ์๋ก ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๊ฐ ๋ณด๊ด๋๋ ์ค๋๋ฅผ ์ ํ๋ค.
์ค๋ฉ ๋์ ์ ๊ณ ๋ คํด์ผ ํ ์
- ๋ฐ์ดํฐ์ ์ฌ ์ค๋ฉ :
- ๋ฐ์ดํฐ๊ฐ ๊ณ ๋ฅด๊ฒ ๋ถํฌ๋์ง ๋ชปํด ํน์ ์ค๋๊ฐ ๋น ๋ฅด๊ฒ ์์ง๋ ์ ์๋ค.
- ์ค๋ ํค ๊ณ์ฐ ํจ์ ๋ณ๊ฒฝํ๊ณ ๋ฐ์ดํฐ ์ฌ๋ฐฐ์น. ์์ ํด์ ๊ธฐ๋ฒ ํ์ฉ.
- ์ ๋ช
์ธ์ฌ ๋ฌธ์ :
- ํน์ ์ค๋์ ์ง์๊ฐ ์ง์ค๋์ด ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๋ ๋ฌธ์ .
- ์๋ฅผ ๋ค์ด, SNS ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ๋ ์ ๋ช ์ธ์ฌ๊ฐ ์ ๋ถ ๊ฐ์ ์ค๋์ ์ ์ฅ๋๋ฉด ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆด ์ ์๋ค.
- ์กฐ์ธ๊ณผ ๋น์ ๊ทํ :
- ์ฌ๋ฌ ์ค๋์ ๊ฑธ์น ๋ฐ์ดํฐ๋ฅผ ์กฐ์ธํ๊ธฐ๊ฐ ํ๋ค์ด์ง๋ ๋ฌธ์ ๊ฐ ์๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น์ ๊ทํํ์ฌ ํ๋์ ํ ์ด๋ธ์์ ์ง์ ์ํ
โ๏ธ ์ค๋ ์ฝ์ ์๊ฐ
- ์ฒ์ ์ฝ์์ ๋๋ ์ ์ดํด๊ฐ ๊ฐ์ง ์์๋๋ฐ, ์๊ฐ์ด ์ข ํ๋ฅด๊ณ ๋ค์ ์ฝ์ด๋ณด๋ ๋๋ถ๋ถ ์ดํด๊ฐ ๋์๋ค.
- ํญ์ ์๊ฐ์ ๊น์ด๊ฐ ์ฝ๋ ์์ค, ๋จ์ผ ์๋ฒ ์ํคํ ์ฒ ์์ค์ผ๋ก ๋จธ๋ฌผ๋ฌ ์๋ค๋ ๋๋์ด ๋ค์๋๋ฐ 1์ฅ์ ๋ด์ฉ์ ํตํด ์์คํ ์ค๊ณ์ ํฐ ๊ทธ๋ฆผ์ ๋๋ต ์ดํดํ ์ ์์๋ค. ๊ฐ ๊ธฐ์ ์ ์ธ๋ถ์ ์ธ ๊ฐ๋ ์ ์ฐจ์ฐจ ์ฑ์๋๊ฐ์ผ๊ฒ ๋ค.
โ๏ธ ๊ถ๊ธํ ๋ด์ฉ & ์ ์ดํด๋์ง ์๋ ๋ด์ฉ
๋ฐ์ดํฐ ์ง๋ ฌํ/์ญ์ง๋ ฌํ
๋ฐ์ดํฐ ์ง๋ ฌํ(serialization)
- ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ฑฐ๋, ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ ์ ์๋ ํ์์ผ๋ก ๋ณํํ๋ ๊ณผ์
- ์ง๋ ฌํ์ ๊ฒฐ๊ณผ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ด๋๋ฆฌ ๋๋ JSON, XML ํ์์ ํ ์คํธ
- e.g. JavaScript์ JSON.stringfy()
๋ฐ์ดํฐ ์ญ์ง๋ ฌํ(deserialization)
- ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ณผ์
- e.g. JavaScript์ JSON.parse()
๋ฉ์์ง ํ ์ฌ์ฉ ์ฌ๋ก
์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น?
- ์ฆ์ ์ฒ๋ฆฌ๋๊ธฐ ์ด๋ ค์ด ์์ฒญ์ ๋ํด ์๋ต์ ๋จผ์ ๋ณด๋ด์ฃผ๊ณ ์์ ์ ๋์ค์ ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋
- ์ด๋์ ๋ ์๋ต ์ง์ฐ์ด ํ์ฉ๋๋ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ
- ์์คํ ์์ ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ ์์ ์ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ
- ์ฌ๋ฌ ์๋ฒ๊ฐ ๋์์ ์์ ์ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ
์ฌ์ฉ ์ฌ๋ก
- ์ ์ฅ์์ ๋์ฉํฅ ํ์ผ ์ ๋ก๋ ํ ํ์ผ ๋ณํ์ด๋ ์ต์ ํ ์์
- ํธ์ ์๋ฆผ์ด๋ ์ด๋ฉ์ผ ์ ์ก(๋น๋ฐ๋ฒํธ ์ฌ์ ์ก, ์๋ก์ด ๊ณ์ ์์ฑ ๋ฑ)
- ์ ์์๊ฑฐ๋ ์์คํ ์์ ์ฃผ๋ฌธ ์ฒ๋ฆฌ, ์ฌ๊ณ ๊ด๋ฆฌ, ๊ฒฐ์ ์ฒ๋ฆฌ ๋ฑ์ ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ
- ์ ์ฐฉ์ ์ด๋ฒคํธ
- ์ฟ ํฐ ๋ฐ๊ธ
๊ตฌํ ๊ธฐ์
- RabbitMQ
- Apache Kafka
- AWS SQS(Simple Queue Service)
โ๏ธ ์ฐธ๊ณ
๋์ - ๊ฐ์ ๋ฉด์ ์ฌ๋ก๋ก ๋ฐฐ์ฐ๋ ๋๊ท๋ชจ ์์คํ ์ค๊ณ ๊ธฐ์ด 1์ฅ
๋ฉ์์ง ํ ์์คํ ์ ์ดํด์ ํ์ฉ
๋ฉ์์ง ํ์ ๋ํด ์์๋ณด์!
์ฐ๋ฆฌ ํ์ ์นดํ์นด๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๊ณ ์์๊น
message queue๋ฅผ ํ์ฉํด๋ณด์