๐Ÿ“š ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„

CodeByHanยท2025๋…„ 10์›” 10์ผ

CS

๋ชฉ๋ก ๋ณด๊ธฐ
3/6

์‚ฌ์‹ค ๋‚˜ ๊ฐ™์€ ์ทจ์ค€์ƒ ์ž…์žฅ์—์„œ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์„ ์ง์ ‘ ๊ฒฝํ—˜ํ•ด๋ณด๋Š” ๊ฒŒ ์‰ฝ์ง€ ์•Š๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„ ๊ธฐ์—…์—์„œ ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ง€์‹์„ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์„œ, ์กฐ๊ธˆ ์ •๋ฆฌํ•ด๋‘๋ ค๊ณ  ํ•œ๋‹ค. ์˜ˆ์ „์— ์ฝ์—ˆ์ง€๋งŒ ๊ธฐ์–ต์ด ๊ฐ€๋ฌผ๊ฐ€๋ฌผํ•ด์„œ ๋‹ค์‹œ ๊ธฐ๋กํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
์ฐธ๊ณ  ๋„์„œ ๐Ÿ“šโ€‹ ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ

๐Ÿค” ๊ด€๊ณ„ํ˜• DB์™€ ๋น„๊ด€๊ณ„ํ˜• DB ์–ด๋–ค ๊ฑธ ์‚ฌ์šฉํ•ด์•ผํ• ๊นŒ?

๊ด€๊ณ„ํ˜• DB๋Š” RDBMS์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋Š”๋ฐ, ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ๊ฑธ๋กœ๋Š” MySQL, ์˜ค๋ผํด, PostgreSQL์ด ์กด์žฌํ•œ๋‹ค. ๊ด€๊ณ„ํ˜• DB๋Š” ์ž๋ฃŒ๋ฅผ ํ…Œ์ด๋ธ”๊ณผ ์—ด, ์นผ๋Ÿผ์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค. SQL์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ ๊ด€๊ณ„์— ๋”ฐ๋ผ ์กฐ์ธ(join)ํ•˜์—ฌ ํ•ฉ์น˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋น„ ๊ด€๊ณ„ํ˜•DB๋Š” NOSQL์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ CouchDB, Neo4j, Cassandra, HBase, Amazon DynamoDB ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค. ๋˜ํ•œ ๋„ค ๋ถ€๋ฅ˜๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ‚ค-๊ฐ’(key-value) ์ €์žฅ์†Œ, ๊ทธ๋ž˜ํ”„ ์ €์žฅ์†Œ(graph store), ์นผ๋Ÿผ ์ €์žฅ์†Œ(column store), ๋ฌธ์„œ ์ €์žฅ์†Œ(document store) ๋“ฑ์ด ์žˆ๋‹ค. ์ด๋Ÿฐ ๋น„ ๊ด€๊ณ„ํ˜•DB๋Š” ์กฐ์ธ(join) ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋Š” ๊ด€๊ณ„ํ˜• DB๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ตฌ์ถ•ํ•œ ์‹œ์Šคํ…œ์— ์ ํ•ฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋น„ ๊ด€๊ณ„ํ˜•DB๋„ ๊ณ ๋ ค๋ฅผ ํ•ด์•ผํ•œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋‹ค.

1.์•„์ฃผ ๋‚ฎ์€ ์‘๋‹ต ์ง€์—ฐ์‹œ๊ฐ„(latency)์ด ์š”๊ตฌ๋จ
2.๋‹ค๋ฃจ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์ •ํ˜•(unstructured)์ด๋ผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹˜
3.๋ฐ์ดํ„ฐ(json, yaml, xml ๋“ฑ)๋ฅผ ์ง๋ ฌํ™”ํ•˜๊ฑฐ๋‚˜(serialize) ์—ญ์ง๋ ฌํ™”(deserialize)ํ•  ์ˆ˜ ์žˆ๊ธฐ๋งŒ ํ•˜๋ฉด ๋จ
4. ์•„์ฃผ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ

์ •ํ˜• ๋ฐ์ดํ„ฐ๋Š” ์—‘์…€์ด๋‚˜ SQL ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ํ–‰๊ณผ ์—ด์ด ์ •ํ•ด์ ธ ์žˆ๋Š” ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒ€์ƒ‰์ด๋‚˜ ๋ถ„์„์ด ์‰ฝ๊ณ , ๊ด€๊ณ„ํ˜• DB์— ์ €์žฅ๋œ๋‹ค.
๋ฐ˜๋Œ€๋กœ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ์ง€, ๋™์˜์ƒ์ฒ˜๋Ÿผ ๊ณ ์ •๋œ ๊ตฌ์กฐ๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ๋กœ, ์Šคํ‚ค๋งˆ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— NoSQL์ด๋‚˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅํ•˜๋ฉฐ ๋ถ„์„์ด๋‚˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋ณต์žกํ•œ๋‹ค.

๐Ÿ“Œ ์ˆ˜์ง์  ๊ทœ๋ชจ ํ™•์žฅ vs ์ˆ˜ํ‰์  ๊ทœ๋ชจ ํ™•์žฅ

1. ์ˆ˜์ง์  ๊ทœ๋ชจ ํ™•์žฅ (Vertical Scaling / ์Šค์ผ€์ผ ์—…)

์„œ๋ฒ„์— ๊ณ ์‚ฌ์–‘ ์ž์›(CPU, RAM ๋“ฑ)์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์žฅ์ : ๋‹จ์ˆœํ•˜๊ณ  ๊ตฌํ˜„์ด ์‰ฌ์›€
  • ๋‹จ์ :
    1. ํ•œ ๋Œ€์˜ ์„œ๋ฒ„์— CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฌดํ•œ๋Œ€๋กœ ์ฆ์„คํ•  ์ˆ˜ ์—†์Œ
    2. ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์ž๋™๋ณต๊ตฌ(failover)๋‚˜ ๋‹ค์ค‘ํ™” ๋ฐฉ์•ˆ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ โ†’ ์„œ๋ฒ„ ์žฅ์•  ์‹œ ์›น์‚ฌ์ดํŠธ / ์•ฑ ์™„์ „ ์ค‘๋‹จ

์†Œ๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์—๋Š” ์ ํ•ฉํ•˜์ง€๋งŒ, ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Œ

์ด๋Ÿฌํ•œ ๋‹จ์  ๋•Œ๋ฌธ์—, ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง€์›ํ•˜๋Š” ๊ณณ์€ ์ˆ˜ํ‰์  ๊ทœ๋ชจ ํ™•์žฅ๋ฒ•์ด ์ ์ ˆํ•˜๋‹ค.

2. ์ˆ˜ํ‰์  ๊ทœ๋ชจ ํ™•์žฅ (Horizontal Scaling / ์Šค์ผ€์ผ ์•„์›ƒ)

๋” ๋งŽ์€ ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์žฅ์ : ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ์— ์ ํ•ฉ, ์žฅ์•  ๋Œ€๋น„ ๊ฐ€๋Šฅ
  • ๋‹จ์ : ์„ค๊ณ„์™€ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•จ
  • ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ˆ˜ํ‰์  ํ™•์žฅ์ด ๋” ์ ์ ˆ

๐Ÿ“Œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ

๋ถ€ํ•˜ ๋ถ„์‚ฐ ์ง‘ํ•ฉ(load balancing set)์— ์†ํ•œ ์›น ์„œ๋ฒ„๋“ค์—๊ฒŒ ํŠธ๋ž˜ํ”ฝ์„ ๊ณ ๋ฅด๊ฒŒ ๋ถ„์‚ฐํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต๊ฐœ IP ์ฃผ์†Œ(public IP address)๋กœ ์ ‘์†ํ•˜๋ฉด,
์›น ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์†์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋” ๋‚˜์€ ๋ณด์•ˆ์„ ์œ„ํ•ด ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์—๋Š” ์‚ฌ์„ค IP ์ฃผ์†Œ(private IP address)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ์›น ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ๋•Œ ์‚ฌ์„ค ์ฃผ์†Œ(private IP address)๋ฅผ ์ด์šฉํ•œ๋‹ค.

๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์ง‘ํ•ฉ์— ์›น ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด, ์žฅ์•  ์ž๋™๋ณต๊ตฌ ๋ฌธ์ œ(no failover)๊ฐ€ ํ•ด์†Œ๋˜๊ณ ,
์›น ๊ณ„์ธต์˜ ๊ฐ€์šฉ์„ฑ(availability)์ด ํ–ฅ์ƒ๋œ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค

  1. ์„œ๋ฒ„ 1์ด ๋‹ค์šด๋˜๋ฉด ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์€ ์„œ๋ฒ„ 2๋กœ ์ „์†ก๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์›น ์‚ฌ์ดํŠธ ์ „์ฒด๊ฐ€ ๋‹ค์šด๋˜๋Š” ์ผ์ด ๋ฐฉ์ง€๋œ๋‹ค. ๋ถ€ํ•˜๋ฅผ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  2. ์›น ์‚ฌ์ดํŠธ๋กœ ์œ ์ž…๋˜๋Š” ํŠธ๋ž˜ํ”ฝ์ด ๊ฐ€ํŒŒ๋ฅด๊ฒŒ ์ฆ๊ฐ€ํ•˜๋ฉด ๋‘ ๋Œ€์˜ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ๋‹นํ•  ์ˆ˜ ์—†๋Š” ์‹œ์ ์ด ์˜ค๋Š”๋ฐ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ ์šฐ์•„ํ•˜๊ฒŒ ๋Œ€์ฒ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ”๋กœ ์›น ์„œ๋ฒ„ ๊ณ„์ธต์— ๋” ๋งŽ์€ ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋กœ๋“œ ๋ฐธ๋Ÿฌ์„œ๊ฐ€ ์ž๋™์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•ด์ค€๋‹ค.

๐Ÿ“Œ DB ๋‹ค์ค‘ํ™”

๋งŽ์€ DBMS๋Š” ๋‹ค์ค‘ํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค! ๋ณดํ†ต์€ ์„œ๋ฒ„ ์‚ฌ์ด์— ์ฃผ(master) - ๋ถ€(slave)๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์›๋ณธ์€ ์ฃผ ์„œ๋ฒ„์—, ์‚ฌ๋ณธ์€ ๋ถ€ ์„œ๋ฒ„์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์š”์ฆ˜์—๋Š” master, slave๊ฐ€ ์ธ์ข…์ฐจ๋ณ„(?), ์–ด์จŒ๋“  ์ฐจ๋ณ„์„ ๋‘๋Š” ์šฉ์–ด๋ผ ๊ธˆ์ง€ํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ์•„์ง๊นŒ์ง€๋Š” ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์“ฐ๊ธฐ ์—ฐ์‚ฐ (write operation)์€ ์ฃผ DB (master DB)์—์„œ๋งŒ ์ฒ˜๋ฆฌ๋˜๋ฉฐ,
์ฝ๊ธฐ ์—ฐ์‚ฐ (read operation)์€ ๋ถ€ DB (slave DB)๊ฐ€ ์ฃผ DB๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œ๋ฐ›์•„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

DB๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น์–ด(INSERT, DELETE, UPDATE ๋“ฑ)๋Š” ๋ชจ๋‘ ์ฃผ DB๋กœ ์ „๋‹ฌ๋œ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ๊ธฐ ์—ฐ์‚ฐ(read operation)์˜ ๋น„์ค‘์ด ์“ฐ๊ธฐ ์—ฐ์‚ฐ(write operation)๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์—, ๋ถ€ DB์˜ ์ˆ˜๊ฐ€ ๋ถ€ DB๋ณด๋‹ค ๋งŽ์€ ๊ฒฝ์šฐ๊ฐ€ ์ผ๋ฐ˜์ ์ด๋‹ค.

DB ๋‹ค์ค‘ํ™” ์žฅ์ 

  1. ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ ๋  ์ˆ˜ ์žˆ๋Š” ์งˆ์˜(Query)์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฏ€๋กœ, ์„ฑ๋Šฅ์ด ์ข‹์•„์ง„๋‹ค.
  2. DB ์„œ๋ฒ„์˜ ์ผ๋ถ€๊ฐ€ ๋‹ค์šด๋˜์–ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋œ๋‹ค.

๐Ÿค” DB ์„œ๋ฒ„ ํ•˜๋‚˜๊ฐ€ ๋‹ค์šด๋˜๋ฉด ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ• ๊นŒ?

  • Slave ์„œ๋ฒ„๊ฐ€ ํ•œ ๋Œ€๋ฟ์ธ ๊ฒฝ์šฐ
    ํ•ด๋‹น slave ์„œ๋ฒ„๊ฐ€ ์ƒˆ๋กœ์šด master ์„œ๋ฒ„์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉฐ, ๋ชจ๋“  DB ์—ฐ์‚ฐ์€ ์ผ์‹œ์ ์œผ๋กœ ์ƒˆ๋กœ์šด master ์„œ๋ฒ„์—์„œ ์ˆ˜ํ–‰๋œ๋‹ค.
    slave ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ๋Œ€์ธ ๊ฒฝ์šฐ, ์ฝ๊ธฐ ์—ฐ์‚ฐ์€ ๋‚˜๋จธ์ง€ slave ์„œ๋ฒ„๋“ค๋กœ ๋ถ„์‚ฐ๋˜๋ฉฐ, ์ƒˆ๋กœ์šด slave ์„œ๋ฒ„๊ฐ€ ์žฅ์•  ์„œ๋ฒ„๋ฅผ ๋Œ€์ฒดํ•œ๋‹ค.

  • ์ด์ „ slave ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ตœ์‹ ์ด ์•„๋‹Œ ๊ฒฝ์šฐ
    ์„œ๋ฒ„ ๋‹ค์šด ์ „ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ผ๋ฉด, ์—†๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ณต๊ตฌ ์Šคํฌ๋ฆฝํŠธ(recovery script)๋ฅผ ๋Œ๋ ค ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

  • ๋‹ค์ค‘ ๋งˆ์Šคํ„ฐ(multi-masters), ์›ํ˜• ๋‹ค์ค‘ํ™”(circular replication)
    ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ๋„์ž…ํ•˜๋ฉด ์œ„ ์ƒํ™ฉ์— ๋Œ€์‘ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

๋กœ๋“œ๋ฐธ๋Ÿฌ์„œ์™€ DB ๋‹ค์ค‘ํ™”๋ฅผ ๊ณ ๋ คํ•œ ๊ฒฝ์šฐ

  1. ์‚ฌ์šฉ์ž๋Š” DNS๋กœ๋ถ€ํ„ฐ ๋กœ๋“œ๋ฐธ๋Ÿฌ์„œ์˜ ๊ณต๊ฐœ IP์ฃผ์†Œ๋ฅผ ๋ฐ›๋Š”๋‹ค.
  2. ์‚ฌ์šฉ์ž๋Š” ํ•ด๋‹น IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์— ์ ‘์†ํ•œ๋‹ค.
  3. HTTP์š”์ฒญ์€ ์„œ๋ฒ„ 1์ด๋‚˜ ์„œ๋ฒ„ 2๋กœ ์ „๋‹ฌ๋œ๋‹ค.
  4. ์›น ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ€ DB ์„œ๋ฒ„์—์„œ ์ฝ๋Š”๋‹ค.
  5. ์›น ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์—ฐ์‚ฐ์€ ์ฃผ DB๋กœ ์ „๋‹ฌํ•œ๋‹ค.

๐Ÿค” ์‘๋‹ต์‹œ๊ฐ„์€ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐœ์„ ํ• ๊นŒ??

์บ์‹œ(cache)๋ฅผ ๋ถ™์ด๊ณ  ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ(CDN)๋กœ ์˜ฎ๊ธฐ๋ฉด ๊ฐœ์„ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์บ์‹œ(cache)

๊ฐ’๋น„์‹ผ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ or ์ž์ฃผ ์ฐธ์กฐ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์— ๋‘๊ณ , ๋’ค์ด์€ ์š”์ฒญ์ด ๋ณด๋‹ค ๋นจ๋ฆฌ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ €์žฅ์†Œ

์บ์‹œ ๊ณ„์ธต(cache tier)

๋ฐ์ดํ„ฐ๊ฐ€ ์ž ์‹œ ๋ณด๊ด€๋˜๋Š” ๊ณณ์œผ๋กœ DB๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๋‹ค. ๋ณ„๋„์˜ ์บ์‹œ ๊ณ„์ธต์„ ๋‘๋ฉด, ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ DB์˜ ๋ถ€ํ•˜๋„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ , ์บ์‹œ ๊ณ„์ธต์˜ ๊ทœ๋ชจ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅ ์‹œํ‚ค๋Š”๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

์บ์‹œ(Cache) ์‚ฌ์šฉ ์‹œ ๊ณ ๋ ค ์‚ฌํ•ญ

  • ์บ์‹œ๋Š” ์–ธ์ œ ํ•„์š”ํ•œ๊ฐ€?
    ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ ์ด ์ž์ฃผ ์ผ์–ด๋‚˜์ง€ ์•Š์ง€๋งŒ, ์กฐํšŒ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์บ์‹œ ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ๋‘์–ด์•ผ ํ•˜๋Š”๊ฐ€?
    ์บ์‹œ๋Š” ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‘๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ์˜์†์ ์œผ๋กœ ๋ณด๊ด€ํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œ์— ๋‘๋Š” ๊ฒƒ์€ ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

  • ์บ์‹œ ๋ฐ์ดํ„ฐ ๋งŒ๋ฃŒ(expire) ๊ธฐํ•œ์€?
    ์บ์‹œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ธ์ œ ๋งŒ๋ฃŒ๋ ์ง€ ์ •์ฑ…์„ ์ •ํ•ด์•ผ ํ•œ๋‹ค.

    • ๋งŒ๋ฃŒ ๊ธฐํ•œ์ด ๋„ˆ๋ฌด ์งง์œผ๋ฉด DB๋ฅผ ๋„ˆ๋ฌด ์ž์ฃผ ์กฐํšŒํ•˜๊ฒŒ ๋œ๋‹ค.
    • ๋งŒ๋ฃŒ ๊ธฐํ•œ์ด ๋„ˆ๋ฌด ๊ธธ๋ฉด ์›๋ณธ๊ณผ ์บ์‹œ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์›๋ณธ๊ณผ์˜ ์ผ๊ด€์„ฑ ์œ ์ง€
    DB ์›๋ณธ๊ณผ ์บ์‹œ ๋‚ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ตœ๋Œ€ํ•œ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค.

    • ์›๋ณธ ๊ฐฑ์‹ ๊ณผ ์บ์‹œ ๊ฐฑ์‹  ์—ฐ์‚ฐ์ด ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด ์ผ๊ด€์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค.
    • ์—ฌ๋Ÿฌ ์ง€์—ญ์— ๊ฑธ์ณ ์‹œ์Šคํ…œ์„ ํ™•์žฅํ•  ๊ฒฝ์šฐ ์ผ๊ด€์„ฑ ์œ ์ง€๊ฐ€ ๋”์šฑ ์–ด๋ ค์›Œ์ง„๋‹ค.
  • ์žฅ์•  ๋Œ€์ฒ˜
    ์บ์‹œ ์„œ๋ฒ„๋ฅผ ๋‹จ์ผ๋กœ ์šด์˜ํ•˜๋ฉด ํ•ด๋‹น ์„œ๋ฒ„๊ฐ€ SPOF(Single Point of Failure)๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

    • SPOF๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ง€์—ญ์— ์บ์‹œ ์„œ๋ฒ„๋ฅผ ๋ถ„์‚ฐ์‹œ์ผœ์•ผ ํ•œ๋‹ค.
  • ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ
    ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ž‘์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ž์ฃผ ์บ์‹œ์—์„œ ๋ฐ€๋ ค ์บ์‹œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

    • ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณผํ• ๋‹น(overprovision)ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ฐฉ์ถœ ์ •์ฑ…(Eviction Policy)
    ์บ์‹œ๊ฐ€ ๊ฝ‰ ์ฐผ์„ ๋•Œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์ •์ฑ…์ด ํ•„์š”ํ•˜๋‹ค.

    • ๋Œ€ํ‘œ์ ์ธ ์ •์ฑ…: LRU(Least Recently Used), FIFO(First In First Out)

์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ(CDN)

  • ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ์ „์†กํ•˜๋Š”๋ฐ ์“ฐ์ด๋Š”, ์ง€๋ฆฌ์ ์œผ๋กœ ๋ถ„์‚ฐ๋œ ์„œ๋ฒ„์˜ ๋„คํŠธ์›Œํฌ, ์ด๋ฏธ์ง€, ๋น„๋””์˜ค, CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ์— ๋ฐฉ๋ฌธํ•˜๋ฉด, ๊ทธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด CDN ์„œ๋ฒ„๊ฐ€ ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ CDN์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฉ€๋ฉด ๋ฉ€์ˆ˜๋ก ์›น ์‚ฌ์ดํŠธ๋Š” ์ฒœ์ฒœํžˆ ๋กœ๋“œ๋œ๋‹ค. ์œ„์— ์žˆ๋Š” ๊ทธ๋ฆผ์„ ๋ณด๋ฉด CDN์ด ์‚ฌ์ดํŠธ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•˜๋Š”์ง€ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  1. ์‚ฌ์šฉ์ž ์š”์ฒญ

    • ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ์ง€ URL(image.png)์— ์ ‘๊ทผํ•œ๋‹ค.
    • URL์˜ ๋„๋ฉ”์ธ์€ CDN ์„œ๋น„์Šค ์ œ๊ณต์ž๊ฐ€ ์ œ๊ณตํ•œ๋‹ค.
  2. CDN ์„œ๋ฒ„ ํ™•์ธ

    • CDN ์„œ๋ฒ„ ์บ์‹œ์— ํ•ด๋‹น ์ด๋ฏธ์ง€๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ:
      • ์„œ๋ฒ„๋Š” ์›๋ณธ ์„œ๋ฒ„(์›น ์„œ๋ฒ„ ๋˜๋Š” AWS S3 ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ)์— ํŒŒ์ผ ์š”์ฒญ.
  3. ์›๋ณธ ์„œ๋ฒ„ ์‘๋‹ต

    • ์›๋ณธ ์„œ๋ฒ„๊ฐ€ ํŒŒ์ผ์„ CDN ์„œ๋ฒ„๋กœ ๋ฐ˜ํ™˜.
    • ์‘๋‹ต์˜ HTTP ํ—ค๋”์—๋Š” ํŒŒ์ผ์˜ TTL(Time-to-live) ๊ฐ’ ํฌํ•จ:
      • TTL์€ ํ•ด๋‹น ํŒŒ์ผ์ด ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ์บ์‹œ๋  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ„.
  4. CDN ์บ์‹œ ๋ฐ ์‚ฌ์šฉ์ž ๋ฐ˜ํ™˜

    • CDN ์„œ๋ฒ„๋Š” ํŒŒ์ผ์„ ์บ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜.
    • ์ด๋ฏธ์ง€ ์บ์‹œ๋Š” TTL์— ๋ช…์‹œ๋œ ์‹œ๊ฐ„ ๋™์•ˆ ์œ ์ง€๋จ.
  5. ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ์š”์ฒญ

    • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž(B)๊ฐ€ ๊ฐ™์€ ์ด๋ฏธ์ง€์— ์ ‘๊ทผํ•˜๋ฉด CDN ์„œ๋ฒ„๋กœ ์š”์ฒญ ์ „์†ก.
  6. ์บ์‹œ ํ™œ์šฉ

    • TTL์ด ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ด๋ฏธ์ง€ ์š”์ฒญ์€ ์บ์‹œ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋จ.

CDN ์‚ฌ์šฉ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ

  • ๋น„์šฉ
    CDN์€ ๋ณดํ†ต ์ œ3์ž ์‚ฌ์—…์ž(third-party providers)๊ฐ€ ์šด์˜ํ•˜๋ฉฐ, CDN์œผ๋กœ ๋“ค์–ด๊ฐ€๊ณ  ๋‚˜๊ฐ€๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก๋Ÿ‰์— ๋”ฐ๋ผ ๋น„์šฉ์ด ์ฒญ๊ตฌ๋จ.
    ์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ์บ์‹ฑํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์ด๋“์ด ํฌ์ง€ ์•Š์œผ๋ฏ€๋กœ, CDN์—์„œ ๋นผ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•จ.

  • ์ ์ ˆํ•œ ๋งŒ๋ฃŒ ์‹œํ•œ ์„ค์ •
    ์‹œ์˜์„ฑ์ด ์ค‘์š”ํ•œ(time-sensitive) ์ฝ˜ํ…์ธ ์˜ ๊ฒฝ์šฐ ๋งŒ๋ฃŒ ์‹œ์ ์„ ์ž˜ ์ •ํ•ด์•ผ ํ•จ.

    • ๊ธด ๊ฒฝ์šฐ: ์ฝ˜ํ…์ธ ์˜ ์‹ ์„ ๋„๊ฐ€ ๋–จ์–ด์ง
    • ์งง์€ ๊ฒฝ์šฐ: ์›๋ณธ ์„œ๋ฒ„์— ๋นˆ๋ฒˆํžˆ ์ ‘์†ํ•˜๊ฒŒ ๋˜์–ด ๋น„ํšจ์œจ์ 
  • CDN ์žฅ์• ์— ๋Œ€ํ•œ ๋Œ€์ฒ˜ ๋ฐฉ์•ˆ
    CDN ์ž์ฒด๊ฐ€ ์ฃฝ์—ˆ์„ ๊ฒฝ์šฐ ์›น์‚ฌ์ดํŠธ/์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ณ ๋ ค ํ•„์š”.

    • ์ผ์‹œ์ ์œผ๋กœ CDN์ด ์‘๋‹ตํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ์›๋ณธ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Œ
  • ์ฝ˜ํ…์ธ  ๋ฌดํšจํ™”(invalidation)
    ์•„์ง ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์€ ์ฝ˜ํ…์ธ ๋ผ ํ•˜๋”๋ผ๋„ ์•„๋ž˜ ๋ฐฉ๋ฒ•์œผ๋กœ CDN์—์„œ ์ œ๊ฑฐ ๊ฐ€๋Šฅ:

    • CDN ์„œ๋น„์Šค ์‚ฌ์—…์ž๊ฐ€ ์ œ๊ณตํ•˜๋Š” API๋กœ ์ฝ˜ํ…์ธ  ๋ฌดํšจํ™”
    • ์ฝ˜ํ…์ธ ์˜ ๋‹ค๋ฅธ ๋ฒ„์ „์„ ์„œ๋น„์Šคํ•˜๋„๋ก ์˜ค๋ธŒ์ ํŠธ ๋ฒ„์ €๋‹(object versioning) ์ด์šฉ
      (URL์˜ ๋งˆ์ง€๋ง‰์— ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์ธ์ž๋กœ ์ฃผ๋ฉด ๋จ)

๐Ÿ“Œ ๋ฌด์ƒํƒœ(stateless) ์›น ๊ณ„์ธต

์›น ๊ณ„์ธต์„ ์ˆ˜ํ‰์ ์œผ๋กœ ํ™•์žฅ(์Šค์ผ€์ผ ์•„์›ƒ)ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ• ๋ ค๋ฉด, ์šฐ์„  ์ƒํƒœ ์ •๋ณด(์‚ฌ์šฉ์ž ์„ธ์…˜ ๋ฐ์ดํ„ฐ ๋“ฑ)๋ฅผ ์›น ๊ณ„์ธต์—์„œ ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค.

์ƒํƒœ ์ •๋ณด ์˜์กด์ ์ธ ์•„ํ‚คํ…์ณ

๊ฐ ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ, ์ƒํƒœ ์˜์กด์ ์ธ ์•„ํ‚คํ…์ฒ˜๋Š” ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉ์ž A, B, C๋Š” ๊ฐ๊ฐ ์„œ๋ฒ„ 1, 2, 3์— ์„ธ์…˜ ๋ฐ์ดํ„ฐ์™€ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ, HTTP ์š”์ฒญ์ด ํ•ด๋‹น ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋˜์–ด์•ผ๋งŒ ์ธ์ฆ ์ ˆ์ฐจ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

๋ฌธ์ œ๋Š” ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ํ•ญ์ƒ ๊ฐ™์€ ์„œ๋ฒ„๋กœ๋งŒ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๋Œ€๋ถ€๋ถ„์˜ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ๊ณ ์ • ์„ธ์…˜(sticky session) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์— ๋ถ€๋‹ด์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

๋ฌด์ƒํƒœ(stateless) ์•„ํ‚คํ…์ณ

์ƒํƒœ ์ •๋ณด์— ์˜์กดํ•˜์ง€ ์•Š๋Š”, ๋ฌด์ƒํƒœ ์•„ํ‚คํ…์ฒ˜์˜ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ์˜ HTTP ์š”์ฒญ์€ ์–ด๋–ค ์›น ์„œ๋ฒ„๋กœ๋„ ์ „๋‹ฌ ๊ฐ€๋Šฅํ•˜๋‹ค.

์›น ์„œ๋ฒ„๋Š” ์ƒํƒœ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ณต์œ  ์ €์žฅ์†Œ(shared storage)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

๋”ฐ๋ผ์„œ ์ƒํƒœ ์ •๋ณด๋Š” ์›น ์„œ๋ฒ„์™€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค.

๋ฌด์ƒํƒœ ์›น ๊ณ„์ธต์„ ๊ฐ–๋„๋ก ์„ค๊ณ„ํ•˜๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์›น ๊ณ„์ธต์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ , ์ง€์†์„ฑ ๋ฐ์ดํ„ฐ ๋ณด๊ด€์†Œ์— ์ €์žฅํ•˜๋„๋ก ํ•˜์˜€๋‹ค. ์ด ๊ณต์œ  ์ €์žฅ์†Œ๋Š” ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด NoSOL, ๋˜๋Š” Redis ๊ฐ™์€ ์บ์‹œ ์‹œ์Šคํ…œ์ด๋‚˜ RDB์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

์ž๋™ ๊ทœ๋ชจ ํ™•์žฅ(autoscaling)์€ ํŠธ๋ž˜ํ”ฝ ์–‘์— ๋”ฐ๋ผ ์›น ์„œ๋ฒ„๋ฅผ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋งํ•œ๋‹ค.

์ƒํƒœ ์ •๋ณด๊ฐ€ ์›น ์„œ๋ฒ„๋“ค ๋กœ๋ถ€ํ„ฐ ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฏ€๋กœ, ํŠธ๋ž˜ํ”ฝ ์–‘์— ๋”ฐ๋ผ ์›น ์„œ๋ฒ„๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๊ธฐ๋งŒ ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๊ทœ๋ชจ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์šฉ์ดํ•œ ๊ตฌ์กฐ๋ฅผ ๋„๊ฒŒ ๋œ๋‹ค. ๊ฐ€์šฉ์„ฑ์„ ๋†’์ด๊ณ  ์ „ ์„ธ๊ณ„ ์–ด๋””์„œ๋„ ์พŒ์ ํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ• ๋ ค๋ฉด ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ(data center)๋ฅผ ์ง€์›ํ•˜๋Š”๊ฒƒ์ด ํ•„์ˆ˜๋‹ค.

๐Ÿ“Œ ๋ฉ”์„ธ์ง€ ํ(Message Queue)

  • ๋ฉ”์‹œ์ง€์˜ ๋ฌด์†์‹ค(durability, ์ฆ‰ ๋ฉ”์‹œ์ง€ ํ์— ์ผ๋‹จ ๋ณด๊ด€๋œ ๋ฉ”์‹œ์ง€๋Š” ์†Œ๋น„์ž๊ฐ€ ๊บผ๋‚ผ ๋•Œ๊นŒ์ง€ ์•ˆ์ „ํžˆ ๋ณด๊ด€๋œ๋‹ค๋Š” ํŠน์„ฑ)์„ ๋ณด์žฅํ•˜๋Š”, ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์ง€์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ

  • ๋ฉ”์‹œ์ง€์˜ ๋ฒ„ํผ ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ „์†ก

  • ์ƒ์‚ฐ์ž(producer, publisher): ์ž…๋ ฅ ์„œ๋น„์Šค๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋“ค์–ด ํ์— ๋ฐœํ–‰(publish)

  • ์†Œ๋น„์ž(consumer, subscriber): ํ์— ์—ฐ๊ฒฐ๋˜์–ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌ

๋ฉ”์‹œ์ง€ ํ์˜ ์žฅ์ 

  • ์„œ๋น„์Šค ๋˜๋Š” ์„œ๋ฒ„ ๊ฐ„ ๊ฒฐํ•ฉ์ด ๋А์Šจํ•ด์ง
  • ๊ทœ๋ชจ ํ™•์žฅ์„ฑ ๋ณด์žฅ
  • ์ƒ์‚ฐ์ž๋Š” ์†Œ๋น„์ž๊ฐ€ ํ”„๋กœ์„ธ์Šค ๋‹ค์šด ์ƒํƒœ์—ฌ๋„ ๋ฉ”์‹œ์ง€ ๋ฐœํ–‰ ๊ฐ€๋Šฅ
  • ์†Œ๋น„์ž๋Š” ์ƒ์‚ฐ์ž ์„œ๋น„์Šค๊ฐ€ ๊ฐ€์šฉํ•˜์ง€ ์•Š์•„๋„ ๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ๊ฐ€๋Šฅ

์˜ˆ์‹œ: ์ด๋ฏธ์ง€ ๋ณด์ • ์•ฑ

  • ์ด๋ฏธ์ง€ ํฌ๋กญ, ์ƒคํ”„๋‹, ๋ธ”๋Ÿฌ๋ง ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ง€์›

  • ๋ณด์ • ์ž‘์—…์€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค โ†’ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํŽธ๋ฆฌ

  • ๋™์ž‘ ์˜ˆ์‹œ)

  1. ์›น ์„œ๋ฒ„๊ฐ€ ์‚ฌ์ง„ ์ž‘์—…(job)์„ ๋ฉ”์‹œ์ง€ ํ์— ๋„ฃ์Œ
  2. ์‚ฌ์ง„ ๋ณด์ • ์ž‘์—…(worker) ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ์—์„œ ์ž‘์—…์„ ๊บผ๋‚ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ
  3. ์ƒ์‚ฐ์ž์™€ ์„œ๋น„์Šค์˜ ๊ทœ๋ชจ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅ
  4. ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ๋” ๋งŽ์€ job์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋‹จ์ถ• ๊ฐ€๋Šฅ

๐Ÿ“Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ทœ๋ชจ ํ™•์žฅ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ทœ๋ชจ๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐ์—๋Š” ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค. ํ•˜๋‚˜๋Š” ์ˆ˜์ง์  ๊ทœ๋ชจ ํ™•์žฅ , ๋˜ ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์ˆ˜ํ‰์  ๊ทœ๋ชจ ํ™•์žฅ ์ด๋‹ค.

์ˆ˜์ง์  ๊ทœ๋ชจ ํ™•์žฅ

  • ์œ„์— ์„œ๋ฒ„๋ฅผ ์ˆ˜์ง์  ๊ทœ๋ชจ ํ™•์žฅ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋„ ์Šค์ผ€์ผ ์—… ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ๊ธฐ์กด DB ์„œ๋ฒ„์— ๋” ๋งŽ์€, ๋˜๋Š” ๊ณ ์„ฑ๋Šฅ์˜ ์ž์›(CPU, RAM, ๋””์Šคํฌ ๋“ฑ)์„ ์ฆ์„คํ•˜๋Š” ๋ฐฉ๋ฒ•

๋‹จ์ 

  • DB ์„œ๋ฒ„ ํ•˜๋“œ์›จ์–ด์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, CPU, RAM๋“ฑ์„ ๋ฌดํ•œ ์ฆ์„คํ•  ์ˆ˜ ์—†๋‹ค.
  • SPOF(Single Point Of Failure)๋กœ ์ธํ•œ ์œ„ํ—˜์„ฑ
  • ๋น„์šฉ ๋ฌธ์ œ

์ˆ˜ํ‰์  ํ™•์žฅ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ˆ˜ํ‰์  ํ™•์žฅ์€ ์ƒค๋”ฉ(sharding) ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.
  • ๋” ๋งŽ์€ db ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œ ํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ์ƒค๋”ฉ์€ ๋Œ€๊ทœ๋ชจ DB๋ฅผ ์ƒค๋“œ(shard)๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ž‘์€ ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ๋ชจ๋“  ์ƒค๋“œ๋Š” ๊ฐ™์€ ์Šคํ‚ค๋งˆ๋ฅผ ์“ฐ์ง€๋งŒ, ์ƒค ๋“œ์— ๋ณด๊ด€๋˜๋Š” ๋ฐ์ดํ„ฐ ์‚ฌ์ด์—๋Š” ์ค‘๋ณต์ด ์—†๋‹ค.

์œ„์˜ ๊ทธ๋ฆผ์€ user_id ๊ฐ’์— ๋”ฐ๋ผ ์ƒค๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ธฐ์ค€์„ ์ •ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, user_id %4๋ฅผ ํ•ด์‹œ ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด๊ด€๋˜๋Š” ์ƒค๋“œ๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ 0์ด๋ผ๋ฉด 0๋ฒˆ ์ƒค๋“œ์— ๋„ฃ๋Š”๋‹ค.

์ƒค๋”ฉ ์ „๋žต ๊ตฌํ˜„ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ 

๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ถ„์‚ฐํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์นผ๋Ÿผ, ์ฆ‰ ์ƒค๋”ฉ ํ‚ค(sharding key, partition key)๋ฅผ ์–ด๋–ป๊ฒŒ ์ •ํ•˜๋А๋ƒ๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

์ƒค๋”ฉ ํ‚ค๋ฅผ ํ†ตํ•ด ์˜ฌ๋ฐ”๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์งˆ์˜๋ฅผ ๋ณด๋‚ด ๋ฐ์ดํ„ฐ ์กฐํšŒ๋‚˜ ๋ณ€๊ฒฝ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

์ƒค๋”ฉ ํ‚ค๋ฅผ ์ •ํ•  ๋•Œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค.


์ƒค๋”ฉ ๋„์ž… ์‹œ ํ’€์–ด์•ผ ํ•  ๋ฌธ์ œ๋“ค

1. ๋ฐ์ดํ„ฐ์˜ ์žฌ์ƒค๋”ฉ (resharding)

๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„ ํ•˜๋‚˜์˜ ์ƒค๋“œ๋กœ๋Š” ๋” ์ด์ƒ ๊ฐ๋‹นํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด ์ƒค๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

๋˜๋Š” ์ƒค๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๊ฐ€ ๊ท ๋“ฑํ•˜์ง€ ๋ชปํ•˜์—ฌ ์ƒค๋“œ ์†Œ์ง„(shard exhaustion)์ด ๋ฐœ์ƒํ•  ๋•Œ๋„ ์ƒค๋“œ ํ‚ค๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•ด์•ผ ํ•œ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์•ˆ์ • ํ•ด์‹œ(Consistent Hashing) ๊ธฐ๋ฒ•์„ ํ™œ์šฉ

2. ์œ ๋ช…์ธ์‚ฌ(celebrity) ๋ฌธ์ œ

ํ•ซ์ŠคํŒŸ ํ‚ค(hotspot key) ๋ฌธ์ œ๋ผ๊ณ ๋„ ํ•˜๋Š”๋ฐ, ํŠน์ • ์ƒค๋“œ์— ์งˆ์˜๊ฐ€ ์ง‘์ค‘๋˜์–ด ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ํ˜„์ƒ์ด๋‹ค.
์˜ˆ: SNS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งŽ์ด ๊ฒ€์ƒ‰๋˜๋Š” ๋‹จ์–ด(Justin Bieber, Lady Gaga ๋“ฑ)๋ฅผ ๊ฐ™์€ ์ƒค๋“œ์— ์ €์žฅํ•˜๋ฉด, ํ•ด๋‹น ์ƒค๋“œ๋Š” read ์—ฐ์‚ฐ์œผ๋กœ ์ธํ•ด ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์กฐ์ธ๊ณผ ๋น„์ •๊ทœํ™” (join, denormalization)

ํ•˜๋‚˜์˜ DB๋ฅผ ์—ฌ๋Ÿฌ ์ƒค๋“œ๋กœ ๋ถ„ํ• ํ•œ ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ ์ƒค๋“œ์— ๊ฑธ์นœ ๋ฐ์ดํ„ฐ ์กฐ์ธ์ด ์–ด๋ ค์›Œ์ง„๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด DB๋ฅผ ๋น„์ •๊ทœํ™”ํ•˜์—ฌ, ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—์„œ ์งˆ์˜๊ฐ€ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ...

์ €๋ฒˆ๋‹ฌ์— ํ›„์ฟ ์˜ค์นด๋ฅผ ๋‹ค๋…€์˜ค๋ฉด์„œ ์ฐ์€ ์‚ฌ์ง„์ด๋‹ค. ์กฐ๊ธˆ์€ ํž˜๋“ค๊ธฐ๋„ ํ–ˆ์ง€๋งŒ, ์ทจ์ค€์„ ํ•˜๋ฉด์„œ ๋ฐ›์•˜๋˜ ์ŠคํŠธ๋ ˆ์Šค๊ฐ€ ์กฐ๊ธˆ ๋‚ ์•„๊ฐ€๊ธด ํ–ˆ๋‹ค.

๋‹ค์Œ ์ฃผ๋ฉด ์˜ˆ๋น„๊ตฐ์œผ๋กœ 2๋ฐ• 3์ผ ๋‹ค๋…€์™€์•ผ ํ•œ๋‹ค.
์กฐ๊ธˆ ๊ท€์ฐฎ๊ธฐ๋„ ํ•˜์ง€๋งŒ, ๊ทธ๋ž˜๋„ ๋‹ค์น˜์ง€ ๋ง๊ณ  ๋ฌด์‚ฌํžˆ ๋‹ค๋…€์™”์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

profile
๋…ธ๋ ฅ์€ ๋ฐฐ์‹ ํ•˜์ง€ ์•Š์•„ ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€