๐Ÿ“Œ์„œ๋น„์Šค๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์‚ด์•„๋‚จ๋Š” ์•„ํ‚คํ…์ฒ˜: ์ˆ˜์ง์  vs ์ˆ˜ํ‰์  ํ™•์žฅ ์™„๋ฒฝ ๊ฐ€์ด๋“œ

sangjinsuยท2025๋…„ 2์›” 9์ผ

๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ 1์žฅ - ์‚ฌ์šฉ์ž ์ˆ˜์— ๋”ฐ๋ฅธ ๊ทœ๋ชจ ํ™•์žฅ์„ฑ ์ฐธ์กฐ

1. ๋‹จ์ผ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜

๋‹จ์ผ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ์˜ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐฉ์‹์ด๋‹ค.

์ด ๋ฐฉ์‹์€ ์ดˆ๊ธฐ ์„œ๋น„์Šค ๊ตฌ์ถ•์ด ์šฉ์ดํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ํ™•์žฅ์„ฑ์— ์ œํ•œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… ๋‹จ์ผ ์„œ๋ฒ„์˜ ๋™์ž‘ ํ๋ฆ„

  1. ์‚ฌ์šฉ์ž๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์ด์šฉํ•˜์—ฌ ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ•œ๋‹ค.
    • ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ www.example.com๊ณผ ๊ฐ™์€ ๋„๋ฉ”์ธ์„ ์ž…๋ ฅํ•œ๋‹ค.
    • ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ๋Š” ํ•ด๋‹น ๋„๋ฉ”์ธ์˜ IP ์ฃผ์†Œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด DNS(Domain Name System) ์„œ๋ฒ„์— ์งˆ์˜ํ•œ๋‹ค.
  2. DNS๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„์„ IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
    • DNS ์„œ๋ฒ„๋Š” www.example.com์˜ IP ์ฃผ์†Œ(192.168.1.1 ๋“ฑ)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, DNS ์„œ๋น„์Šค๋Š” ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด ๋˜๋Š” ์‚ฌ์„ค DNS ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋œ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ(์‚ฌ์šฉ์ž)์˜ ์š”์ฒญ์ด ์›น ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋œ๋‹ค.
    • IP ์ฃผ์†Œ๊ฐ€ ํ™•์ธ๋˜๋ฉด, ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ์„œ๋ฒ„๋กœ HTTP(S) ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
    • ์š”์ฒญ ๋ฐฉ์‹(์˜ˆ: GET, POST)์— ๋”ฐ๋ผ ์›น ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ž‘์—…์ด ๋‹ฌ๋ผ์ง„๋‹ค.
  4. ์›น ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ์›น ์„œ๋ฒ„(Apache, Nginx ๋“ฑ)๋Š” ์š”์ฒญ์„ ๋ถ„์„ํ•˜๊ณ  ์ ์ ˆํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•œ๋‹ค.
    • ์‘๋‹ต ๋ฐ์ดํ„ฐ๋Š” HTML, JSON, ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด:
      • ์ •์  ์›น์‚ฌ์ดํŠธ๋ผ๋ฉด HTML, CSS, JavaScript ํŒŒ์ผ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      • ๋™์  ์›น์‚ฌ์ดํŠธ๋ผ๋ฉด ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๊ณ  JSON ํ˜•์‹์˜ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐ŸŽฏ ๋‹จ์ผ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜์˜ ์žฅ์ 

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

โš ๏ธ ๋‹จ์ผ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜์˜ ํ•œ๊ณ„

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

๐Ÿ“Œ ๋‹จ์ผ ์„œ๋ฒ„๊ฐ€ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

๋‹จ์ผ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋‚˜ MVP(์ตœ์†Œ ๊ธฐ๋Šฅ ์ œํ’ˆ)๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์ ํ•ฉํ•˜๋‹ค.

โœ… ์–ธ์ œ ๋‹จ์ผ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ?

  • ํŠธ๋ž˜ํ”ฝ์ด ๋‚ฎ๊ณ  ๋‹จ์ˆœํ•œ ์„œ๋น„์Šค(์˜ˆ: ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ, ์Šคํƒ€ํŠธ์—… ์ดˆ๊ธฐ ์›น์‚ฌ์ดํŠธ)
  • MVP(์ตœ์†Œ ๊ธฐ๋Šฅ ์ œํ’ˆ) ๊ฐœ๋ฐœ ์‹œ ๋น ๋ฅธ ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ
  • ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ์šด์˜ ์ธ๋ ฅ์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ

โŒ ์–ธ์ œ ๋‹จ์ผ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋ ๊นŒ?

  • ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๊ฒฝ์šฐ
  • ๊ณ ๊ฐ€์šฉ์„ฑ๊ณผ ์žฅ์•  ๋Œ€์‘์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ„๋ฆฌ ๋ฐ ์„ ํƒ

์‚ฌ์šฉ์ž๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ๋‹จ์ผ ์„œ๋ฒ„์—์„œ๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

๋”ฐ๋ผ์„œ ์›น ๊ณ„์ธต(Web Tier)๊ณผ ๋ฐ์ดํ„ฐ ๊ณ„์ธต(Database Tier)์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค.

โœ… ๋ฐ์ดํ„ฐ ๊ณ„์ธต ๋ถ„๋ฆฌ์˜ ํ•„์š”์„ฑ

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

๐Ÿ› ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB)๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ๊ฐ€?

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํฌ๊ฒŒ ๊ด€๊ณ„ํ˜•(Relational, RDBMS)๊ณผ ๋น„๊ด€๊ณ„ํ˜•(NoSQL)์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์œ ํ˜•์€ ์„œ๋กœ ๋‹ค๋ฅธ ํŠน์„ฑ๊ณผ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ฐ€์ง„๋‹ค.

๐Ÿ”น ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (RDBMS)

ํŠน์ง•:

  • ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ”, ์—ด(Column), ํ–‰(Row) ํ˜•ํƒœ๋กœ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ์ €์žฅ
  • SQL(Structured Query Language)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ
  • ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ” ๊ฐ„ ์กฐ์ธ(Join) ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ด€๊ณ„๋ฅผ ์œ ์ง€ ๊ฐ€๋Šฅ
  • ํŠธ๋žœ์žญ์…˜(ACID) ์ง€์›์œผ๋กœ ๋†’์€ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๋ณด์žฅ

๐Ÿ”น ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (NoSQL)

ํŠน์ง•:

  • ์Šคํ‚ค๋งˆ(Schema)๊ฐ€ ๊ณ ์ •๋˜์ง€ ์•Š์Œ โ†’ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ฐ€๋Šฅ
  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณด๋‹ค ์ˆ˜ํ‰์  ํ™•์žฅ(Scale-out)์ด ์šฉ์ดํ•จ
  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ NoSQL ์œ ํ˜•์ด ์กด์žฌ

NoSQL์˜ ์ฃผ์š” ์œ ํ˜• ๋ฐ ํŠน์ง•:

์œ ํ˜•์„ค๋ช…์˜ˆ์‹œ
ํ‚ค-๊ฐ’ ์ €์žฅ์†ŒKey์™€ Value๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ๋น ๋ฅธ ์กฐํšŒ ์†๋„ ์ œ๊ณตRedis, DynamoDB
๊ทธ๋ž˜ํ”„ ์ €์žฅ์†Œ๋…ธ๋“œ(Node)์™€ ์—ฃ์ง€(Edge)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์—ฌ ๊ด€๊ณ„ ๋ถ„์„ ์ตœ์ ํ™”Neo4j, ArangoDB
์นผ๋Ÿผ ์ €์žฅ์†Œ์ปฌ๋Ÿผ ๊ธฐ๋ฐ˜ ์ €์žฅ์œผ๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋ถ„์„์— ์ตœ์ ํ™”Cassandra, HBase
๋ฌธ์„œ ์ €์žฅ์†ŒJSON, BSON ๋“ฑ์˜ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅMongoDB, CouchDB

๐ŸŽฏ ์–ธ์ œ NoSQL์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ?

์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ๊ด€๊ณ„ํ˜• DB(RDBMS)๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ NoSQL์ด ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… NoSQL์ด ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

  • ์•„์ฃผ ๋‚ฎ์€ ์‘๋‹ต ์ง€์—ฐ์‹œ๊ฐ„์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ โ†’ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ(Redis) ์‚ฌ์šฉ
  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋น„์ •ํ˜•(์˜ˆ: JSON, XML)์ธ ๊ฒฝ์šฐ โ†’ ๋ฌธ์„œ ์ €์žฅ์†Œ(MongoDB) ์‚ฌ์šฉ
  • ๋ฐ์ดํ„ฐ์˜ ๊ด€๊ณ„์„ฑ์ด ๊ฑฐ์˜ ์—†๊ฑฐ๋‚˜, ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์ด ์ ํ•ฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
  • ์ˆ˜์ง์  ํ™•์žฅ(Scale-Up)๋ณด๋‹ค ์ˆ˜ํ‰์  ํ™•์žฅ(Scale-Out)์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™”ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

๐Ÿ—๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ ๊ฐ€์ด๋“œ

โœ… ๊ด€๊ณ„ํ˜• DB๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

  • ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตฌ์กฐํ™”๋˜์–ด ์žˆ๊ณ  ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์ด ์ค‘์š”ํ•˜๋ฉฐ, ํŠธ๋žœ์žญ์…˜์„ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ (์˜ˆ: ๊ธˆ์œต, ํšŒ๊ณ„ ์‹œ์Šคํ…œ)
  • SQL ๊ธฐ๋ฐ˜์˜ ๊ฐ•๋ ฅํ•œ ์ฟผ๋ฆฌ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ๋นˆ๋ฒˆํ•˜์ง€ ์•Š๊ณ , ์ •ํ˜•ํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ

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

  • ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ํ•„์š”ํ•œ ๋น…๋ฐ์ดํ„ฐ ์‹œ์Šคํ…œ์„ ์šด์˜ํ•˜๋Š” ๊ฒฝ์šฐ
  • ๋Œ€๊ทœ๋ชจ ์ˆ˜ํ‰์  ํ™•์žฅ(Scale-Out)์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • ๋ฐ˜์ •ํ˜• ๋˜๋Š” ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ(์˜ˆ: JSON, XML, ๋กœ๊ทธ ๋ฐ์ดํ„ฐ)๋ฅผ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
  • ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ์˜ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์กฐํšŒ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ (์˜ˆ: ์‹ค์‹œ๊ฐ„ ์• ๋„๋ฆฌํ‹ฑ์Šค, ๊ฒ€์ƒ‰ ์—”์ง„)

3. ์ˆ˜์ง์  vs ์ˆ˜ํ‰์  ๊ทœ๋ชจ ํ™•์žฅ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์„ ํ™•์žฅํ•ด์•ผ ํ•œ๋‹ค.

์ด๋•Œ, ํ™•์žฅ ๋ฐฉ๋ฒ•์—๋Š” ํฌ๊ฒŒ ์ˆ˜์ง์  ํ™•์žฅ(Scale-Up) ๊ณผ ์ˆ˜ํ‰์  ํ™•์žฅ(Scale-Out) ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

โœ… ํ™•์žฅ์˜ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

ํ™•์žฅ ๋ฐฉ์‹์„ค๋ช…์žฅ์ ๋‹จ์ 
์ˆ˜์ง์  ํ™•์žฅ (Scale-Up)๊ธฐ์กด ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ ์ฒ˜๋ฆฌ๋Ÿ‰ ์ฆ๊ฐ€๋‹จ์ˆœํ•œ ์•„ํ‚คํ…์ฒ˜ ์œ ์ง€, ๋น ๋ฅธ ์ ์šฉ ๊ฐ€๋Šฅ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„ ์กด์žฌ, ๋‹จ์ผ ์žฅ์• ์ (SPOF)
์ˆ˜ํ‰์  ํ™•์žฅ (Scale-Out)์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ถ€ํ•˜ ๋ถ„์‚ฐํ™•์žฅ์„ฑ ์šฐ์ˆ˜, ์žฅ์•  ๋Œ€์‘ ๊ฐ€๋Šฅ๋„คํŠธ์›Œํฌ ๋ณต์žก์„ฑ ์ฆ๊ฐ€, ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ํ•„์š”

๐Ÿ”น ์ˆ˜์ง์  ํ™•์žฅ (Scale-Up)

์ˆ˜์ง์  ํ™•์žฅ์€ ๊ธฐ์กด ์„œ๋ฒ„์˜ CPU, RAM, ๋””์Šคํฌ ์šฉ๋Ÿ‰์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

โœ… ์žฅ์ 

  • ๊ตฌ์„ฑ์ด ๋‹จ์ˆœํ•˜์—ฌ ์šด์˜์ด ์‰ฌ์›€
  • ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Œ
  • ๋น ๋ฅธ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ฐ€๋Šฅ (์„œ๋ฒ„ ์—…๊ทธ๋ ˆ์ด๋“œ๋งŒ ์ง„ํ–‰ํ•˜๋ฉด ๋จ)

โŒ ๋‹จ์ 

  • ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„ ์กด์žฌ โ†’ CPU ์ฝ”์–ด ์ˆ˜, RAM ํฌ๊ธฐ ๋“ฑ ์ฆ๊ฐ€์— ํ•œ๊ณ„๊ฐ€ ์žˆ์Œ
  • ๋น„์šฉ ์ฆ๊ฐ€ โ†’ ๊ณ ์„ฑ๋Šฅ ํ•˜๋“œ์›จ์–ด ๋น„์šฉ์ด ๊ธ‰๊ฒฉํžˆ ์ƒ์Šนํ•จ
  • ๋‹จ์ผ ์žฅ์• ์ (Single Point of Failure, SPOF) ๋ฐœ์ƒ ๊ฐ€๋Šฅ โ†’ ์„œ๋ฒ„ ์žฅ์•  ์‹œ ์ „์ฒด ์„œ๋น„์Šค ์ค‘๋‹จ ์œ„ํ—˜

๐Ÿ’ก ์–ธ์ œ ์ˆ˜์ง์  ํ™•์žฅ์„ ์„ ํƒํ• ๊นŒ?

  • ๋‹จ์ผ ์„œ๋ฒ„๋กœ ์šด์˜ํ•˜๋Š” ์ž‘์€ ๊ทœ๋ชจ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • ํ™•์žฅ์ด ํ•„์š”ํ•œ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ถ„์‚ฐํ•  ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์ด ๋ถ€์กฑํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ(RAM)๋‚˜ CPU ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

๐Ÿ”น ์ˆ˜ํ‰์  ํ™•์žฅ (Scale-Out)

์ˆ˜ํ‰์  ํ™•์žฅ์€ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ(Load Balancer)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

โœ… ์žฅ์ 

  • ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚จ โ†’ ์„œ๋ฒ„๋ฅผ ๊ณ„์† ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ
  • ์žฅ์•  ๋Œ€์‘ ๊ฐ€๋Šฅ โ†’ ํŠน์ • ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋”๋ผ๋„ ์„œ๋น„์Šค ์œ ์ง€ ๊ฐ€๋Šฅ
  • ๋น„์šฉ ์ ˆ๊ฐ ๊ฐ€๋Šฅ โ†’ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์ €๋ ดํ•œ ์„œ๋ฒ„๋กœ ํ™•์žฅ ๊ฐ€๋Šฅ

โŒ ๋‹จ์ 

  • ๋„คํŠธ์›Œํฌ ๋ฐ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๊ฐ€ ๋ณต์žก โ†’ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€ ํ•„์š”
  • ์ดˆ๊ธฐ ์„ค์ •์ด ์–ด๋ ต๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๋ณต์žก โ†’ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์„ค์ •, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต์ œ ํ•„์š”
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ โ†’ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•จ

๐Ÿ’ก ์–ธ์ œ ์ˆ˜ํ‰์  ํ™•์žฅ์„ ์„ ํƒํ• ๊นŒ?

  • ํŠธ๋ž˜ํ”ฝ์ด ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์„œ๋น„์Šค (์˜ˆ: ์‡ผํ•‘๋ชฐ, SNS)
  • ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋‹ค์šดํƒ€์ž„์„ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•˜๋Š” ์„œ๋น„์Šค
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•œ ๊ฒฝ์šฐ

๐Ÿ—๏ธ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ(Load Balancer) ์—ญํ• 

๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ์—ฌ๋Ÿฌ ์›น ์„œ๋ฒ„ ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•˜์—ฌ ๋ถ€ํ•˜๋ฅผ ๊ท ํ˜• ์žˆ๊ฒŒ ์กฐ์ ˆํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๊ฐ€์šฉ์„ฑ์„ ๋†’์ด๊ณ  ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์ž๋™ ๋ณต๊ตฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

๐Ÿ”น ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ๋™์ž‘ ๋ฐฉ์‹

  1. ์‚ฌ์šฉ์ž๋Š” ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์˜ ๊ณต๊ฐœ IP ์ฃผ์†Œ๋กœ ์ ‘์†
  2. ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ๋ถ€ํ•˜๋ฅผ ๊ฐ์•ˆํ•˜์—ฌ ์ ์ ˆํ•œ ์›น ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ์ „๋‹ฌ
  3. ์›น ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜

๐Ÿ”น ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ถ€ํ•˜ ๋ถ„์‚ฐ ๋ฐฉ์‹์„ค๋ช…
๋ผ์šด๋“œ ๋กœ๋นˆ (Round Robin)๊ฐ ์š”์ฒญ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์„œ๋ฒ„์— ๋ฐฐ๋ถ„
์ตœ์†Œ ์—ฐ๊ฒฐ ๋ฐฉ์‹ (Least Connections)ํ˜„์žฌ ๊ฐ€์žฅ ์ ์€ ์—ฐ๊ฒฐ์„ ๊ฐ€์ง„ ์„œ๋ฒ„๋กœ ์š”์ฒญ ์ „๋‹ฌ
IP ํ•ด์‹ฑ (IP Hashing)ํŠน์ • ์‚ฌ์šฉ์ž๊ฐ€ ํ•ญ์ƒ ๋™์ผํ•œ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ๋˜๋„๋ก ์„ค์ •

๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์‚ฌ์šฉ ์‹œ ๊ณ ๋ คํ•  ์ 

  • ์„ธ์…˜ ์œ ์ง€(Session Persistence): ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด ๊ฐ™์€ ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Œ
  • ํ—ฌ์Šค ์ฒดํฌ(Health Check): ์žฅ์•  ๋ฐœ์ƒํ•œ ์„œ๋ฒ„๋Š” ์ž๋™์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์—์„œ ์ œ์™ธํ•˜๋„๋ก ์„ค์ • ๊ฐ€๋Šฅ

๐Ÿ›๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‹ค์ค‘ํ™” (DB Replication)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ญ์‹œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•˜๊ณ  ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์„œ๋น„์Šค ์ง€์†์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์ค‘ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๐Ÿ”น DB ๋‹ค์ค‘ํ™” ๋ฐฉ์‹

๋ฐฉ์‹์„ค๋ช…
Master-Slave์“ฐ๊ธฐ๋Š” Master์—์„œ๋งŒ ์ˆ˜ํ–‰, ์ฝ๊ธฐ๋Š” Slave์—์„œ ๋ถ„์‚ฐ
Master-Master๋‘ ๊ฐœ ์ด์ƒ์˜ Master์—์„œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ
Sharding๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ DB ์ธ์Šคํ„ด์Šค๋กœ ๋ถ„ํ•  ์ €์žฅ

๐Ÿ”น Master-Slave ๋ณต์ œ์˜ ์žฅ์ 

โœ… ๋” ๋‚˜์€ ์„ฑ๋Šฅ โ†’ ์ฝ๊ธฐ ๋ถ€ํ•˜๋Š” ์—ฌ๋Ÿฌ Slave ๋…ธ๋“œ๋กœ ๋ถ„์‚ฐ

โœ… ๊ณ ๊ฐ€์šฉ์„ฑ(High Availability) โ†’ Master ์žฅ์•  ์‹œ Slave๋ฅผ ์Šน๊ฒฉ ๊ฐ€๋Šฅ

โœ… ์ง€์—ญ ๋ถ„์‚ฐ ๊ฐ€๋Šฅ โ†’ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋–จ์–ด์ง„ ์œ„์น˜์— ๋ฐ์ดํ„ฐ ๋ณต์ œ ๊ฐ€๋Šฅ

๐Ÿ”น ์˜ˆ์ œ ์‹œ๋‚˜๋ฆฌ์˜ค: Master ๋˜๋Š” Slave DB ์žฅ์•  ๋ฐœ์ƒ ์‹œ

  1. Master๊ฐ€ ๋‹ค์šด๋˜๋Š” ๊ฒฝ์šฐ:
    • Slave๋ฅผ ์ƒˆ๋กœ์šด Master๋กœ ์Šน๊ฒฉ (Failover)
    • ์„œ๋น„์Šค๊ฐ€ ์ง€์†์ ์œผ๋กœ ์šด์˜๋  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ • ํ•„์š”
  2. Slave๊ฐ€ ๋‹ค์šด๋˜๋Š” ๊ฒฝ์šฐ:
    • Master๋Š” ์ •์ƒ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์ฝ๊ธฐ ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ
    • ์ƒˆ๋กœ์šด Slave๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•ด์•ผ ํ•จ

๐Ÿ ํ™•์žฅ ๋ฐฉ๋ฒ• ์„ ํƒ

์„œ๋ฒ„ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™•์žฅ์„ ๊ณ ๋ คํ•  ๋•Œ๋Š” ์ˆ˜์ง์  ํ™•์žฅ๊ณผ ์ˆ˜ํ‰์  ํ™•์žฅ์˜ ์žฅ๋‹จ์ ์„ ๋น„๊ตํ•˜์—ฌ ์ ์ ˆํ•œ ๋ฐฉ์‹์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

โœ… ์ˆ˜์ง์  ํ™•์žฅ์ด ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

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

โœ… ์ˆ˜ํ‰์  ํ™•์žฅ์ด ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

  • ์‚ฌ์šฉ์ž๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•˜๋Š” ์„œ๋น„์Šค (์˜ˆ: ์‡ผํ•‘๋ชฐ, ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค)
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜๊ฐ€ ๋†’์•„ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•ด์•ผ ํ•  ๋•Œ
  • ๋†’์€ ๊ฐ€์šฉ์„ฑ์ด ์š”๊ตฌ๋˜๋Š” ์„œ๋น„์Šค

4. ์บ์‹œ (Cache)

์บ์‹œ๋Š” ์ž์ฃผ ์ฐธ์กฐ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ ๋ฐ˜๋ณต์ ์ธ ์—ฐ์‚ฐ์„ ์ค„์ด๊ณ , ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB) ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ , ๋น ๋ฅธ ์‘๋‹ต ์†๋„๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.


โœ… ์บ์‹œ ๊ณ„์ธต (Cache Layer)

์บ์‹œ๋Š” ์—ฌ๋Ÿฌ ๊ณ„์ธต์—์„œ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฃผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ ์šฉ๋œ๋‹ค.

์บ์‹œ ๊ณ„์ธต์„ค๋ช…์˜ˆ์‹œ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์บ์‹œ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์—์„œ ๋ฐ์ดํ„ฐ ์ €์žฅLocal Cache, Memcached
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์บ์‹œDB์—์„œ ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑMySQL Query Cache, Redis
์›น ์บ์‹œHTTP ์š”์ฒญ์„ ์บ์‹ฑํ•˜์—ฌ ๋น ๋ฅธ ํŽ˜์ด์ง€ ๋กœ๋“œ ์ œ๊ณตVarnish, Nginx Cache
CDN ์บ์‹œ์ •์  ํŒŒ์ผ(์ด๋ฏธ์ง€, CSS, JS) ์บ์‹ฑCloudflare, AWS CloudFront

๐Ÿ”น ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์ ์ด ์ข‹์„๊นŒ?

  • ์„ฑ๋Šฅ ๊ฐœ์„  โ†’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ์—†์ด ๋น ๋ฅด๊ฒŒ ์‘๋‹ต ๊ฐ€๋Šฅ
  • ํŠธ๋ž˜ํ”ฝ ๊ฐ์†Œ โ†’ DB ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ž„
  • ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ โ†’ ํŽ˜์ด์ง€ ๋กœ๋“œ ์†๋„๊ฐ€ ๋นจ๋ผ์ง

โš ๏ธ ์บ์‹œ ์‚ฌ์šฉ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ 

1๏ธโƒฃ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•  ๊ฒƒ์ธ๊ฐ€?

โœ… ์บ์‹ฑ์— ์ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ:

  • ์ž์ฃผ ์กฐํšŒ๋˜์ง€๋งŒ ๋ณ€๊ฒฝ์ด ์ ์€ ๋ฐ์ดํ„ฐ (์˜ˆ: ์ œํ’ˆ ๋ชฉ๋ก, ์ธ๊ธฐ ๊ฒŒ์‹œ๊ธ€)
  • ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋†’์€ ๋ฐ์ดํ„ฐ (์˜ˆ: ํ†ต๊ณ„, ๋จธ์‹ ๋Ÿฌ๋‹ ์˜ˆ์ธก ๊ฒฐ๊ณผ)
  • API ์‘๋‹ต ๋ฐ์ดํ„ฐ (์˜ˆ: ์™ธ๋ถ€ API ํ˜ธ์ถœ ๊ฒฐ๊ณผ)

โŒ ์บ์‹ฑ์— ๋ถ€์ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ:

  • ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ (์˜ˆ: ๊ธˆ์œต ๊ฑฐ๋ž˜ ๋‚ด์—ญ)
  • ๋ฏผ๊ฐํ•œ ์ •๋ณด (์˜ˆ: ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด)

2๏ธโƒฃ ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋Š” ์–ธ์ œ ๋งŒ๋ฃŒ๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€?

๋งŒ๋ฃŒ๋˜์ง€ ์•Š์€ ์บ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๋ž˜ ์œ ์ง€๋˜๋ฉด ์˜ค๋ž˜๋œ ์ •๋ณด๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต๋  ์œ„ํ—˜์ด ์žˆ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ๋งŒ๋ฃŒ ์ •์ฑ…์ด ํ•„์š”ํ•˜๋‹ค.

๋งŒ๋ฃŒ ์ •์ฑ…์„ค๋ช…
TTL(Time-To-Live)์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ
LRU(Least Recently Used)๊ฐ€์žฅ ์˜ค๋ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ
LFU(Least Frequently Used)์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ
FIFO(First In First Out)๋จผ์ € ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์‚ญ์ œ

3๏ธโƒฃ ์บ์‹œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€

์บ์‹œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ผ๊ด€์„ฑ์ด ์œ ์ง€๋˜์ง€ ์•Š์œผ๋ฉด ์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ๋ฐ˜ํ™˜๋  ์œ„ํ—˜์ด ์žˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

๋ฐฉ๋ฒ•์„ค๋ช…
Write-Through๋ฐ์ดํ„ฐ๋ฅผ DB์— ์ €์žฅํ•  ๋•Œ ์บ์‹œ์—๋„ ์ €์žฅ
Write-Back์บ์‹œ์— ๋จผ์ € ์“ฐ๊ณ , ์ผ์ • ์‹œ๊ฐ„ ํ›„ DB์— ๋ฐ˜์˜
Cache InvalidationDB ๋ณ€๊ฒฝ ์‹œ ์บ์‹œ ๋ฐ์ดํ„ฐ ์‚ญ์ œ

4๏ธโƒฃ ์บ์‹œ ์žฅ์•  ๋Œ€์‘ ๋ฐฉ๋ฒ•

  • ๋‹จ์ผ ์บ์‹œ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ํ•œ ๋Œ€์˜ ์บ์‹œ ์„œ๋ฒ„๋งŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ.
    • ๋ถ„์‚ฐ ์บ์‹œ(์˜ˆ: Redis Cluster, Memcached Multi-node)๋ฅผ ํ†ตํ•ด ์บ์‹œ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ.
  • Fallback ์ฒ˜๋ฆฌ
    • ์บ์‹œ๊ฐ€ ์‹คํŒจํ•˜๋ฉด DB์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋„๋ก ์„ค์ •.

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

  • CDN(Content Delivery Network)์€ ์ •์  ์ฝ˜ํ…์ธ (์ด๋ฏธ์ง€, CSS, JavaScript ๋“ฑ)๋ฅผ ์ง€๋ฆฌ์ ์œผ๋กœ ๋ถ„์‚ฐ๋œ ์„œ๋ฒ„์— ์บ์‹ฑํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ „์†กํ•˜๋Š” ๋„คํŠธ์›Œํฌ์ด๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์„œ๋ฒ„์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์›น์‚ฌ์ดํŠธ ๋กœ๋”ฉ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.


โœ… CDN์˜ ์ž‘๋™ ๋ฐฉ์‹

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์—์„œ ์ •์  ํŒŒ์ผ์„ ์š”์ฒญํ•œ๋‹ค.
  2. CDN ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์ฝ˜ํ…์ธ ๊ฐ€ ์บ์‹œ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
    • ์บ์‹œ์— ์žˆ์Œ โ†’ ์ฆ‰์‹œ ์ œ๊ณต
    • ์บ์‹œ์— ์—†์Œ โ†’ ์›๋ณธ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜จ ํ›„ ์ €์žฅ
  3. ์ดํ›„ ๋™์ผํ•œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, CDN์€ ์บ์‹œ๋œ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋น ๋ฅธ ์‘๋‹ต์„ ๋ณด์žฅํ•œ๋‹ค.

โšก CDN ์‚ฌ์šฉ ์‹œ ์ด์ 

์ด์ ์„ค๋ช…
์‘๋‹ต ์†๋„ ํ–ฅ์ƒ์‚ฌ์šฉ์ž์™€ ๊ฐ€๊นŒ์šด CDN ์„œ๋ฒ„์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณต
์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ์›๋ณธ ์„œ๋ฒ„์— ๋Œ€ํ•œ ์š”์ฒญ ์ˆ˜๋ฅผ ์ค„์ž„
๋Œ€์—ญํญ ์ ˆ๊ฐ์ •์  ์ฝ˜ํ…์ธ  ์ „์†ก์„ ์ตœ์ ํ™”ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ๋น„์šฉ ์ ˆ๊ฐ
ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ ๋Œ€์‘๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€์—๋„ ์•ˆ์ •์ ์ธ ์„œ๋น„์Šค ์ œ๊ณต

โš ๏ธ CDN ์‚ฌ์šฉ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ 

1๏ธโƒฃ ๋น„์šฉ ๋ฌธ์ œ

  • CDN์€ ํŠธ๋ž˜ํ”ฝ ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ ์š”๊ธˆ์ด ๋ถ€๊ณผ๋จ.
  • ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ˜ํ…์ธ ๋Š” ์บ์‹ฑํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋น„์šฉ ์ ˆ๊ฐ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Œ.

2๏ธโƒฃ ์ ์ ˆํ•œ ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ์„ค์ •

  • ์งง์œผ๋ฉด โ†’ ์›๋ณธ ์„œ๋ฒ„์— ์ž์ฃผ ์ ‘์†ํ•˜์—ฌ ๋ถ€ํ•˜ ์ฆ๊ฐ€
  • ๊ธธ๋ฉด โ†’ ์˜ค๋ž˜๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต๋  ๊ฐ€๋Šฅ์„ฑ ์ฆ๊ฐ€

3๏ธโƒฃ CDN ์žฅ์•  ์‹œ ๋Œ€์ฒ˜ ๋ฐฉ๋ฒ•

  • CDN ์„œ๋น„์Šค๊ฐ€ ๋‹ค์šด๋  ๊ฒฝ์šฐ, ์›๋ณธ ์„œ๋ฒ„์—์„œ ์ง์ ‘ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•จ.
  • ์„œ๋ฒ„ ๊ตฌ์„ฑ ์˜ˆ์‹œ
    server {
        location /static/ {
            proxy_pass <http://cdn.example.com>;
            error_page 502 = @fallback;
        }
    
        location @fallback {
            root /var/www/html/static/;
        }
    }
    

6. ๋ฌด์ƒํƒœ ์›น ๊ณ„์ธต (Stateless Web Tier)

๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์›น ๊ณ„์ธต์„ ์ˆ˜ํ‰์  ํ™•์žฅ(Scale-Out) ํ•˜๋ ค๋ฉด ๋ฌด์ƒํƒœ ์•„ํ‚คํ…์ฒ˜(Stateless Architecture)๋ฅผ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์›น ์„œ๋ฒ„๊ฐ€ ํŠน์ • ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฉด ํ™•์žฅ์„ฑ๊ณผ ์žฅ์•  ๋Œ€์‘์ด ์–ด๋ ค์›Œ์ง€๋ฏ€๋กœ, ์ƒํƒœ ์ •๋ณด๋ฅผ ์™ธ๋ถ€ ์ €์žฅ์†Œ์— ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.


โœ… ๋ฌด์ƒํƒœ ์›น ๊ณ„์ธต์˜ ๊ฐœ๋…

๋ฌด์ƒํƒœ(State-less) ์›น ๊ณ„์ธต์—์„œ๋Š” ๊ฐ ์š”์ฒญ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์›น ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด ๋ฐฉ์‹์€ ์ˆ˜ํ‰์  ํ™•์žฅ(Scale-Out)์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ , ํŠน์ • ์„œ๋ฒ„์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

๐Ÿ”น ์™œ ๋ฌด์ƒํƒœ(State-less) ์›น ๊ณ„์ธต์ด ํ•„์š”ํ• ๊นŒ?

  • ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€์— ๋Œ€๋น„ํ•œ ํ™•์žฅ์„ฑ ํ™•๋ณด โ†’ ์—ฌ๋Ÿฌ ์›น ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ๊ฐ€๋Šฅ
  • ์žฅ์•  ๋ณต๊ตฌ ๋ฐ ๊ฐ€์šฉ์„ฑ ํ–ฅ์ƒ โ†’ ํŠน์ • ์„œ๋ฒ„ ์žฅ์•  ์‹œ์—๋„ ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ๋ถ€๋‹ด ๊ฐ์†Œ โ†’ ํŠน์ • ์„œ๋ฒ„์— ์ข…์†๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ถ€ํ•˜๋ฅผ ๊ณ ๋ฅด๊ฒŒ ๋ถ„์‚ฐ ๊ฐ€๋Šฅ

๐Ÿ”„ ์ƒํƒœ ์ •๋ณด ์˜์กด์ ์ธ ์•„ํ‚คํ…์ฒ˜(Stateful Architecture)

์ƒํƒœ๋ฅผ ์œ ์ง€(Stateful)ํ•˜๋Š” ์›น ๊ณ„์ธต์€ ํด๋ผ์ด์–ธํŠธ ์„ธ์…˜ ์ •๋ณด๋ฅผ ์„œ๋ฒ„๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ด ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ํ•ญ์ƒ ๊ฐ™์€ ์„œ๋ฒ„๋กœ ๊ฐ€์•ผ ํ•˜๋ฉฐ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ๊ณ ์ • ์„ธ์…˜(Persistent Session) ๋˜๋Š” ์„ธ์…˜ ์Šคํ‹ฐํ‚ค(Session Stickiness) ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ํŠน์ • ์„œ๋ฒ„๋กœ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

โš ๏ธ ์ƒํƒœ ์œ ์ง€ ์•„ํ‚คํ…์ฒ˜์˜ ๋ฌธ์ œ์ 

  • ํ™•์žฅ์„ฑ์ด ์ œํ•œ๋จ โ†’ ํŠน์ • ์„œ๋ฒ„์— ์˜์กดํ•˜๋ฏ€๋กœ ์ƒˆ๋กœ์šด ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ ๋ถ€ํ•˜๊ฐ€ ์ž๋™์œผ๋กœ ๋ถ„์‚ฐ๋˜์ง€ ์•Š์Œ
  • ์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋ฌธ์ œ โ†’ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•œ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด ์„ธ์…˜ ๋ฐ์ดํ„ฐ ์†์‹ค ๊ฐ€๋Šฅ
  • ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ๋ถ€๋‹ด ์ฆ๊ฐ€ โ†’ ํŠน์ • ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ๊ฐ™์€ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์•ผ ํ•˜๋ฏ€๋กœ ๊ท ๋“ฑํ•œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์ด ์–ด๋ ค์›€

๐ŸŒ ๋ฌด์ƒํƒœ ์•„ํ‚คํ…์ฒ˜ (Stateless Architecture)

๋ฌด์ƒํƒœ ์›น ๊ณ„์ธต์—์„œ๋Š” ์ƒํƒœ ์ •๋ณด๋ฅผ ์›น ์„œ๋ฒ„์—์„œ ์ œ๊ฑฐํ•˜๊ณ , ํ•„์š”ํ•  ๋•Œ ์™ธ๋ถ€ ์ €์žฅ์†Œ์—์„œ ์กฐํšŒํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

โœ… ์ƒํƒœ ์ •๋ณด๋ฅผ ์–ด๋””์— ์ €์žฅํ• ๊นŒ?

์ €์žฅ์†Œ ์œ ํ˜•์„ค๋ช…์˜ˆ์‹œ
์„ธ์…˜ ์ €์žฅ์†Œ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€ DB ๋˜๋Š” ์บ์‹œ์— ์ €์žฅRedis, Memcached
ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ฆ ํ† ํฐ์„ ์ €์žฅํ•˜์—ฌ ๋งค ์š”์ฒญ๋งˆ๋‹ค ์ „์†กJWT, OAuth
๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅMySQL, PostgreSQL

๐Ÿ”น ๋ฌด์ƒํƒœ ์›น ๊ณ„์ธต์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€ ์ €์žฅ์†Œ(์˜ˆ: Redis)์— ์ €์žฅ
  2. JWT(JSON Web Token)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ
  3. ๊ฐ ์š”์ฒญ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋„๋ก ์„ค๊ณ„
  4. ๋ชจ๋“  ์„œ๋ฒ„๊ฐ€ ๋™์ผํ•œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ

โœ… ์˜ˆ์ œ: JWT๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ ๋ฐฉ์‹

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•˜๋ฉด JWT๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ
  • ์ดํ›„ ๋ชจ๋“  ์š”์ฒญ์—์„œ JWT๋ฅผ ํฌํ•จํ•˜์—ฌ ์ธ์ฆ ์ˆ˜ํ–‰
  • ์„œ๋ฒ„๊ฐ€ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ชจ๋“  ์„œ๋ฒ„์—์„œ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

7. ๋ฐ์ดํ„ฐ ์„ผํ„ฐ (Data Center)

๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค์—์„œ๋Š” ๋‹จ์ผ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹ค ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์•„ํ‚คํ…์ฒ˜(Multi Data Center Architecture)๋ฅผ ๋„์ž…ํ•˜์—ฌ ๊ฐ€์šฉ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.


โœ… ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์•„ํ‚คํ…์ฒ˜

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

๐Ÿ”น ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ํ™•์žฅ์˜ ํ•„์š”์„ฑ

  1. ์„ฑ๋Šฅ ์ตœ์ ํ™” โ†’ ์‚ฌ์šฉ์ž์™€ ๊ฐ€๊นŒ์šด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ ์ฝ˜ํ…์ธ  ์ œ๊ณตํ•˜์—ฌ ์‘๋‹ต ์‹œ๊ฐ„ ๋‹จ์ถ•
  2. ์žฅ์•  ๋ณต๊ตฌ(Failover) โ†’ ํŠน์ • ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๊ฐ€ ๋‹ค์šด๋˜๋”๋ผ๋„ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ ์„œ๋น„์Šค ์ง€์† ๊ฐ€๋Šฅ
  3. ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ โ†’ ํŠธ๋ž˜ํ”ฝ์ด ํŠน์ • ์ง€์—ญ์— ์ง‘์ค‘๋˜์ง€ ์•Š๋„๋ก ๋ถ„์‚ฐ ๊ฐ€๋Šฅ

๐ŸŒ ํŠธ๋ž˜ํ”ฝ ์šฐํšŒ (Traffic Routing)

  • ์ง€๋ฆฌ์  ๋ผ์šฐํŒ…(GeoDNS)์„ ํ™œ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์œ„์น˜์— ๋”ฐ๋ผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
ํŠธ๋ž˜ํ”ฝ ์šฐํšŒ ๋ฐฉ๋ฒ•์„ค๋ช…
GeoDNS์‚ฌ์šฉ์ž์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋กœ ์—ฐ๊ฒฐ
Anycast IP์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ๋™์ผํ•œ IP๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ตœ์ ์˜ ๊ฒฝ๋กœ ์„ ํƒ
๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋กœ ํŠธ๋ž˜ํ”ฝ ์ „๋‹ฌ

โœ… ์˜ˆ์ œ: GeoDNS๋ฅผ ํ™œ์šฉํ•œ ํŠธ๋ž˜ํ”ฝ ์šฐํšŒ

  • ๋ฏธ๊ตญ ์‚ฌ์šฉ์ž๋Š” US ๋ฐ์ดํ„ฐ ์„ผํ„ฐ
  • ์œ ๋Ÿฝ ์‚ฌ์šฉ์ž๋Š” EU ๋ฐ์ดํ„ฐ ์„ผํ„ฐ
  • ์•„์‹œ์•„ ์‚ฌ์šฉ์ž๋Š” APAC ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ๊ตฌ์„ฑ

๐Ÿ”„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” (Data Synchronization)

๋‹ค์ค‘ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋ฅผ ์šด์˜ํ•  ๋•Œ๋Š” ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ์ „๋žต์ด ํ•„์š”ํ•˜๋‹ค.

๋™๊ธฐํ™” ๋ฐฉ์‹์„ค๋ช…
Master-Slave ๋ณต์ œํ•œ ๊ฐœ์˜ Master์—์„œ ์“ฐ๊ธฐ, ์—ฌ๋Ÿฌ Slave์—์„œ ์ฝ๊ธฐ ์ˆ˜ํ–‰
Multi-Master ๋ณต์ œ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ ์“ฐ๊ธฐ/์ฝ๊ธฐ ๊ฐ€๋Šฅ (์ถฉ๋Œ ํ•ด๊ฒฐ ํ•„์š”)
Eventual Consistency์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋™๊ธฐํ™”๋จ

๐Ÿ”น ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. ์“ฐ๊ธฐ ์—ฐ์‚ฐ์„ ํŠน์ • ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋กœ ์ œํ•œํ•˜๊ณ  ์ฝ๊ธฐ ๋ถ„์‚ฐ
  2. Conflict Resolution(์ถฉ๋Œ ํ•ด๊ฒฐ) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉ
  3. ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์‹œ ๋™๊ธฐํ™” ์ฃผ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์„ค๊ณ„

๐Ÿš€ ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ์˜ ๋ฐฐํฌ ๋ฐ ํ…Œ์ŠคํŠธ

์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ๋ฅผ ์šด์˜ํ•˜๋Š” ๊ฒฝ์šฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ ๋ฐ ํ…Œ์ŠคํŠธ ์ „๋žต์ด ์ค‘์š”ํ•˜๋‹ค.

๐Ÿ”น ๋ฐฐํฌ ์‹œ ๊ณ ๋ ค ์‚ฌํ•ญ

  • ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ(Blue-Green Deployment) โ†’ ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ํŠน์ • ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ๋จผ์ € ๋ฐฐํฌ ํ›„ ์ ์ง„์  ์ ์šฉ
  • ์นด๋‚˜๋ฆฌ์•„ ๋ฐฐํฌ(Canary Deployment) โ†’ ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ํ…Œ์ŠคํŠธ ํ›„ ์ „์ฒด ์ ์šฉ
  • ๋กค๋ฐฑ ์ „๋žต โ†’ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ์ฆ‰์‹œ ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„

โœ… ์˜ˆ์ œ: ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ

  • Green: ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ์ ์šฉ๋œ ์„œ๋ฒ„ ๊ทธ๋ฃน
  • Blue: ๊ธฐ์กด ๋ฒ„์ „์ด ์œ ์ง€๋˜๋Š” ์„œ๋ฒ„ ๊ทธ๋ฃน
  • ์ƒˆ ๋ฒ„์ „์ด ์•ˆ์ •์ ์ธ์ง€ ํ™•์ธ ํ›„ ์ „์ฒด ํŠธ๋ž˜ํ”ฝ์„ Green์œผ๋กœ ์ „ํ™˜

8. ๋ฉ”์‹œ์ง€ ํ (Message Queue)

  • ๋ฉ”์‹œ์ง€ ํ(Message Queue, MQ)๋Š” ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์ง€์›ํ•˜๋ฉฐ, ๋ฉ”์‹œ์ง€์˜ ๋ฌด์†์‹ค ์ „์†ก์„ ๋ณด์žฅํ•˜๋Š” ์‹œ์Šคํ…œ์ด๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ์ƒ์‚ฐ์ž(Producer)์™€ ์†Œ๋น„์ž(Consumer) ๊ฐ„์˜ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


โœ… ๋ฉ”์‹œ์ง€ ํ์˜ ๊ฐœ๋… ๋ฐ ํ•„์š”์„ฑ

๋ฉ”์‹œ์ง€ ํ๋Š” ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•œ ๋ฒ„ํผ ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

๐Ÿ”น ๋ฉ”์‹œ์ง€ ํ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  1. ๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ โ†’ ์š”์ฒญ์„ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์‹œ์ง€ ํ์— ์ €์žฅ ํ›„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ
  2. ๋ถ€ํ•˜ ๋ถ„์‚ฐ(Load Balancing) โ†’ ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ ์‹œ์—๋„ ์š”์ฒญ์„ ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  3. ์„œ๋น„์Šค ๋…๋ฆฝ์„ฑ ์ฆ๊ฐ€ โ†’ ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž๊ฐ€ ๋ณ„๋„๋กœ ๋™์ž‘ํ•˜์—ฌ ์„œ๋กœ์˜ ์žฅ์•  ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Œ
  4. ์‹ ๋ขฐ์„ฑ ๋ณด์žฅ โ†’ ๋ฉ”์‹œ์ง€๊ฐ€ ์†์‹ค๋˜์ง€ ์•Š๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์ „๋‹ฌ๋จ

๐Ÿ”„ ๋ฉ”์‹œ์ง€ ํ์˜ ๊ธฐ๋ณธ ์•„ํ‚คํ…์ฒ˜

๋ฉ”์‹œ์ง€ ํ๋Š” ์ƒ์‚ฐ์ž(Producer)์™€ ์†Œ๋น„์ž(Consumer)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

graph LR
    A["Producer (์ƒ์‚ฐ์ž)"] -->|๋ฉ”์‹œ์ง€ ์ „์†ก| B["Message Queue"]
    B -->|๋ฉ”์‹œ์ง€ ์ „๋‹ฌ| C["Consumer (์†Œ๋น„์ž)"]
    B -->|๋ฉ”์‹œ์ง€ ์ „๋‹ฌ| D["Consumer (์†Œ๋น„์ž)"]

โœ… ๋ฉ”์‹œ์ง€ ํ ๋™์ž‘ ๋ฐฉ์‹

  1. ์ƒ์‚ฐ์ž(Producer)๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค.
  2. ๋ฉ”์‹œ์ง€ ํ(Message Queue)๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.
  3. ์†Œ๋น„์ž(Consumer)๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ๊ฐ€์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  4. ๋ฉ”์‹œ์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉด ๋ฉ”์‹œ์ง€๋Š” ํ์—์„œ ์‚ญ์ œ๋œ๋‹ค.

๐ŸŒ ๋ฉ”์‹œ์ง€ ํ ์‹œ์Šคํ…œ ๋น„๊ต

๋ฉ”์‹œ์ง€ ํ ์‹œ์Šคํ…œํŠน์ง•
RabbitMQ๋ฉ”์‹œ์ง€ ๋ผ์šฐํŒ…, ํŠธ๋žœ์žญ์…˜ ์ง€์›, AMQP ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜
Apache Kafka๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ, ๋กœ๊ทธ ๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ
AWS SQS๊ด€๋ฆฌํ˜• ๋ฉ”์‹œ์ง€ ํ ์„œ๋น„์Šค, ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์ ํ•ฉ
Google Pub/Subํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ, ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง•

โœ… ์˜ˆ์ œ: RabbitMQ๋ฅผ ํ™œ์šฉํ•œ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ

  • ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ, ์ด๋ฉ”์ผ ๋ฐœ์†ก์„ ๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Œ.
  • ๋ฉ”์‹œ์ง€ ํ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฉ”์ผ ๋ฐœ์†ก ์ž‘์—…์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉ์ž ์‘๋‹ต ์†๋„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Œ.

9. ๋กœ๊ทธ, ๋ฉ”ํŠธ๋ฆญ, ์ž๋™ํ™”

์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ๋กœ๊ทธ(Log)์™€ ๋ฉ”ํŠธ๋ฆญ(Metrics)์„ ๋ถ„์„ํ•˜๊ณ , ์ž๋™ํ™”(Auto-scaling & Automation)๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ด๋‹ค.


โœ… ๋กœ๊ทธ (Log)

๋กœ๊ทธ(Log)๋Š” ์‹œ์Šคํ…œ์˜ ๋™์ž‘์„ ๊ธฐ๋กํ•˜๋Š” ๋ฐ์ดํ„ฐ์ด๋ฉฐ, ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์›์ธ์„ ๋ถ„์„ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ด๋‹ค.

๐Ÿ”น ๋กœ๊ทธ์˜ ์ข…๋ฅ˜

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

โœ… ๋กœ๊ทธ ๋ถ„์„์„ ์œ„ํ•œ ๋„๊ตฌ

๋„๊ตฌ์„ค๋ช…
ELK Stack (Elasticsearch, Logstash, Kibana)๋กœ๊ทธ ์ˆ˜์ง‘, ์ €์žฅ, ๋ถ„์„ ๋ฐ ์‹œ๊ฐํ™”
Splunk์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ถ„์„
Fluentd๋กœ๊ทธ ์ˆ˜์ง‘ ๋ฐ ์ „๋‹ฌ์— ์ตœ์ ํ™”๋œ ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ

โœ… ์˜ˆ์ œ: ELK Stack์„ ํ™œ์šฉํ•œ ๋กœ๊ทธ ๋ถ„์„

  • Logstash๋กœ ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , Elasticsearch์— ์ €์žฅํ•œ ํ›„ Kibana์—์„œ ์‹œ๊ฐํ™” ๊ฐ€๋Šฅ

๐Ÿ“Š ๋ฉ”ํŠธ๋ฆญ (Metrics)

๋ฉ”ํŠธ๋ฆญ(Metrics)์€ ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ ๋ฐ ์ƒํƒœ๋ฅผ ์ธก์ •ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋กœ, ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ†ตํ•ด ์žฅ์• ๋ฅผ ์‚ฌ์ „์— ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”น ์ฃผ์š” ๋ฉ”ํŠธ๋ฆญ ์œ ํ˜•

๋ฉ”ํŠธ๋ฆญ ์œ ํ˜•์„ค๋ช…
ํ˜ธ์ŠคํŠธ ๋ฉ”ํŠธ๋ฆญCPU, RAM, ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ๋“ฑ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฉ”ํŠธ๋ฆญ์‘๋‹ต ์‹œ๊ฐ„, ์˜ค๋ฅ˜์œจ ๋“ฑ
๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”ํŠธ๋ฆญ์‚ฌ์šฉ์ž ์ˆ˜, ๊ฑฐ๋ž˜๋Ÿ‰, ํŠธ๋žœ์žญ์…˜ ์ˆ˜ ๋“ฑ

โœ… ๋ฉ”ํŠธ๋ฆญ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ

๋„๊ตฌ์„ค๋ช…
Prometheus์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง
Grafana์‹ค์‹œ๊ฐ„ ๋Œ€์‹œ๋ณด๋“œ ์‹œ๊ฐํ™” ๋„๊ตฌ
Datadogํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ฒฝ๊ณ  ์‹œ์Šคํ…œ

โœ… ์˜ˆ์ œ: Prometheus & Grafana๋ฅผ ํ™œ์šฉํ•œ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง

  • Prometheus๊ฐ€ ์‹œ์Šคํ…œ ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•˜๊ณ , Grafana์—์„œ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ€๋Šฅ

โš™๏ธ ์ž๋™ํ™” (Automation)

  • *์ž๋™ํ™”(Auto-scaling & Automation)๋Š” ์‹œ์Šคํ…œ์ด ์ผ์ •ํ•œ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ํ™•์žฅ ๋˜๋Š” ์ถ•์†Œ**ํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

๐Ÿ”น ์ž๋™ํ™”๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  1. ํŠธ๋ž˜ํ”ฝ ๋ณ€ํ™” ๋Œ€์‘ โ†’ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธ‰์ฆํ•  ๋•Œ ์ž๋™์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ํŠธ๋ž˜ํ”ฝ ๊ฐ์†Œ ์‹œ ์ž์›์„ ํšŒ์ˆ˜
  2. ๋น„์šฉ ์ ˆ๊ฐ โ†’ ํ•„์š”ํ•  ๋•Œ๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์šฉ ์ตœ์ ํ™”
  3. ์šด์˜ ํšจ์œจ์„ฑ ํ–ฅ์ƒ โ†’ ์ˆ˜์ž‘์—… ์—†์ด ์‹œ์Šคํ…œ์ด ์ž๋™์œผ๋กœ ์กฐ์ •๋จ

โœ… ์ž๋™ํ™” ๊ธฐ์ˆ  ๋ฐ ๋„๊ตฌ

์ž๋™ํ™” ๋„๊ตฌ์„ค๋ช…
AWS Auto ScalingํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€์— ๋”ฐ๋ผ EC2 ์ธ์Šคํ„ด์Šค ์ž๋™ ์ถ”๊ฐ€/์ œ๊ฑฐ
Kubernetes Horizontal Pod Autoscaler์ปจํ…Œ์ด๋„ˆ ์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ํ™•์žฅ
Terraform์ธํ”„๋ผ๋ฅผ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•˜๋Š” IaC(Infrastructure as Code) ๋„๊ตฌ
Ansible์„œ๋ฒ„ ์„ค์ • ๋ฐ ๋ฐฐํฌ ์ž๋™ํ™”

โœ… ์˜ˆ์ œ: AWS Auto Scaling ํ™œ์šฉ

  • EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™ ํ™•์žฅํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ ๋ณ€ํ™”์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

10. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ทœ๋ชจ ํ™•์žฅ (Database Scalability)

๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ๊ณผ ๋ฐ์ดํ„ฐ ์ฆ๊ฐ€์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB)๋Š” ์ง€์†์ ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.

ํ™•์žฅ ๋ฐฉ๋ฒ•์—๋Š” ์ˆ˜์ง์  ํ™•์žฅ(Scale-Up)๊ณผ ์ˆ˜ํ‰์  ํ™•์žฅ(Scale-Out, ์ƒค๋”ฉ)์ด ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ ์žฅ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.


โœ… ์ˆ˜์ง์  ํ™•์žฅ (Scale-Up)

์ˆ˜์ง์  ํ™•์žฅ์€ ๊ธฐ์กด ์„œ๋ฒ„์˜ ํ•˜๋“œ์›จ์–ด ์„ฑ๋Šฅ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฒ˜๋ฆฌ ์šฉ๋Ÿ‰์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐฉ์‹์ด๋‹ค.

๐Ÿ”น ์ˆ˜์ง์  ํ™•์žฅ์˜ ํ•œ๊ณ„

  1. ํ•˜๋“œ์›จ์–ด ํ™•์žฅ์˜ ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„ โ†’ CPU, RAM, ๋””์Šคํฌ ์„ฑ๋Šฅ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Œ
  2. ๋‹จ์ผ ์žฅ์• ์ (SPOF, Single Point of Failure) โ†’ ๋‹จ์ผ ์„œ๋ฒ„์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์ „์ฒด ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋  ์œ„ํ—˜์ด ์žˆ์Œ
  3. ๊ณ ๋น„์šฉ โ†’ ๊ณ ์„ฑ๋Šฅ ์žฅ๋น„๋Š” ๋น„์šฉ์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•จ

โœ… ์–ธ์ œ ์ˆ˜์ง์  ํ™•์žฅ์„ ์„ ํƒํ• ๊นŒ?

  • ๋ฐ์ดํ„ฐ ์–‘์ด ํฌ์ง€ ์•Š๊ณ , ๋‹จ์ผ ์„œ๋ฒ„์—์„œ๋„ ์ถฉ๋ถ„ํ•œ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์„ ๋•Œ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ต๊ณ , ์ฆ‰๊ฐ์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ํ•„์š”ํ•  ๋•Œ

๐Ÿ”„ ์ˆ˜ํ‰์  ํ™•์žฅ (Scale-Out, Sharding)

์ˆ˜ํ‰์  ํ™•์žฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒค๋”ฉ(Sharding) ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ”น ์ƒค๋”ฉ(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)๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ƒค๋”ฉ ํ‚ค(๋˜๋Š” ํŒŒํ‹ฐ์…˜ ํ‚ค)๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ์ƒค๋“œ์— ์ €์žฅ๋ ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€ ๊ฐ’์ด๋‹ค.

๐Ÿ”น ์ƒค๋”ฉ ํ‚ค ์„ค๊ณ„ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ

  1. ๊ท ๋“ฑํ•œ ๋ฐ์ดํ„ฐ ๋ถ„ํฌ โ†’ ํŠน์ • ์ƒค๋“œ์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ์ง‘์ค‘๋˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•จ
  2. ์กฐ์ธ(Join) ์ตœ์†Œํ™” โ†’ ์—ฌ๋Ÿฌ ์ƒค๋“œ ๊ฐ„ ์กฐ์ธ์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋น„์ •๊ทœํ™”ํ•˜์—ฌ ์„ค๊ณ„ํ•ด์•ผ ํ•จ
  3. ๋ฐ์ดํ„ฐ ์žฌ์ƒค๋”ฉ(Re-sharding) ๊ฐ€๋Šฅ์„ฑ ๊ณ ๋ ค โ†’ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด ์ƒค๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ์—ฐํ•œ ์„ค๊ณ„ ํ•„์š”

โš ๏ธ ์ƒค๋”ฉ ์‚ฌ์šฉ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ 

1๏ธโƒฃ ๋ฐ์ดํ„ฐ ์žฌ์ƒค๋”ฉ(Re-sharding)

๋ฐ์ดํ„ฐ๊ฐ€ ํŠน์ • ์ƒค๋“œ์— ์ง‘์ค‘๋˜๊ฑฐ๋‚˜ ์šฉ๋Ÿ‰์„ ์ดˆ๊ณผํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ƒค๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… ๋ฐ์ดํ„ฐ ์žฌ์ƒค๋”ฉ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ

  • ํ•œ ๊ฐœ์˜ ์ƒค๋“œ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ ธ์„œ ๋” ์ด์ƒ ๊ฐ๋‹นํ•  ์ˆ˜ ์—†์„ ๋•Œ
  • ์ƒค๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๊ฐ€ ๋ถˆ๊ท ํ˜•ํ•˜์—ฌ ์ผ๋ถ€ ์ƒค๋“œ๊ฐ€ ๊ณผ๋ถ€ํ•˜๋  ๋•Œ

2๏ธโƒฃ ์œ ๋ช…์ธ์‚ฌ(Hotspot) ๋ฌธ์ œ

  • ํŠน์ • ์ƒค๋“œ์— ์ธ๊ธฐ ์žˆ๋Š” ๋ฐ์ดํ„ฐ(์˜ˆ: ์ธ๊ธฐ ๊ฒŒ์‹œ๊ธ€, ํŠน์ • ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ)๊ฐ€ ์ง‘์ค‘๋  ๊ฒฝ์šฐ ํ•ด๋‹น ์ƒค๋“œ์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.
  • ํ•ด๊ฒฐ์ฑ…:
    • ์ƒค๋”ฉ ํ‚ค๋ฅผ ๋žœ๋คํ•œ ๊ฐ’ ๋˜๋Š” ํ•ด์‹ฑ(Hashing) ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค์ •
    • ์ธ๊ธฐ ๋ฐ์ดํ„ฐ๋Š” ๋ณ„๋„์˜ ์บ์‹œ ์‹œ์Šคํ…œ(Redis ๋“ฑ)์—์„œ ์ œ๊ณต

3๏ธโƒฃ ์กฐ์ธ๊ณผ ๋น„์ •๊ทœํ™”(De-normalization)

  • ์—ฌ๋Ÿฌ ์ƒค๋“œ์— ๋ถ„์‚ฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ธ(Join)ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต๋‹ค.
  • ํ•ด๊ฒฐ์ฑ…:
    • ๋น„์ •๊ทœํ™”(Denormalization) โ†’ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜์—ฌ ์กฐ์ธ์„ ์ตœ์†Œํ™”
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์กฐ์ธ ์ฒ˜๋ฆฌ โ†’ ๋ฐ์ดํ„ฐ ์กฐํšŒ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์กฐํ•ฉ

๐Ÿ—๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™•์žฅ ์ „๋žต ๋น„๊ต

ํ™•์žฅ ๋ฐฉ์‹์žฅ์ ๋‹จ์ ์‚ฌ์šฉ ์‚ฌ๋ก€
์ˆ˜์ง์  ํ™•์žฅ(Scale-Up)์šด์˜์ด ๋‹จ์ˆœํ•จ, ์ฆ‰๊ฐ์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ฐ€๋Šฅ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„, ๊ณ ๋น„์šฉ, ๋‹จ์ผ ์žฅ์• ์ ์†Œ๊ทœ๋ชจ ์„œ๋น„์Šค, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ์ด ์–ด๋ ค์šด ๊ฒฝ์šฐ
์ˆ˜ํ‰์  ํ™•์žฅ(Scale-Out, Sharding)๋ฌดํ•œํ•œ ํ™•์žฅ ๊ฐ€๋Šฅ, ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์ผ๋ถ€ ์ƒค๋“œ๋งŒ ์˜ํ–ฅ์ƒค๋”ฉ ํ‚ค ์„ค๊ณ„ ํ•„์š”, ์กฐ์ธ ์–ด๋ ค์›€, ์žฌ์ƒค๋”ฉ ํ•„์š”๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ๊ธ€๋กœ๋ฒŒ ์„œ๋น„์Šค
profile
๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š”, ์ด์Šˆ๋ฅผ ์ค„์ด๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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