TEST

[TEST] λΆ€ν•˜ν…ŒμŠ€νŠΈ : νŠΈλž˜ν”½ 증가에 λ”°λ₯Έ μ‹œμŠ€ν…œ 섀계 및 ν™•μž₯ 방법

sian han 2025. 5. 27. 16:36

πŸŽ“ 이 글은 μΈν”„λŸ°μ—μ„œ μ œκ³΅ν•˜λŠ” "λŒ€κ·œλͺ¨ νŠΈλž˜ν”½ 처리λ₯Ό μœ„ν•œ λΆ€ν•˜ ν…ŒμŠ€νŠΈ μž…λ¬Έ/μ‹€μ „" κ°•μ˜λ₯Ό μˆ˜κ°•ν•˜λ©΄μ„œ μ •λ¦¬ν•œ λ‚΄μš©μ„ λ°”νƒ•μœΌλ‘œ μž‘μ„±ν•œ κΈ€μž…λ‹ˆλ‹€.

https://inf.run/jBYVR

 

λŒ€κ·œλͺ¨ νŠΈλž˜ν”½ 처리λ₯Ό μœ„ν•œ λΆ€ν•˜ν…ŒμŠ€νŠΈ μž…λ¬Έ/μ‹€μ „ κ°•μ˜ | JSCODE λ°•μž¬μ„± - μΈν”„λŸ°

JSCODE λ°•μž¬μ„± | , [사진]🀬 에라이, λͺ» ν•΄λ¨Ήκ² λ„€!λΉ„μ „κ³΅μžλ‘œ κ°œλ°œμ„ μ‹œμž‘ν•΄ μ—¬λŸ¬ νšŒμ‚¬μ—μ„œ CTO둜 ν™œλ™ν•˜λ‹€κ°€, ν˜„μž¬λŠ” ꡐ윑자둜 ν™œλ™ν•˜κ³  μžˆλŠ” λ°•μž¬μ„±μ΄λΌκ³  ν•©λ‹ˆλ‹€. 저도 λΉ„μ „κ³΅μžλ‘œ κ°œλ°œμ„ μ‹œμž‘

www.inflearn.com

 


νŠΈλž˜ν”½ 증가에 λ”°λ₯Έ μ‹œμŠ€ν…œ 섀계 및 ν™•μž₯ 방법

병λͺ©μ§€μ μ΄ μ–΄λ””μ„œ λ°œμƒν•˜λŠλƒμ— 따라 μ„±λŠ₯ κ°œμ„ μ˜ 방법이 달라진닀. 

이 방법에 λŒ€ν•΄ λŒ€λž΅μ μœΌλ‘œ μ•Œλ©΄ μ„±λŠ₯ κ°œμ„ μ„ μˆ˜μ›”ν•˜κ²Œ ν•  수 μžˆλ‹€.

 

βœ… κ°€μž₯ κ°„λ‹¨ν•œ ν˜•νƒœ

μœ„ 그림은 EC2 μ„œλ²„ ν•œ λŒ€μ— FE, BE, DB κ΄€λ ¨ ν”„λ‘œκ·Έλž¨μ„ λ‹€ μ‹€ν–‰μ‹œν‚€λŠ” ν˜•νƒœμ˜ ꡬ성이닀.

μž₯점은 ν•˜λ‚˜μ˜ μ„œλ²„μ—μ„œ λ¦¬μ†ŒμŠ€κ°€ λ‹€ μžˆμ–΄μ„œ 관리 / μ‘°μž‘μ΄ 쉽닀.

ν•˜μ§€λ§Œ 이 κ΅¬μ„±μœΌλ‘œμΈν•΄ μ‹€μ œ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜λ‹€ 보면 DB κ°€ 생각보닀 λ§Žμ€ μ»΄ν“¨νŒ… μžμ›(CPU, λ©”λͺ¨λ¦¬,λ””μŠ€ν¬)λ₯Ό μ‚¬μš©ν•œλ‹€. DB둜 인해 μ„±λŠ₯에 μ•…μ˜ν–₯을 쀄 수 있기 λ•Œλ¬Έμ— λ³„λ„μ˜ μ„œλ²„λ₯Ό λΆ„λ¦¬ν•˜λ €λŠ” ν˜•μ‹μ„ 많이 κ°€μ§„λ‹€.

 

βœ… DB 뢄리

μ›Ή μ„œλ²„μ™€ DBλ₯Ό λΆ„λ¦¬ν•œ 인프라 ꡬ성

νŠΈλž˜ν”½μ΄ λ§Žμ•„μ§€λ©΄ μ •μ νŒŒμΌμ„ μ œκ³΅ν•˜λŠ” λΆ€λΆ„μ—μ„œ λ¬Έμ œκ°€ 될 κ°€λŠ₯성이 크닀.

일반적으둜 정적 νŒŒμΌμ€ μš©λŸ‰μ΄ 크기 λ•Œλ¬Έμ— μ»΄ν“¨νŒ… μžμ›μ„ 많이 μ†Œλͺ¨ν•΄μ„œ μ„œλ²„μ— κ³ΌλΆ€ν•˜κ°€ 걸릴 κ°€λŠ₯성이 크닀.

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 정적 νŒŒμΌμ„ μ œκ³΅ν•˜λŠ” μ„œλ²„λ§Œ λ³„λ„λ‘œ λΆ„λ¦¬ν•˜λŠ” ꡬ성을 많이 κ°–λŠ”λ‹€.

 

βœ… μ •적 파일 μ„œλ²„ 뢄리

 

S3λ₯Ό ν™œμš©ν•΄ 정적 νŒŒμΌλ§Œμ„ μ œκ³΅ν•˜λŠ” λ³„λ„μ˜ μ„œλ²„λ₯Ό κ΅¬μΆ•ν–ˆλ‹€. 

ν•˜μ§€λ§Œ 정적 νŒŒμΌμ€ μš©λŸ‰μ΄ 큰 κ²½μš°κ°€ 많기 λ•Œλ¬Έμ—, 정적 νŒŒμΌμ„ μ œκ³΅λ°›λŠ” κ³³μ΄λž‘ 거리가 λ©€λ©΄ λ©€μˆ˜λ‘ 응닡 속도가 였래 걸릴 수 밖에 μ—†λ‹€.

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μΊμ‹±μ˜ 원리가 적용된 CDN을 ν™œμš©ν•΄μ„œ 정적 파일 전솑 속도λ₯Ό ν–₯μƒμ‹œν‚¨λ‹€.

 

βœ… CDN μ„œλ²„ ν™œμš©

 

이제 S3에 λ°”λ‘œ μ ‘μ†ν•΄μ„œ νŒŒμΌμ„ λ°›μ•„μ˜€λŠ” 것이 μ•„λ‹ˆλΌ CloudFront λ₯Ό 톡해 κ°€κΉŒμš΄ μž„μ‹œμ €μž₯μ†Œμ—μ„œ νŒŒμΌμ„ κ°€μ Έμ˜€κ²Œ 됐닀.

μ΄λ²ˆμ—λŠ” μ‚¬μš©μžκ°€ λ§Žμ•„μ Έ EC2κ°€ 병λͺ©μ§€μ μ΄ λ˜μ—ˆλ‹€. 이 κ²½μš°μ—λŠ” EC2λ₯Ό ν™•μž₯ν•΄μ•Ό ν•œλ‹€ (수직적 ν™•μž₯ vs μˆ˜ν‰μ  ν™•μž₯)

보톡 μ‹œμŠ€ν…œ μ΄μ€‘ν™”μ˜ μž₯점 λ•Œλ¬Έμ— EC2λ₯Ό ν™•μž₯ν•  λ•ŒλŠ” μˆ˜ν‰μ  ν™•μž₯의 방식을 많이 ν™œμš©ν•œλ‹€.

 

βœ… μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ˜ μˆ˜ν‰μ  ν™•μž₯

 

EC2 μ„œλ²„λ₯Ό μ—¬λŸ¬λŒ€λ‘œ λŠ˜λ Έμ§€λ§Œ μ‚¬μš©μžλ³΄κ³  μ—¬λŸ¬ μ„œλ²„μ— 골고루 μ•Œμ•„μ„œ μš”μ²­μ„ 보내라고 μ‹œν‚¬ μˆ˜μ—†λ‹€.

μ‚¬μš©μžμ˜ μš”μ²­μ„ μ—¬λŸ¬λŒ€μ˜ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ— 골고루 μ „λ‹¬ν•˜κΈ° μœ„ν•œ μž₯μΉ˜κ°€ ν•„μš”ν•˜λ‹€. λ‘œλ“œλ°ΈλŸ°μ„œλ₯Ό λ„μž…ν•΄λ³΄μž.

 

βœ… λ‘œλ“œ λ°ΈλŸ°μ„œ λ„μž…

 

λ‘œλ“œ λ°ΈλŸ°μ„œμ˜ λ„μž…μœΌλ‘œ μ—¬λŸ¬λŒ€μ˜ EC2에 골고루 νŠΈλž˜ν”½μ„ λΆ„μ‚°μ‹œν‚¬ 수 있게 됐닀.

κ·ΈλŸ¬λ‚˜ λŠ˜μ–΄λ‚œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ— 따라 λ§Žμ€ 수의 μš”μ²­μ΄ DB에 λͺ°λ¦¬κ²Œ λœλ‹€.

 

DB 병λͺ©ν˜„상 λ°œμƒ μ‹œ 1️⃣ DB 자체적으둜 μ„±λŠ₯ κ°œμ„ ν•  수 μžˆλŠ” 뢀뢄은 μ—†λŠ”μ§€λ₯Ό λ¨Όμ € κ³ λ €ν•œλ‹€.

  • 인덱슀 ν™œμš©
  • μ—­μ •κ·œν™”
  • SQL νŠœλ‹

이 λ°©μ‹μœΌλ‘œ μ΅œλŒ€ν•œ κ°œμ„ ν–ˆλŠ”λ°λ„ DB 에 병λͺ© ν˜„μƒμ΄ λ°œμƒν•˜λ©΄ 2️⃣ μˆ˜ν‰μ  ν™•μž₯ 방식을 κ³ λ €ν•œλ‹€.

 

μ™œ 수직적 ν™•μž₯ 방식이 μ•„λ‹ˆκ³  μˆ˜ν‰μ  ν™•μž₯λ°©μ‹μΌκΉŒ ? 

DBλ₯Ό μ—¬λŸ¬κ°œ λ‘”λ‹€λ©΄(μˆ˜ν‰μ  ν™•μž₯) λͺ¨λ“  DB에 데이터λ₯Ό λ³΅μ‚¬ν•΄μ„œ 관리해야 ν•œλ‹€.

그럼 데이터 변경이 μΌμ–΄λ‚ λ•Œλ§ˆλ‹€ μ—¬λŸ¬λŒ€μ˜ DB κ°€ 동기화 μž‘μ—…μ„ ν•΄μ•Όν•œλ‹€.

동기화 μž‘μ—…μ€ DB μ„±λŠ₯ μ €ν•˜λ₯Ό μœ λ°œν•˜μ—¬ μž₯점보닀 단점이 더 큰 ν™•μž₯ 방식이라고 μ–˜κΈ°λ₯Ό ν•˜λŠ” νŽΈμ΄λ‹€ (DB λ₯Ό 늘리면 늘릴수둝 λ™κΈ°ν™”ν•˜λŠ”λ° μ‹œκ°„μ΄ 더 였래 κ±Έλ €μ„œ κ²°κ³Όμ μœΌλ‘œλŠ” 크게 κ°œμ„ λ˜μ§€ μ•ŠμŒ. 그리고 λ¬Έμ œλŠ” 더 많이 λ°œμƒν•¨) 이런 이유 λ•Œλ¬Έμ— μˆ˜ν‰μ  ν™•μž₯ 방식 보닀 수직적 ν™•μž₯의 λ°©μ‹μœΌλ‘œ μ„±λŠ₯을 κ°œμ„ ν•œλ‹€.

 

1️⃣ , 2️⃣ μ΄ν›„에도 좔가적인 μ„±λŠ₯ κ°œμ„ μ΄ ν•„μš”ν•˜λ‹€λ©΄ 3️⃣ μ½κΈ°μ „μš© DB(Read Replica) λ„μž…μ„ κ³ λ €ν•œλ‹€.

 

βœ… μ½κΈ°μ „μš© λ°μ΄ν„°λ² μ΄μŠ€(Read Replica) λ„μž…

 

μ •λ°€ν•œ 데이터 동기화가 ν•„μš”μ—†λŠ” 쿼리λ₯Ό μ‹€ν–‰μ‹œν‚¬λ•Œ 읽기 μ „μš© DBλ₯Ό 많이 ν™œμš©ν•œλ‹€.

γ„΄ μ •λ°€ν•œ 데이터 동기화가 ν•„μš”μ—†λŠ” μΏΌλ¦¬λž€ ?

γ„΄ 예λ₯Ό λ“€μ–΄, κ²Œμ‹œκΈ€μ„ μž‘μ„±ν•˜κ³ λ‚˜μ„œ μž‘μ„±λœ κ²Œμ‹œκΈ€μ„ λ°”λ‘œ 보지 μ•ŠμœΌλ©΄ ν°μΌλ‚˜λ‚˜ ? κ·Έλ ‡μ§€ μ•Šλ‹€. κ²Œμ‹œκΈ€ μž‘μ„± ν›„ 10초 μžˆλ‹€κ°€ 글을 봐도 큰 λ¬Έμ œκ°€ μ—†λ‹€. 이런 λ°μ΄ν„°μ˜ 경우 읽기 μ „μš© DB λ₯Ό μ‚¬μš©ν•˜λŠ” 것이닀. 

 

이 같은 λ°©μ‹μœΌλ‘œ DBλ₯Ό μ‚¬μš©ν•˜λ‹€λ³΄λ©΄ λΉ„μš©μ΄ λ¬Έμ œκ°€ λœλ‹€. AWS 의 RDSλŠ” λΉ„μ‹Ό μžμ›μ— μ†ν•˜κΈ° λ•Œλ¬Έμ— λΉ„μš© 절감과 μ„±λŠ₯ ν–₯상을 μœ„ν•΄ μΊμ‹œ μ„œλ²„λ₯Ό 많이 ν™œμš©ν•œλ‹€.

 

βœ… μΊμ‹œ μ„œλ²„ λ„μž…

λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό ν™•μž₯ν•˜κ³  λ°”λ‘œ 동기화 ν•  ν•„μš” μ—†λŠ” 것듀은 μΊμ‹œλ₯Ό 톡해 μ‘°νšŒν•  수 μžˆλ„λ‘ λ§Œλ“ λ‹€.

 

μ΄λ ‡κ²Œ ν–ˆμ„ λ•Œ μ„±λŠ₯에 λΆ€ν•˜κ°€ 쀄어듀 수 μžˆλŠ” μ΄μœ λŠ” 

κΈ°μ‘΄μ—” 100만건의 μš”μ²­ 처리λ₯Ό Master, Replica λ‘κ°œμ˜ DBκ°€ λ‚˜λˆ μ„œ 처리λ₯Ό ν–ˆλ‹€λ©΄ 이젠 μΊμ‹œ μ„œλ²„κ°€ ν•¨κ»˜ λ‚˜λˆ μ„œ κ°€μ Έκ°ˆ 수 있게 되기 λ•Œλ¬Έμ΄λ‹€. 

 

μΊμ‹œ μ„œλ²„λ₯Ό λ„μž…ν•¨μœΌλ‘œμ„œ 데이터 쑰회 μš”μ²­μ˜ 응닡을 DB μ„œλ²„μ™€ μΊμ‹œ μ„œλ²„κ°€ λ‚˜λˆ μ„œ μ²˜λ¦¬ν•  수 있게 λœλ‹€. 이처럼 μΊμ‹œ μ„œλ²„λ₯Ό ν™œμš©ν•˜λ©΄ DBμ„œλ²„ λΆ€ν•˜λ₯Ό 쀄일 수 있고, 전체 Throughput 이 μ¦κ°€ν•˜κ²Œ λœλ‹€.

 

 

병λͺ© 지점에 λ”°λ₯Έ μ„±λŠ₯ κ°œμ„  방법

μœ„μ—μ„œ μ„€λͺ…ν•œ μ‹œμŠ€ν…œ 섀계 및 ν™•μž₯ λ°©λ²•λ§Œ μ•Œκ³  μžˆμ–΄λ„ μΆ©λΆ„ν•˜λ‹€.
μ΄λ²ˆμ—λŠ” 병λͺ© μ§€μ μ˜ κ΄€μ μœΌλ‘œ μ„±λŠ₯ κ°œμ„  방법을 μ •λ¦¬ν•΄λ³΄μž

 

1. EC2 κ°€ 병λͺ© 지점일 경우

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ—μ„œ λΉ„νš¨μœ¨μ μΈ 둜직 κ°œμ„ ν•˜κΈ°
  • μ •μ νŒŒμΌ μ„œλ²„(S3, CloudFront) λΆ„λ¦¬ν•˜κΈ°
  • λ‘œλ“œλ°ΈλŸ°μ„œ(ELB) λ₯Ό ν™œμš©ν•΄ μˆ˜ν‰μ  ν™•μž₯ν•˜κΈ°
  • 수직적 ν™•μž₯ν•˜κΈ°

 

2. RDSκ°€ 병λͺ©μ§€μ μΌ 경우

  • λΉ„νš¨μœ¨μ μΈ 쿼리 κ°œμ„ 
  • μ½κΈ°μ „μš© DB λ„μž…
  • μΊμ‹œ μ„œλ²„ 도μž