[SWA] System Design Warmup - 1

๐Ÿ›๏ธ

๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•  ๋•Œ์— ๊ณ ๋ คํ•ด์•ผํ•  ์‚ฌํ•ญ๋“ค์ด ์กด์žฌํ•œ๋‹ค. ํšจ์œจ์ ์ด๊ณ  ๊ฒฝ์ œ์ ์ธ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋Ÿฌํ•œ ๊ฐœ๋…์„ ์ž˜ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค

  • CAP Theorem

  • PACELC Theorem

  • SQL vs NoSQL

  • Load Balancing

  • Caching

  • Data Partitioning

  • Redundancy & Replication

  • Indexing

  • Proxies

  • Long Polling vs WebSocket vs Server-Sent Event

  • Leader & Follower

  • Quorum

  • Heartbeat

  • Bloom Filter

  • Checksum

  • Consistent Hashing


1. ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ํ•„์ˆ˜ ๊ณ ๋ ค์‚ฌํ•ญ

๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ํ•„์ˆ˜ ๊ณ ๋ ค์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

  • ํ™•์žฅ์„ฑ Scalability

    • ์ฆ๊ฐ€ํ•˜๋Š” ์ž‘์—…๋Ÿ‰์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์†์ ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
    • Storage, Computing, Network ๋ฆฌ์†Œ์Šค ๋“ฑ์— ๋Œ€ํ•ด์„œ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์€ ํ™•์žฅํ•จ์— ๋”ฐ๋ผ ์ฆ๊ฐ€ํ•˜์ง€๋งŒ ๊ด€๋ฆฌ/ํ™˜๊ฒฝ์ ์ธ ๋น„์šฉ์œผ๋กœ ์„ฑ๋Šฅ์ด ๊ฐ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค.(locality ๊ฐ์†Œ, N/W ๋ง ๋ถ„๋ฆฌ์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ ์ €ํ•˜ ๋“ฑ)
    • ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ณ๋Š” ๊ฐ ์ž‘์—…๋“ค์„ atomic ํ•˜๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ณ , ๋ชจ๋“  ๋…ธ๋“œ์˜ ๋กœ๋“œ๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ์กฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ํ™•์žฅ์„ฑ์€ scale-up์ด ์•„๋‹Œ scale-out์„ ์˜๋ฏธํ•œ๋‹ค. (scale-up์€ downtime์„ ๋ณดํ†ต ์œ ๋ฐœํ•œ๋‹ค.)
  • ์‹ ๋ขฐ์„ฑ Reliability

    • HW๋‚˜ SW๊ฐ€ ๊ณ ์žฅ๋‚˜๋Š” ๋นˆ๋„๋‚˜ ๊ณ ์žฅ๋‚˜๋Š” ๊ธฐ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐœ๋…. ์„œ๋น„์Šค๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ
    • ์ผ๋ถ€ ์ž‘์—…์ด ์‹คํŒจํ•˜๋”๋ผ๋„ ํ•ด๋‹น ์ž‘์—…์€ ๊ฒฐ๊ตญ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์–ด์•ผ ํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•œ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•œ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ํ†ตํ•ด ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ์„œ๋ฒ„์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ณต์ œ๋ณธ์„ ํ†ตํ•ด ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
    • ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์€ ๋ชจ๋“  SPoF๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ณต์›๋ ฅresilience๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • ๊ฐ€์šฉ์„ฑ Availability

    • ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์‹œ์Šคํ…œ์„ ์–ด๋Š์ •๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์„ ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐœ๋…. ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ.
    • ์‹ ๋ขฐ์„ฑ์€ ๊ฐ€์šฉ์„ฑ๋ณด๋‹ค ๋” ๋†’์€ ๋ฒ”์œ„๋กœ ๋ชจ๋“  ์กฐ๊ฑด์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์„ ์˜๋ฏธํ•œ๋‹ค.
    • ์‹œ์Šคํ…œ์ด ์‹ ๋ขฐ์„ฑ์ด ์žˆ์œผ๋ฉด ๊ฐ€์šฉํ•˜๋‚˜, ๊ฐ€์šฉ์„ฑ์ด ์žˆ๋‹ค๊ณ  ํ•ด์„œ ์‹ ๋ขฐ์„ฑ์ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์‹ ๋ขฐ์„ฑ์ด ๋‚ฎ์€ ์‹œ์Šคํ…œ์ด๋ผ๊ณ  ํ•˜๋”๋ผ๋„ ์„œ๋น„์Šค ๋ณต๊ตฌ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋Œ€์ฒด ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๊ณ ๊ฐ€์šฉ์„ฑHigh Availability ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ˜๋Œ€๋กœ, ์ถœ์‹œ ํ›„ 2๋…„๋™์•ˆ ๊ฐ€์šฉ์„ฑ์ด 99.99% ์ธ ์˜จ๋ผ์ธ ๋งˆ์ผ“์ด ๋ณ„๋„์˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ ์—†์ด ์„œ๋น„์Šค ๋˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋•Œ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์ง€๋งŒ ๊ฐ€์šฉ์„ฑ์€ ๋†’์€ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ๋งŒ์•ฝ 3๋…„์ฐจ์— ๋ณด์•ˆ ์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋‚˜๋ฉด ์ด๋•Œ๋Š” ๊ฐ€์šฉ์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ ๋ชจ๋‘ ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค.
  • ํšจ์œจ์„ฑ Efficiency

    • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ์˜ ํšจ์œจ์„ฑ ์ง€ํ‘œ๋Š” ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
      1. ์‘๋‹ต์‹œ๊ฐ„response time (latency) - ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์ง€์—ฐ๋˜๋Š” ์‹œ๊ฐ„
      2. ์ฒ˜๋ฆฌ๋Ÿ‰throughput(bandwidth) - ๋‹จ์œ„ ์‹œ๊ฐ„ ๋‹น ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋Ÿ‰
    • ๋‘ ์ธก์ • ๊ฐ’์€ ๋‹ค์Œ์˜ ๋‹จ์œ„๋น„์šฉ์— ์ƒ์‘๋œ๋‹ค.
      1. ์ „์†ก๋˜๋Š” ๋ฉ”์„ธ์ง€ ์ˆ˜ (๋ฉ”์„ธ์ง€ ํฌ๊ธฐ์™€ ๋ฌด๊ด€)
      2. ์ „์†ก๋œ ๋ฉ”์„ธ์ง€ ํฌ๊ธฐ (๋ฉ”์„ธ์ง€ ์ˆ˜์™€ ๋ฌด๊ด€)
    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”์„ธ์ง€ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์€ ์ง€๋‚˜์น˜๊ฒŒ ๋‹จ์ˆœํ•˜์—ฌ ๋งŽ์€ ํŠน์„ฑ๋“ค์„ ๋†“์น˜๊ฒŒ ๋œ๋‹ค. (?)
    • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ์˜ ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ์˜ˆ์ธก์€ ๋งค์šฐ ์–ด๋ ต์ง€๋งŒ ์„ฑ๋Šฅ ๊ธฐ์ค€์ด ๋˜๋Š” ์ถ”์ •์น˜๋Š” ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๊ด€๋ฆฌ์„ฑ Manageability

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

2. CAP ์ด๋ก 

๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๋””์Šคํฌ๊ฐ€ ์†์ƒ๋˜์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ ธ ์‹œ์Šคํ…œ ์ผ๋ถ€์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•ด์„œ ์ตœ๋Œ€ํ•œ์˜ ์ด์ ์„ ์–ป๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์‹œ์Šคํ…œ์„ ๋””์ž์ธ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž

CAP์ด๋ก ์—์„œ๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์ด ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ๋ฐ”๋žŒ์งํ•œ ์†์„ฑ์„ ๋ชจ๋‘ ๋™์‹œ์— ์ œ๊ณตํ•˜๋Š”๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๋ชจ๋“  ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์€ ์„ธ๊ฐ€์ง€ ์†์„ฑ ์ค‘ ๋‘๊ฐ€์ง€๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

  • ์ผ๊ด€์„ฑConsistency
    • ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋™์‹œ์— ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ. ์ด๋Š” ๋ฐ์ดํ„ฐ ์‚ฌ๋ณธ์„ ๊ฐ€์ง€๋Š” ๊ฒƒ๊ณผ ๋™์ผ
  • ๊ฐ€์šฉ์„ฑAvailability
    • ์‹œ์Šคํ…œ์˜ ์‹คํŒจํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๊ฐ€ ๋ฐ›์€ ์š”์ฒญ์€ ์‘๋‹ต์„ ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์‹ฌ๊ฐํ•œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋ชจ๋“  ์š”์ฒญ์€ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ํŒŒํ‹ฐ์…˜ ํ—ˆ์šฉPartition tolerance
    • ์‹œ์Šคํ…œ์˜ ๋ถ€๋ถ„์ ์ธ ์˜ค๋ฅ˜๋‚˜ ์ž„์˜์˜ ๋ฉ”์„ธ์ง€ ์†์‹ค์—๋„ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค. ์‹œ์Šคํ…œ ์ „์ฒด ๋„คํŠธ์›Œํฌ ์žฅ์• ๊ฐ€ ์•„๋‹Œ ํ•œ, ๋ชจ๋“  ๋„คํŠธ์›Œํฌ ์žฅ์• ๋ฅผ ๊ฒฌ๋””๊ณ  ๋ฐ์ดํ„ฐ๋Š” ์ถฉ๋ถ„ํžˆ ๋ณต์ œ๋˜์–ด ์‹œ์Šคํ…œ์„ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค.

ํŒŒํ‹ฐ์…˜ ํ—ˆ์šฉ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ์žฅ์• ์— ๋Œ€ํ•ด์„œ ์ผ๊ด€์„ฑ/๊ฐ€์šฉ์„ฑ์„ ํฌ๊ธฐํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— CA๋Š” ์ผ๊ด€๋œ ์˜ต์…˜์ด ๋  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ ๋ถ„์‚ฐ์‹œ์Šคํ…œ์—์„œ๋Š” CP ๋˜๋Š” AP๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.


3.PACELC ์ด๋ก 

๋ถ„์‚ฐ์‹œ์Šคํ…œ์€ partitioning์„ ํ”ผํ•  ์ˆ˜ ์—†์Œ์œผ๋กœ CAP์— ๋”ฐ๋ผ ์ผ๊ด€์„ฑ ๋˜๋Š” ๊ฐ€์šฉ์„ฑ์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค. ACID(Atomicity, Consistency, Isolation, Durability) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ผ๊ด€์„ฑ์„ ์„ ํƒํ•œ ๋ฐ˜๋ฉด BASE (Basically Available, Soft-state, Eventually consistency) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ฐ€์šฉ์„ฑ์„ ์„ ํƒํ–ˆ๋‹ค. BASE๋Š” ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋กœ ์‘๋‹ต์„ ์ œ๊ณตํ•œ๋‹ค. PACELC ์ด๋ก ์€ ํŒŒํ‹ฐ์…”๋‹์„ ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ์˜ ์„ ํƒ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€๋กœ ์ œ์‹œํ•œ๋‹ค.

  • P๊ฐ€ ์žˆ๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์€ A์™€ C๊ฐ„ ๊ท ํ˜•์„ ๋งž์ถœ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด(Else - E) ํŒŒํ‹ฐ์…˜์ด ์—†๋Š” ์ƒํƒœ์—์„œ ์‹œ์Šคํ…œ์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋  ๋•Œ ์‹œ์Šคํ…œ์€ ๋Œ€๊ธฐ์‹œ๊ฐ„(L)๊ณผ ์ผ๊ด€์„ฑ(C)์— ๊ท ํ˜•์„ ๋งž์ถœ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฒฐ๊ตญ PAC๋Š” CAP์™€ ๋™์ผํ•˜๊ณ  ELC๋Š” P๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ํ™•์žฅ์ด๋œ๋‹ค.
  • PACELC์˜ ์ „์ฒด ๋…ผ๋ฌธ์—์„œ๋Š” ๋ณต์ œ๋ฅผ ํ†ตํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์œ ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋ฉด CAP์ •๋ฆฌ๊ฐ€ ์šฐ์„ ๋˜๊ณ , ์‹คํŒจ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ผ๊ด€์„ฑ๊ณผ ๋Œ€๊ธฐ์‹œ๊ฐ„ ๊ฐ„ tradeoff๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

์ด์— ๋Œ€ํ•œ ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค

  • Dynamo์™€ Cassandra๋Š” PA / EL ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ํŒŒํ‹ฐ์…˜์ด ๋ฐœ์ƒํ•  ๋•Œ ์ผ๊ด€์„ฑ๋ณด๋‹ค ๊ฐ€์šฉ์„ฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • BigTable ๋ฐ HBase๋Š” PC / EC ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ํ•ญ์ƒ ์ผ๊ด€์„ฑ์„ ์„ ํƒํ•˜์—ฌ ๊ฐ€์šฉ์„ฑ์„ ํฌ๊ธฐํ•˜๊ณ  ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ž…๋‹ˆ๋‹ค.
  • MongoDB๋Š” PA / EC์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ํŒŒํ‹ฐ์…˜์˜ ๊ฒฝ์šฐ ๊ฐ€์šฉ์„ฑ์„ ์„ ํƒํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

4. SQL vs NoSQL

ํ˜„ ์‹œ์ ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ SQL์ด๋ผ๊ณ  ์ด์•ผ๊ธฐํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (RDB)๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, NoSQL์€ ์ด๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค๊ณ  ๋ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ˆ๋‹ค. ์œ„์˜ CAP์—์„œ RDB์— ํ•ด๋‹น ํ•˜๋Š” ๊ฒƒ์€ CA์ด๋ฉฐ, NoSQL์€ CP, AP๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

4.1 SQL

  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ–‰๊ณผ ์—ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
  • ๊ฐ ํ–‰์—๋Š” ํ•˜๋‚˜์˜ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜๊ณ  ๊ฐ ์—ด์—๋Š” ๋ชจ๋“  ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ ์š”์†Œ๊ฐ€ ํฌํ•จ.
  • ex) MySQL, Oracle, MS SQL Server, SQLite, Postgres, MariaDB

4.2 NoSQL

  • NoSQL์€ ํ˜•ํƒœ์— ๋”ฐ๋ผ ์ผ๋ฐ˜์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ๋ถ„ํ•จ.
    1. Key-Value : ๋ฐ์ดํ„ฐ๋Š” key-value ํ˜•ํƒœ๋กœ ์ €์žฅ (Redis, Voldemort, DynamoDB ๋“ฑ)
    2. Document : ๋ฐ์ดํ„ฐ๋Š” ๋ฌธ์„œ ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋ฉฐ, ๋ฌธ์„œ๋Š” collection ํ˜•ํƒœ๋กœ ๊ทธ๋ฃนํ™” ๋œ๋‹ค. ๊ฐ ๋ฌธ์„œ๋Š” ์ •ํ•ด์ง„ ๊ตฌ์กฐ๊ฐ€ ์—†์œผ๋ฉฐ ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. (CouchDB, MongoDB ๋“ฑ)
    3. Wide-Column : ํ…Œ์ด๋ธ” ๋Œ€์‹  column family๋ฅผ ๊ฐ€์ง€๊ณ  ํ–‰์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค. ๋ชจ๋“  column์„ ๋ฏธ๋ฆฌ ์•Œ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ๊ฐ ํ–‰์— ๋™์ผํ•œ ์ˆ˜์˜ column์ด ์žˆ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค. (Cassandra, HBase ๋“ฑ)
    4. Graph : ๋ฐ์ดํ„ฐ๋Š” ๋…ธ๋“œ(entity), ์†์„ฑ(properties) ๋ฐ ์„ (line)์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. (Neo4J, InfiniteGraph ๋“ฑ)

4.3 SQL๊ณผ NoSQL์˜ ์ฐจ์ด์ 

1) ์Šคํ‚ค๋งˆ

  • SQL : ๊ฐ ๋ ˆ์ฝ”๋“œ๋Š” ๊ณ ์ • ์Šคํ‚ค๋งˆ๋ฅผ ๋”ฐ๋ฆ„. row ๋งˆ๋‹ค ๊ณ ์ •๋œ column ๊ฐ’์„ ๊ฐ€์ ธ์•ผํ•จ
  • NoSQL : ์Šคํ‚ค๋งˆ๊ฐ€ ๋™์ ์ด๋ฉฐ ์‰ฝ๊ฒŒ column ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ. row ๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ column์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ.

2) ์ฟผ๋ฆฌ

  • SQL : ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ์กฐ์ž‘ํ•˜๋Š”๋ฐ ๊ฐ•๋ ฅํ•œ SQL์„ ์‚ฌ์šฉ
  • NoSQL : ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์ „๋ถ€ ๋‹ค๋ฆ„
  1. ํ™•์žฅ์„ฑ
  • SQL : ์ผ๋ฐ˜์ ์œผ๋กœ scale-up์„ ํ†ตํ•ด์„œ ํ™•์žฅ ๊ฐ€๋Šฅ. partitioning์„ ํ†ตํ•ด์„œ ํ™•์žฅ ๊ฐ€๋Šฅ
  • NoSQL : scale-out์ด ๊ฐ€๋Šฅํ•จ์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์‰ฝ๊ฒŒ ๋ถ€ํ•˜๋ถ„์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ์Œ
  1. ์‹ ๋ขฐ์„ฑ / ACID
  • SQL : ์ผ๋ฐ˜์ ์œผ๋กœ RDBMS ๋Š” ACID๋ฅผ ๋ณด์žฅํ•จ. ์•ˆ์ •์„ฑ๊ณผ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋Š” ๋” ์ข‹์Œ
  • NoSQL : ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ์œ„ํ•ด์„œ ACID๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ํฌ์ƒํ•œ๋‹ค.

4.4 ์ ์ ˆํ•œ DBMS์˜ ์„ ํƒ

์„ธ์ƒ์— ๋ชจ๋“  ๊ฒƒ์„ ๊ณ ์น˜๋Š” ๋งŒ๋ณ‘ํ†ต์น˜์•ฝ์ด ์•„์ง ๊ฐœ๋ฐœ๋˜์ง€ ์•Š์•˜๋“ฏ, ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ๋„ ๋ชจ๋“  ๊ฒƒ์„ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜๋Š” ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ์Šคํ…œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ํ™•์ธํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๊ธฐ์ˆ ์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

  • ACID๊ฐ€ ๋ณด์žฅ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ.
  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ํ•œ๋ฒˆ ์ •์˜๋˜๋ฉด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ.
  • ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์žฌ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ผ๊ด€๋œ ๋ฐ์ดํ„ฐ ๋Ÿ‰์œผ๋กœ ์ž‘์—…๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

NoSQL์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

  • ๋น…๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ. ์—ฌ๊ธฐ์„œ์˜ ๋น…๋ฐ์ดํ„ฐ๋Š” ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•  ์ˆ˜๋„ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋“ค์–ด์˜ค๋Š” ํŠธ๋žœ์žญ์…˜์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ๋งค์šฐ ๋น ๋ฅธ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ(MongoDB, CouchDB, Cassandra, HBase ๋“ฑ)
  • ์Šคํ‚ค๋งˆ๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€๋Ÿ‰์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ.
  • ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€ ๋ฐ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ. scale-out์„ ํ†ตํ•ด ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— NoSQL์„ ์‚ฌ์šฉ.
  • ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ์„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ

5. Load Balancing

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ (LB)๋Š” ์„œ๋ฒ„ ๋ฐ DB์— ๋Œ€ํ•œ ์‘๋‹ต์„ฑ๊ณผ ๊ฐ€์šฉ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ. ๋‹ค์–‘ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐธ๋Ÿฐ์‹ฑ ๋Œ€์ƒ์—๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•ด์ฃผ๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ client์™€ server ์‚ฌ์ด์— ๋†“์—ฌ์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๋จ.

์™„์ „ํ•œ ํ™•์žฅ์„ฑ๊ณผ ์ค‘๋ณต์„ฑ์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์Šคํ…œ์˜ ๊ฐ ๊ณ„์ธต์— LB๋ฅผ ๋‘˜ ์ˆ˜ ์žˆ์Œ

  • ์‚ฌ์šฉ์ž์™€ web-server ์‚ฌ์ด
  • web-server์™€ application ์„œ๋ฒ„ ๋˜๋Š” cache ์„œ๋ฒ„์™€ ๊ฐ™์€ ๋‚ด๋ถ€ ํ”Œ๋žซํผ ๊ณ„์ธต ์‚ฌ์ด
  • ๋‚ด๋ถ€ ํ”Œ๋žซํผ ๊ณ„์ธต๊ณผ DB ์‚ฌ์ด

LB๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ€์šฉ์„ฑ(์ผ๋ถ€๊ฐ€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐ), ์‘๋‹ต์„ฑ(์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ฐ€ ๋‚˜๋ˆ ์„œ ์š”์ฒญ์„ ๋ฐ›์Œ), ์ฒ˜๋ฆฌ๋Ÿ‰ ์ฆ๊ฐ€(์—ฌ๋Ÿฌ ์„œ๋ฒ„์˜ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉ)ํ•˜๋Š” ์žฅ์ ์ด ์žˆ์Œ.

LB์—์„œ ์ œ๊ณต๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • Health check - LB๋Š” ๊ฐ ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์—ฌ ์ •์ƒ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•จ. ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•จ. ์ƒํƒœ ํ™•์ธ์— ์‹คํŒจํ•˜๋ฉด ์„œ๋น„์Šค ๋Œ€์ƒ์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ์ƒํƒœ ํ™•์ธ์— ๋‹ค์‹œ ์‘๋‹ต ํ•˜๊ธฐ ์ „๊นŒ์ง€ ํŠธ๋ž˜ํ”ฝ์ด ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ

  • ์ตœ์†Œ์—ฐ๊ฒฐ๋ฒ• Least Connection - ํ™œ์„ฑ ์—ฐ๊ฒฐ์ด ๊ฐ€์žฅ ์ ์€ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌ. ์ด ๋ฐฉ์‹์€ ์„œ๋ฒ„๊ฐ„ ๊ณ ๋ฅด์ง€ ์•Š๊ฒŒ ๋ถ„์‚ฐ๋œ ์˜๊ตฌ์ ์ธpersistent client ์—ฐ๊ฒฐ์ด ๋งŽ์€ ๊ฒฝ์šฐ ์œ ์šฉํ•จ.

  • ์ตœ์†Œ์‘๋‹ต์‹œ๊ฐ„๋ฒ• Least Response Time - ํ™œ์„ฑ์—ฐ๊ฒฐ์ด ๊ฐ€์žฅ ์ ๊ณ  ํ‰๊ท  ์‘๋‹ต์ด ๊ฐ€์žฅ ๋‚ฎ์€ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋ƒ„

  • ์ตœ์†Œ ๋Œ€์—ญํญ Least Bandwith - ์ดˆ๋‹น ๋ฉ”๊ฐ€ ๋น„ํŠธ๋กœ ์ธก์ •๋œ ์ตœ์†Œ ํŠธ๋ž˜ํ”ฝ ์–‘์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ์„ ํƒ

  • ๋ผ์šด๋“œ ๋กœ๋นˆ Round Robin - ์„œ๋ฒ„ ๋ชฉ๋ก์„ ์ˆœํ™˜ํ•˜๊ณ  ๊ฐ๊ฐ์˜ ์ƒˆ ์š”์ฒญ์„ ๋‹ค์Œ ์„œ๋ฒ„๋กœ ๋ณด๋ƒ„. ๋ชฉ๋ก ๋์— ๋„๋‹ฌํ•˜๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘.

  • ๊ฐ€์ค‘ ๋ผ์šด๋“œ ๋กœ๋นˆ Weighted Round Robin - ๊ฐ ์„œ๋ฒ„์˜ ์‚ฌ์–‘์ด ๋‹ค๋ฅผ ๋•Œ ํ•ด๋‹น ์‚ฌ์–‘์— ๋งž์ถฐ ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„œ ๊ณ ์•ˆ๋จ.

  • IP hash - ํด๋ผ์ด์–ธํŠธ IP์ฃผ์†Œ์˜ ํ•ด์‹œ ๊ฐ’์„ ๊ตฌํ•ด ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ์ƒ์‘ํ•˜๋Š” ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐํ•ด ์คŒ.

LB ์ž์ฒด๊ฐ€ SPoF๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— LB๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ. LB๋Š” ๋‹ค๋ฅธ LB์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋‘ LB ๋ชจ๋‘ ํŠธ๋ž˜ํ”ฝ ๋ฐ ์žฅ์•  ๊ฐ์ง€๋ฅผ ๋™๋“ฑํ•˜๊ฒŒ ์ œ๊ณตํ•ด์ค„ ์ˆ˜ ์žˆ์Œ์œผ๋กœ primary LB๊ฐ€ ์‹คํŒจํ•˜๋ฉด secondary LB๊ฐ€ ๋™์ž‘ํ•˜๊ฒŒ ๋จ


6. Caching

LB๋Š” scale-out์„ ํ†ตํ•œ ํ™•์žฅ์—์„œ ์‚ฌ์šฉ๋˜๋ฉด์„œ ์„ฑ๋Šฅ ๊ฐœ์„ ์— ๋„์›€์„ ์ฃผ์ง€๋งŒ, ์บ์‹ฑcaching์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ ๋ณด์œ ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ›จ์”ฌ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ LB๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋  ์ˆ˜ ์—†๋Š” ์ˆ˜์ค€์˜ ์„ฑ๋Šฅํ–ฅ์ƒ์„ ์ œ๊ณตํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

์บ์‹œ๋Š” ์ฐธ์กฐ ์›์น™์˜ ์ง€์—ญ์„ฑ์„ ํ™œ์šฉํ•˜๋Š”๋ฐ ์ตœ๊ทผ ์š”์ฒญ ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์‹œ ์š”์ฒญ ๋  ๊ฐ€๋Šฅ์„ฑ์€ ํŠน์„ฑ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ๋ ˆํ†  ๋ฒ•์น™์„ ๋”ฐ๋ผ ์•ฝ 20%์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œํ•จ์œผ๋กœ์„œ ์ „์ฒด 80%์˜ ํŠธ๋ž˜ํ”ฝ์—์„œ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์บ์‹œ๋Š” ๋ชจ๋“  ์ปดํ“จํŒ… ๊ณ„์ธต์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. (HW, ์šด์˜ ์ฒด์ œ, ์›น ๋ธŒ๋ผ์šฐ์ €, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ)

์บ์‹œ๋Š” ์•„ํ‚คํ…์ฒ˜์˜ ๋ชจ๋“  ์ˆ˜์ค€์— ์กด์žฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ข…์ข… ํ”„๋ŸฐํŠธ ์—”๋“œ์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ˆ˜์ค€์—์„œ ๋ฐœ๊ฒฌ๋˜๋ฉฐ ๋‹ค์šด ์ŠคํŠธ๋ฆผ ์ˆ˜์ค€์— ๋ถ€๋‹ด์„์ฃผ์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๊ตฌํ˜„๋œ๋‹ค.

App ์„œ๋ฒ„ ์บ์‹œ

์š”์ฒญ ๊ณ„์ธต ๋…ธ๋“œ์— ์ง์ ‘ ์บ์‹œ๋ฅผ ๋ฐฐ์น˜ํ•˜๋ฉด ์š”์ฒญ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์ฒ˜๋ฆฌ๋œ๋‹ค. ์š”์ฒญ ๊ณ„์ธต ๋…ธ๋“œ์˜ ์บ์‹œ๋Š” ๋ฉ”๋ชจ๋ฆฌ (๋งค์šฐ ๋น ๋ฆ„)์™€ ๋…ธ๋“œ์˜ ๋กœ์ปฌ ๋””์Šคํฌ (๋„คํŠธ์›Œํฌ ์Šคํ† ๋ฆฌ์ง€๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋น ๋ฆ„) ๋ชจ๋‘์— ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • cache-hit : ์„œ๋น„์Šค๊ฐ€ ์š”์ฒญ๋  ๋•Œ๋งˆ๋‹ค ์บ์‹œ๋ฅผ ํ™•์ธํ•˜์—ฌ ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์žˆ๋Š” ๊ฒฝ์šฐ ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ๋ฐ˜ํ™˜
  • cache-miss : ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์—†์œผ๋ฉด ์š”์ฒญ ๋…ธ๋“œ๊ฐ€ ๋””์Šคํฌ/์™ธ๋ถ€ ์„œ๋น„์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ด

์š”์ฒญ ๋ ˆ์ด์–ด๊ฐ€ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋กœ ํ™•์žฅ ๋œ ๊ฒฝ์šฐ์—๋„ ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ž์ฒด ์บ์‹œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ LB์— ์˜ํ•ด ์š”์ฒญ์ด ๋ฌด์ž‘์œ„๋กœ ๋ถ„์‚ฐ๋˜๋ฉด ๋™์ผํ•œ ์š”์ฒญ์ด ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™ํ•จ์œผ๋กœ ๋กœ์ปฌ ์บ์‹œ์˜ ํšจ๋ ฅ์ด ์•ฝํ•ด์ง„๋‹ค ๋”ฐ๋ผ์„œ ์ด๋ฅผ ์œ„ํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  • ์ „์—ญ ์บ์‹œglobal cache
  • ๋ถ„์‚ฐ ์บ์‹œdistributed cache

CDN (Content Delivery Network)

CDN์€ ๋งŽ์€ ์–‘์˜ ์ •์  ๋ฏธ๋””์–ด(image, videos, file ๋“ฑ) ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์บ์‹œ๋กœ, ์ผ๋ฐ˜์ ์ธ CDN ์„ค์ •์—์„œ ์š”์ฒญ์€ ๋จผ์ € CDN์— ์ •์  ๋ฏธ๋””์–ด๋ฅผ ์š”์ฒญํ•œ๋‹ค.

  • cache-hit : CDN์€ ํ•ด๋‹น ์ฝ˜ํ…์ธ ๋ฅผ ๋กœ์ปฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ ์ œ๊ณต
  • cache-miss : ์‚ฌ์šฉํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ CDN์€ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— ํŒŒ์ผ์„ ์ฟผ๋ฆฌํ•˜๊ณ  ๋กœ์ปฌ์— ์บ์‹œ ํ•œ ๋‹ค์Œ ์š”์ฒญํ•˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต.

์‹œ์Šคํ…œ์ด ์ž์ฒด CDN์„ ๊ฐ€์งˆ๋งŒํผ ์ถฉ๋ถ„ํžˆ ํฌ์ง€ ์•Š์€ ๊ฒฝ์šฐ Nginx์™€ ๊ฐ™์€ ๊ฒฝ๋Ÿ‰ HTTP ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ„๋„์˜ ํ•˜์œ„ ๋„๋ฉ”์ธ (์˜ˆ : static.yourservice.com)์—์„œ ์ •์  ๋ฏธ๋””์–ด๋ฅผ ์ œ๊ณตํ•˜์—ฌ ํ–ฅํ›„ CDN์œผ๋กœ ์‰ฝ๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋”ฐ.

์บ์‹œ ๋ฌดํšจํ™” Cache Invalidation

์บ์‹ฑ์„ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œ์ผœ์ฃผ์ง€๋งŒ ์›๋ณธ ๋ฐ์ดํ„ฐ (ex. DB์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ)์™€ ์ผ๊ด€์„ฑ์žˆ๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์œ ์ง€๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ˆ˜์ •๋˜๋ฉด ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ๊นจ์ ธ App์ด ์˜ค์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ์บ์‹œ ๋ฌดํšจํ™”๋ผ๊ณ  ํ•œ๋‹ค.

์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์ฒด๊ณ„๊ฐ€ ์žˆ๋‹ค.

  • Write-through ์บ์‹œ : ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์™€ ์™€ DB(์›๋ณธ ๋ฐ์ดํ„ฐ)๊ฐ„ ์— ๋™์‹œ์— ๊ธฐ๋ก๋จ. ์™„์ „ํ•œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ๊ฐ–๊ฒŒ๋˜๋‚˜ ๋ชจ๋“  ์“ฐ๊ธฐ์ž‘์—…์„ ์บ์‹œ์™€ DB ๋‘๋ฒˆ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ์œผ๋กœ write ์ž‘์—…์— ๋Œ€ํ•œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค.
  • Write-around ์บ์‹œ : write-through ์บ์‹œ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œ์— ์“ฐ์ด์ง€ ์•Š๊ณ  DB(์›๋ณธ ๋ฐ์ดํ„ฐ)์— ์ง์ ‘ ๊ธฐ๋กํ•˜๊ณ , ๋‚˜์ค‘์— ์ฝ๊ธฐ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์—†๋‹ค๋ฉด DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์บ์‹œ์— ๊ธฐ๋กํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ์ตœ๊ทผ์— ์“ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฝ๊ธฐ ์š”์ฒญ์ด “cache-miss"๋ฅผ ์ƒ์„ฑํ•˜๊ณ  read ์ž‘์—…์—์„œ ๋” ๋†’์€ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.
  • Write-back ์บ์‹œ :๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์—๋งŒ ๊ธฐ๋ก๋˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์ฆ‰์‹œ ์™„๋ฃŒ๊ฐ€ ํ™•์ธ๋œ๋‹ค. DB(์›๋ณธ ๋ฐ์ดํ„ฐ)์— ๋Œ€ํ•œ ์“ฐ๊ธฐ๋Š” ์ง€์ •๋œ ๊ฐ„๊ฒฉ ํ›„์— ๋˜๋Š” ํŠน์ • ์กฐ๊ฑด์—์„œ ์ˆ˜ํ–‰๋œ๋‹ค. write-heavy์ธ ์„œ๋น„์Šค์—์„œ ์งง์€ ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ๋ก ๋œ ๋ฐ์ดํ„ฐ์˜ ์œ ์ผํ•œ ๋ณต์‚ฌ๋ณธ์ด ์บ์‹œ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋Œ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์†์‹ค ์œ„ํ—˜์ด ์žˆ๋‹ค.

์บ์‹œ ์ œ๊ฑฐ ์ •์ฑ… Cache eviction policies

๋‹ค์Œ์€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์บ์‹œ ์ œ๊ฑฐ ์ •์ฑ…์ด๋‹ค.

  • FIFO (First In First Out) : ์บ์‹œ๋Š” ์ด์ „์— ์•ก์„ธ์Šค ํ•œ ๋นˆ๋„ ๋˜๋Š” ํšŸ์ˆ˜์— ๊ด€๊ณ„์—†์ด ๋จผ์ € ์•ก์„ธ์Šค ํ•œ ์ฒซ ๋ฒˆ์งธ ๋ธ”๋ก์„ ์ œ๊ฑฐ
  • LIFO (Last In First Out) : ์บ์‹œ๋Š” ์ด์ „์— ์•ก์„ธ์Šค ํ•œ ๋นˆ๋„ ๋˜๋Š” ํšŸ์ˆ˜์— ๊ด€๊ณ„์—†์ด ๊ฐ€์žฅ ์ตœ๊ทผ์— ์•ก์„ธ์Šค ํ•œ ๋ธ”๋ก์„ ๋จผ์ € ์ œ๊ฑฐ
  • LRU(Least Recentlry Used) : ๊ฐ€์žฅ ์ ๊ฒŒ ์‚ฌ์šฉ๋œ ํ•ญ๋ชฉ์„ ๋จผ์ € ์ œ๊ฑฐ
  • MRU(Most Recently Used) : LRU์™€ ๋‹ฌ๋ฆฌ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋งŽ์ด ์‚ฌ์šฉํ•œ ํ•ญ๋ชฉ์„ ๋จผ์ € ์ œ๊ฑฐ
  • LFU (Least Frequently Used) : ํ•ญ๋ชฉ์ด ํ•„์š”ํ•œ ๋นˆ๋„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ•ญ๋ชฉ์ด ๋จผ์ € ์ œ๊ฑฐ
  • RR(Random Replacement) : ํ›„๋ณด ํ•ญ๋ชฉ์„ ๋ฌด์ž‘์œ„๋กœ ์„ ํƒํ•˜๊ณ  ํ•„์š”ํ•  ๋•Œ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ฑฐ