[์Šคํ„ฐ๋””๐Ÿฐ] 0503 ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ๊ณ ์ฐฐ

Winteringยท2022๋…„ 5์›” 3์ผ
0

โœ…์„ฑ๋Šฅ์— ๋Œ€ํ•œ ๊ณ ์ฐฐ

a. ๊ฐ€์šฉ์„ฑ, ์‹œ์Šคํ…œ ํ™•์žฅ, ์‹œ์Šคํ…œ ์ด์ค‘ํ™”


โœ…๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ์š”์ธ ์ค‘ ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ์‹ ๊ฒฝ์จ์•ผ ํ• ๊นŒ?

a. JVM - memory ๊ด€๋ จ GC ๊ด€๋ จ (Trade Off)

1. Strong References (๊ฐ•ํ•œ ์ฐธ์กฐ)

2. Soft References (์†Œํ”„ํŠธ ์ฐธ์กฐ)

3. Weak References (์•ฝํ•œ ์ฐธ์กฐ)

4. Phantom References (ํŒฌํ…€ ์ฐธ์กฐ)

Full GC, Minor GC

b. Web Server

1. apache, nxinx, IIS

2. Web Server๋Š” ํ•„์š”ํ•œ๊ฐ€? - ELB

3. connection queue

c. WAS

1. Spring(Tomcat),django,flask

2. Thread ๊ฐฏ์ˆ˜, accept ๊ฐฏ์ˆ˜

3. EC2 SPEC - t2 micro

4. cpu ๊ฐ€์šฉ๋ฅ  - i5 ~~ , ram - 1G

5. was์˜ ์ ์ • ์“ฐ๋ ˆ๋“œ ๊ฐฏ์ˆ˜๋Š”?

: ๊ณต์‹ํ™” -

6. ๋™์ ‘์ž

: 1000๋ช… ํ•œ๊ณ„, NIO (Nonblock IO)์ง€๋งŒ, ์ •ํ™•ํžˆ ์„œ๋ฒ„์—์„œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋™์ ‘์ž๋Š” 1000๋ช…์ด ํ•œ๊ณ„

d. DB

1. DB Connection Pool์˜ ์ ์ • ๊ฐฏ์ˆ˜

  • Thread 100๊ฐœ, EC2 10๊ฐœ ์ผ ๋•Œ, Connection Pool์˜ ์ตœ๋Œ€์˜ ํšจ์œจ ๊ฐฏ์ˆ˜๋Š”? (2n-1) : 199๊ฐœ

2. ์ฟผ๋ฆฌ ํŠœ๋‹

  • join๋ฌธ์„ ์ตœ๋Œ€ํ•œ ์ค„์ด๋Š” ๊ฒŒ ์ข‹์Œ

    ORM(Obeject Relational Mapping)
    ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘ํ•ด์ฃผ๋Š” ๊ฒƒ (1์กฐ)

  • ORM์ด ๋งค์šฐ ์ž˜๋‚˜์™”๊ธฐ๋•Œ๋ฌธ์—

3. ํŠธ๋žœ์ ์…˜ ๋ ˆ๋ฒจ

ํŠธ๋žœ์ ์…˜
'์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ์—…๋ฌด์˜ ์ตœ์†Œ๋‹จ์œ„'

  • acid
  • isolation - 4LV - 5LV
    LOCKING
    4๋‹จ๊ณ„
    Read level isolation
    Write level isolation

4. replica vs cluster

Replication
: ์—ฌ๋Ÿฌ ๊ฐœ์˜ DB๋ฅผ ๊ถŒํ•œ์— ๋”ฐ๋ผ ์ˆ˜์ง์ ์ธ ๊ตฌ์กฐ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ์‹ (Master Node๋Š” ์“ฐ๊ธฐ ์ž‘์—…๋งŒ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, Slave Node๋Š” ์ฝ๊ธฐ ์ž‘์—…๋งŒ์„ ์ฒ˜๋ฆฌ), ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋…ธ๋“œ๋“ค๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”

  • ์žฅ์ 
    - DB ์š”์ฒญ์˜ 60~80%๊ฐ€ ์ฝ๊ธฐ ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์— Replication๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
    - ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์šด์˜๋˜์–ด ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ฑฐ์˜ ์—†๋‹ค.

  • ๋‹จ์ 
    - ๋…ธ๋“œ๋“ค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์•„ ์ผ๊ด€์„ฑ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค.
    - Master ๋…ธ๋“œ๊ฐ€ ๋‹ค์šด๋˜๋ฉด ๋ณต๊ตฌ ๋ฐ ๋Œ€์ฒ˜๊ฐ€ ๊นŒ๋‹ค๋กญ๋‹ค

Clustering
: ์—ฌ๋Ÿฌ๊ฐœ์˜ DB๋ฅผ ์ˆ˜ํ‰์ ์ธ ๊ตฌ์กฐ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ์‹. ๋ถ„์‚ฐํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜์—ฌ Single point of failure์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” Fail Over ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋จ. '๋™๊ธฐ'๋ฐฉ์‹์œผ๋กœ ๋…ธ๋“œ๋“ค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•œ๋‹ค.

  • ์žฅ์ 
    - ๋…ธ๋“œ๋“ค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋กœ ์ผ๊ด€์„ฑ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
    - 1๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์ฃฝ์–ด๋„, ๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ์‚ด์•„ ์žˆ์–ด์„œ ์‹œ์Šคํ…œ์„ ๊ณ„์† ์žฅ์• ์—†์ด ์šด์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ 
    - Replication์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.
    - ์žฅ์• ๊ฐ€ ์ „ํŒŒ๋œ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊นŒ๋‹ค๋กœ์šฐ๋ฉฐ, ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”์— ์˜ํ•ด ์Šค์ผ€์ผ๋ง์— ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.

e. Redis

Redis
:๋ ˆ๋””์Šค๋Š” ๊ณ ์„ฑ๋Šฅ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ๋กœ์„œ ๋ฌธ์ž์—ด, ๋ฆฌ์ŠคํŠธ, ํ•ด์‹œ, ์…‹, ์ •๋ ฌ๋œ ์…‹ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›ํ•˜๋Š” NoSQL์ด๋‹ค.
๐Ÿ‘‰๋ ˆ๋””์Šค๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•œ๋‹ค. ์ฆ‰, ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค. ๋”ํ•ด์„œ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•œ๋‹ค.
๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ, ๊ฐœ๋ฐœ์˜ ํŽธ์˜์„ฑ์ด ์ข‹์•„์ง€๊ณ  ๋‚œ์ด๋„๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
ex) ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ, DBMS์˜ ๊ฒฝ์šฐ DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ์ €์žฅ ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜์—ฌ ๋‹ค์‹œ ์ฝ์–ด์˜ค๋Š” ๊ณผ์ •์€ ๋””์Šคํฌ์— ์ง์ ‘ ์ ‘๊ทผ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฐ๋‹ค. ์ด ๋•Œ Redis๋ฅผ ์ด์šฉํ•˜๊ณ  ๋ ˆ๋””์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” Sorted-Set์ด๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

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

1. ๋ฌด์ž‘์ • redis๋ฅผ ์“ฐ๋Š” ๊ฒŒ ์ข‹์€ ๊ฑธ๊นŒ?

2. replica vs cluster

f. ์ฝ”๋“œ ๋ ˆ๋ฒจ ํŠœ๋‹

1. String

2. Sync ์ตœ์†Œํ™”

3. (3์กฐ) JAVA, PYTHON์˜ ์ฝ”๋“œ๋ ˆ๋ฒจํŠœ๋‹ ๋ฐฉ๋ฒ•๋“ค


โœ…์„ฑ๋Šฅ์ธก์ •

a. JMeter

b. Locust

c. Latency vs Response Time

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