๐ŸŒฟ[๊ธฐ์ˆ  ๋ฉด์ ‘์—์„œ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฌธ์ œ๊ฐ€ ๊ฐ€์ง€๋Š” ์˜๋ฏธ ]

๋žธ๋‚˜ยท2023๋…„ 7์›” 8์ผ
0

์›ํ‹ฐ๋“œ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ๋ฐฑ์—”๋“œ ์ฑŒ๋ฆฐ์ง€ 1์ฐจ ํŠน๊ฐ•

โ˜˜๏ธ์‚ฌ์ „๊ณผ์ œ

DB Table row ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ๊ฐœ๋ฐœํ•˜์‹ค๊ฒƒ์ธ์ง€

  • DB Lock (๋น„๊ด€์  ๋ฝ / ๋‚™๊ด€์  ๋ฝ)
  • ์ฒ˜๋ฆฌ์œจ (TPS๊ฐ€ 5๋งŒ๊ฑด์”ฉ ๋“ค์–ด์˜ฌ๋•Œ ๋ฝ์„ ๊ฑธ์–ด๋ฒ„๋ฆฌ๋ฉด ์„œ๋ฒ„๊ฐ€ ํ„ฐ์ ธ๋ฒ„๋ฆผ.. , ๋น„๊ด€์  ๋ฝ์„ ๊ฑธ์–ด๋ฒŒ์ด๋ฉด ๋ฐ๋“œ๋ฝ ํ„ฐ์งˆ์ˆ˜๋„์žˆ์Œ)
    => Redis๊ฐ™์€ ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ๋ฅผ ๋‘์–ด ๋Œ€๊ธฐ์—ด์„ ๋งŒ๋“ค์ˆ˜๋„ ์žˆ์Œ.
  • ๋ˆ/์žฅ๋ถ€๊ฐ™์€ ์ค‘์š”ํ•œ๊ฒƒ์ผ ๊ฒฝ์šฐ, ๋ถ„์‚ฐ๋ฝ์„ ๊ฑธ์–ด์„œ ๊ณ„์ขŒ๋‚˜ ๊ณ ๊ฐ์˜ ์ž์‚ฐ์˜ ๊ฒฝ์šฐ ๋ถ„์‚ฐ๋ฝ์„ ๊ฑธ์–ด์ฃผ๋ฉด ๋ณด์žฅ์ด ๋จ.
  • ์†๋„ ๋น ๋ฅธ kafka ์“ธ์ˆ˜๋„ ์žˆ๋Š”๋ฐ.. ์“ธ๋ฐ”์—๋Š” Redis ์“ธ๊ฒƒ ๊ฐ™์Œ.. ํŒŒํ‹ฐ์…˜์ด๋ผ๋Š” ๊ฐœ๋… ์ฐพ์•„๋ณด๊ธฐ
    - [์šฐ์•„ํ•œํ…Œํฌํ† ํฌ] ์„ ์ฐฉ์ˆœ ์ด๋ฒคํŠธ ์„œ๋ฒ„ ์ƒ์กด๊ธฐ! 47๋งŒ RPM์—์„œ ์‚ด์•„๋‚จ๋‹ค?!
    > ์ฐธ๊ณ ํ•ด๋ณด๊ธฐ
  • DB๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ฉด ๋ฝ๊ฑธ๊ธฐ๊ฐ€ ์–ด๋ ค์›€. MSA ์—์„œ๋Š” ๋ถ„์‚ฐ๋ฝ๊ฐ™์€๊ฑธ ๋งŽ์ด ์”€.

TCP vs UDP (๋ฉด์ ‘ ๋‹จ๊ณจ์งˆ๋ฌธ, ์ฐพ์•„๋ณด์ž)

  • TCP & UDP๋Š” OSI ํ‘œ์ค€๋ชจ๋ธ๊ณผ TCP/IP ๋ชจ๋ธ์˜ ์ „์†ก ๊ณ„์ธต์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์ž„.
  • TCP : ๋†’์€ ์‹ ๋ขฐ์„ฑ
  • UDP : ์ „์†ก์†๋„๊ฐ€ ๋น ๋ฆ„ (์ตœ๊ทผ์— ๋œจ๊ณ ์žˆ์Œ)

๊ฒ€์ƒ‰์ฐฝ์— Naver๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์„๋•Œ ์ผ์–ด๋‚˜๋Š” ์ผ

๋ณธ์ธ์ด ์ฃผ๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด์—์„œ ์„ค๊ณ„์  ๊ฒฐํ•จ ํ•œ๊ฐ€์ง€๋ฅผ ์ž‘์„ฑ

  • ์˜ˆ์‹œ1 : Java null ๊ฐœ๋… (null object pattern)
  • ์˜ˆ์‹œ2 : Stack์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์™œ ๊ตฌํ˜„ํ–ˆ๋Š”๊ฐ€.. Stack ๋งŒ๋“ค๋•Œ ์„ฑ๋Šฅ์€ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์Œ. / DEQUE ์จ์•ผํ•จ.

๋ณธ์ธ์ด ์ฃผ๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด์—์„œ ์„ค๊ณ„์  ๊ฒฐํ•จ ํ•œ๊ฐ€์ง€๋ฅผ ์ž‘์„ฑ

  • ArrayList
  • HashMap ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์–ด๋–ค๊ฑฐ ์“ฐ๋Š”์ง€ ๋“ฑ๋“ฑ
  • StringBuilder(์‚ฌ์ด์ฆˆ 16) StringBuffer String

Apache Kafka

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

๐ŸŒฟ[๊ธฐ์ˆ  ๋ฉด์ ‘์—์„œ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฌธ์ œ๊ฐ€ ๊ฐ€์ง€๋Š” ์˜๋ฏธ]

1. ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฌธ์ œ๋ž€

1-1. ๋ฌด์—‡์„ ์›ํ•˜๋Š”๊ฐ€

๊ธฐ์ˆ  ๋ฉด์ ‘์—์„œ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฌธ์ œ๋ฅผ ๋ฌผ์–ด๋ณด๋Š” ์ด์œ ๋Š” ๋ญ˜๊นŒ? -> ํ˜„์—…์—์„œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•จ.

  • ์„ค๊ณ„๋Š” ์ •๋‹ต์ด ์—†์Œ. ํšจ์œจ์„ฑ์˜ ์ฐจ์ด๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ, ์ •๋‹ต์ด ์—†์œผ๋‹ˆ ์˜๊ฒฌ์— ๋Œ€ํ•œ ๊ทผ๊ฑฐ๋ฅผ ๊ฐ–๊ณ  ์„ค๋“ํ•˜๋Š” ๊ฒƒ.
  • ๊ผฌ๋ฆฌ ์งˆ๋ฌธ์ด ๋งŽ์„ ์ˆ˜ ์žˆ์Œ ( ์ด๊ฑด ๋‚ด๊ฐ€ ๋‹ต๋ณ€์„ ์ž˜ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๋œป ใ…Žใ…Ž ๊ถ๊ธˆํ•œ๊ฒŒ ๋งŽ์œผ๋‹ˆ ๋ฌผ์–ด๋ณด๋Š” ๊ฒƒ)

1-2. ํ”ผํ•ด์•ผ ํ•  ๊ฒƒ

  • ์„ค๊ณ„์˜ ์ˆœ์ˆ˜์„ฑ์— ์ง‘์ฐฉํ•œ ๋‚˜๋จธ์ง€, ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์„ ํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด๋ง๋“ค์ด ํ˜‘์—…์—๋„ ๋งŽ์Œ.
  • ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง์˜ ๊ฒฐ๊ณผ๋กœ ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ๋น„์šฉ ์ƒ์Šนํ•  ์ˆ˜ ์žˆ์Œ.
    ex) ์‚ฌ์šฉ์ž 10๋ช…์ธ๋ฐ, MAS ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„ํ•œ๋‹ค? ์ฐจ๋ผ๋ฆฌ Monolith๋กœ ํ•˜๋Š”๊ฒŒ ๋‚˜์„์ˆ˜๋„ ์žˆ์Œ

2. ํšจ๊ณผ์  ๋ฉด์ ‘์„ ์œ„ํ•œ 4๋‹จ๊ณ„ ์ ‘๊ทผ๋ฒ•

2-1. ๋ฌธ์ œ ์ดํ•ด ๋ฐ ์„ค๊ณ„ ๋ฒ”์œ„ ํ™•์ •

  • ๋‹ต๋ถ€ํ„ฐ ๋“ค์ด๋ฐ€์ง€ ๋ง์ž
  • ๊นŠ์ด ์ƒ๊ฐํ•˜๊ณ  ์งˆ๋ฌธํ•˜์—ฌ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๊ฐ€์ •์„ ๋ถ„๋ช…ํžˆ ํ•˜์ž
  • ๋ชจํ˜ธํ•จ์„ ์—†์• ๋Š”๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•จ
  • ์˜ฌ๋ฐ”๋ฅธ ์งˆ๋ฌธ์„ ํ•˜๋Š” ๊ฒƒ. ์ ์ ˆํ•œ ๊ฐ€์ •์„ ํ•˜๋Š” ๊ฒƒ. ์‹œ์Šคํ…œ ๊ตฌ์ถ•์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ชจ์œผ๋Š” ๊ฒƒ
  • ๋ฉด์ ‘๊ด€๊ณผ ํ•‘ํ์„ ๋งŽ์ด ํ•˜์ž!!

2-2. ๊ฐœ๋žต์ ์ธ ์„ค๊ณ„์•ˆ ์ œ์‹œ ๋ฐ ๋™์˜ ๊ตฌํ•˜๊ธฐ

  • ๊ฐœ๋žต์ ์ธ ์„ค๊ณ„์•ˆ์„ ์ œ์‹œํ•˜๊ณ  ๋ฉด์ ‘๊ด€์˜ ๋™์˜๋ฅผ ์–ป์Œ.

2-3. ์ƒ์„ธ ์„ค๊ณ„

  • Monolith > MSA๋กœ ๋„˜์–ด๊ฐ„๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด..
  • ์บ์‹œ์ฒ˜๋ฆฌ ์–ด๋–ป๊ฒŒ ํ• ๊ฑด์ง€, ์•Œ๋ฆผ์— ์žฅ์• ๊ฐ€ ๋‚˜๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊ฑด์ง€? , ๋“ฑ๋“ฑ..
  • ๋ฏธ๋ž˜์— ๋‹ฅ์น  ๊ทœ๋ชจ ํ™•์žฅ ์š”๊ตฌ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๋Œ€์ฒ˜ํ•  ๊ฒƒ์ธ์ง€..

2-4. ๋งˆ๋ฌด๋ฆฌ๋‹จ๊ณ„

  • ๊ฐœ์„ ์ ..
  • ๋ฏธ๋ž˜ ๊ทœ๋ชจ ํ™•์žฅํ•ด์•ผํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”์ง€?

** ์ค‘์š”ํ•œ ๊ฒƒ

  • ์งˆ๋ฌธ์„ ๋งŽ์ด ํ•ด์•ผํ•ด์„œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ตœ๋Œ€ํ•œ ์ดํ•ดํ•ด์•ผ ํ•จ.
  • ์†Œํ†ต์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค. ์ผ์„ ํ•  ๋•Œ ๊ฐ™์ด ์ž˜ ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ธ์ง€ ํ™•์ธํ•˜๋Š” ์ž๋ฆฌ์ด๊ธฐ๋„ ํ•จ.
  • ํžŒํŠธ๋ฅผ ์ฒญํ•˜๊ธฐ ์ฃผ์ €ํ•˜์ง€ ๋ง์ž
  • ์•„๋ฌด๊ฒƒ๋„ ๋Œ€๋น„ํ•˜์ง€ ๋ง๊ณ  ๋ฉด์ ‘์žฅ์— ๊ฐ€์ง€ ๋ง์ž;;
  • JAVA / SPRING ์€ ๋‹น์—ฐํžˆ ๊ธฐ๋ณธ์ด๊ณ , ๊ฒฝ์Ÿ๋ ฅ์„ ๊ฐ–์ถ”๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‹œ์Šคํ…œ ์„ค๊ณ„๋„ ์ž˜ ์•Œ์•„์•ผํ•œ๋‹ค.

์ „ํ˜•์ ์ธ ๋ฉด์ ‘ ์งˆ๋ฌธ

  • DB Lock, ๋™์‹œ์„ฑ
  • ๋„คํŠธ์›Œํฌ

๐ŸŒฟ[์„ค๊ณ„]

1 . ๋‹จ์ผ ์„œ๋ฒ„ ์„ค๊ณ„

2 . ์–ด๋–ค DB๋ฅผ ์‚ฌ์šฉํ•˜์ง€? (RDBMS vs NoSQL)

CAP ์ด๋ก 

  • Availability(๊ฐ€์šฉ์„ฑ) : ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•˜์—ฌ ์ •์ƒ์ ์ธ ์‘๋‹ต์„ ํ•œ๋‹ค.
  • Consistency (์ผ๊ด€์„ฑ) : ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • Partition Tolerance (๋ถ€๋ถ„ ๊ฒฐํ•จ) => ๋„คํŠธ์›Œํฌ์˜ ํŠน์„ฑ์ด๋ผ.. ๋…ผ๋ž€์ด ์ข€ ์žˆ์Œ!

์ฐธ๊ณ ํ•˜๊ธฐ!
CAP Theorem, ์˜คํ•ด์™€ ์ง„์‹ค

CQRS Pattern

์ฐธ๊ณ ํ•ด๋ณด๊ธฐ
B๋งˆํŠธ ์ „์‹œ ๋„๋ฉ”์ธ CQRS ์ ์šฉํ•˜๊ธฐ

3. ๊ทœ๋ชจ๋ฅผ ํ™•์žฅํ•ด๋ณด์ž (์ˆ˜ํ‰์  ํ™•์žฅ / ์ˆ˜์ง์  ํ™•์žฅ)

3-1. ์ˆ˜ํ‰์  ํ™•์žฅ

๋” ๋งŽ์€ ์„œ๋ฒ„๋ฅผ!

3-2. ์ˆ˜์ง์  ํ™•์žฅ

๋” ๊ณ ์‚ฌ์–‘์œผ๋กœ!

์ˆ˜์ง์  ํ™•์žฅ์˜ ๋‹จ์ 

  • ํ•œ๋Œ€์˜ ์„œ๋ฒ„์— CPU, Memory๋ฅผ ๋ฌดํ•œ๋Œ€๋กœ ์ฆ์„คํ•  ๋ฐฉ๋ฒ•์€ ์—†์Œ.
  • ๋น„์šฉ์ด ์„ ํ˜•์ ์ธ ์ถ”์„ธ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€
  • ๋‘๋ฐฐ ์ด์ƒ์˜ CPU, Memory๋ฅผ ๊ฐ–์ถ˜ ์‹œ์Šคํ…œ์€ ๋‘๋ฐฐ ์ด์ƒ์˜ ๋น„์šฉ์ด ๋“ค์ง€๋งŒ, ๋‘๋ฐฐ ์ด์ƒ์˜ ๋ถ€ํ•˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹˜.
  • ex) JAVA Heap ๋ฉ”๋ชจ๋ฆฌ ์Šค์บ” ๋น„์šฉ์ด ๋Š˜์–ด๋‚˜๊ธฐ๋„ ํ•จ.
profile
๋ฐฑ์—”๋“œ๊ฐœ๋ฐœ์ž

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