우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»‍πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀

Eager To Learn 🌌

κ°œλ°œμ„œμ /가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초

λŒ€κ·œλͺ¨ νŠΈλž˜ν”½μ„ 감당할 수 μžˆλŠ” μ‹œμŠ€ν…œ 섀계λ₯Ό μœ„ν•œ 기초 지식

2023. 8. 22. 17:09

λ„μ„œ 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 λ₯Ό 보고 μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

 


 

λŒ€κ·œλͺ¨ μ‚¬μš©μžλ₯Ό 감당할 수 μžˆλŠ” μ‹œμŠ€ν…œμ„ μ„€κ³„ν•˜κΈ° μœ„ν•œ 지식듀에 λŒ€ν•΄μ„œ μ‚΄νŽ΄λ³΄μž.

 

πŸ“Œ RDBMS vs NoSQL

RDBMSλŠ” 자료λ₯Ό ν…Œμ΄λΈ”κ³Ό μ—΄, 칼럼으둜 ν‘œν˜„ν•œλ‹€.

 

그리고 SQL을 μ΄μš©ν•΄ ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό, κ·Έ 관계에 따라 JOIN ν•˜μ—¬ ν•©μΉ  수 μžˆλ‹€.

 

πŸ’‘ μ •ν˜•ν™” 된 μŠ€ν‚€λ§ˆμ— 따라 κ΅¬μ‘°ν™”λ˜μ–΄ μ €μž₯되기 λ•Œλ¬Έμ—, λ°μ΄ν„°μ˜ 일관성과 무결성을 보μž₯ν•  수 μžˆλ‹€.

 

NoSQL은 λŒ€λŸ‰μ˜ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ”λ° νŠΉν™”λ˜μ–΄ μžˆλ‹€.

 

πŸ’‘ λ°μ΄ν„°μ˜ ꡬ쑰가 λΉ„μ •ν˜•μ΄κ±°λ‚˜ μ•„μ£Ό λ§Žμ€ μ–‘μ˜ 데이터λ₯Ό μ €μž₯ν•  ν•„μš”κ°€ μžˆμ„ λ•Œ μ‚¬μš©ν•˜λ©΄ μ’‹λ‹€.

 

 

πŸ“Œ Scale Up vs Scale Out

Scale Up 은 μ„œλ²„μ— 고사양 μžμ›μ„ μΆ”κ°€ν•˜λŠ” ν–‰μœ„μ΄κ³ , Scale Out은 더 λ§Žμ€ μ„œλ²„λ₯Ό μΆ”κ°€ν•˜μ—¬ μ„±λŠ₯을 κ°œμ„ ν•˜λŠ” ν–‰μœ„μ΄λ‹€.

 

🚨 Scale Up은 ν•œ λŒ€μ˜ μ„œλ²„μ— CPUλ‚˜ λ©”λͺ¨λ¦¬λ₯Ό λ¬΄ν•œλŒ€ 증섀할 수 μžˆλŠ” 방법이 μ—†κ³ , μ„œλ²„κ°€ ν•œ λŒ€ 이기 λ•Œλ¬Έμ— μž₯애에 λŒ€μ²˜ν•˜κΈ° μ–΄λ ΅λ‹€.

 

πŸ’‘ λ”°λΌμ„œ, λŒ€κ·œλͺ¨ μ‚¬μš©μžκ°€ μ‚¬μš©ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—λŠ” Scale Out이 μ ν•©ν•˜λ‹€.

 

 

πŸ“Œ μ„œλ²„ · DB 닀쀑화와 λ‘œλ“œ λ°ΈλŸ°μ„œ

 

πŸ’‘ μ„œλ²„μ˜ 뢄산이 ν•„μš”ν•œ κ²½μš°λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

 

  1. ν•œ μ„œλ²„μ— νŠΈλž˜ν”½μ΄ λͺ°λ¦¬λ©΄, μ‚¬μš©ν•  수 μžˆλŠ” μžμ›μ΄ ν•œμ •μ μ΄κΈ° λ•Œλ¬Έμ— μ—¬λŸ¬ μš”μ²­μ„ μ²˜λ¦¬ν•˜λ €λ‹€κ°€ 병λͺ©ν˜„상이 μƒκΈ°κ±°λ‚˜ 응닡속도가 느렀질 수 μžˆλ‹€.
  2. μ‹œμŠ€ν…œμ— λ¬Έμ œκ°€ 생겨 μ„œλ²„κ°€ λ‹€μš΄λ˜λŠ” 경우, 데이터λ₯Ό μ½κ±°λ‚˜ μ‚¬μš©μžκ°€ μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λŠ” κ²½μš°κ°€ λ°œμƒν•œλ‹€.

 

πŸ’‘ DB 뢄산이 ν•„μš”ν•œ 경우 μ—­μ‹œ μœ μ‚¬ν•˜λ‹€. μž₯μ•  λŒ€μ²˜μ™€ μ„±λŠ₯ ν–₯상을 μœ„ν•΄ λΆ„μ‚°ν•œλ‹€.

 

μ“°κΈ° μ—°μ‚°λ§Œ μˆ˜ν–‰ν•˜λŠ” Master DB 와 읽기 μ—°μ‚°λ§Œ μˆ˜ν–‰ν•˜λŠ” Slave DB 둜 λΆ„λ¦¬ν•œλ‹€.

 

λŒ€λΆ€λΆ„μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 보톡 쑰회 μž‘μ—…μ΄ λΉˆλ²ˆν•˜κΈ° λ•Œλ¬Έμ— Slave DB의 μˆ˜κ°€ 일반적으둜 λ§Žκ²Œλ” μ„€κ³„ν•œλ‹€.

 

 

πŸ’‘ λ‘œλ“œ λ°ΈλŸ°μ„œλŠ” νŠΈλž˜ν”½ λΆ€ν•˜ λΆ„μ‚°κ³Ό λ³΄μ•ˆ ν–₯μƒμ˜ 역할을 ν•œλ‹€.

 

μ‚¬μš©μžλŠ” λ‘œλ“œ λ°ΈλŸ°μ„œμ˜ 곡개 IP μ£Όμ†Œλ‘œ μ ‘μ†ν•œλ‹€. 그리고 μ„œλ²„κ°„ 톡신은 λ³΄μ•ˆμ„ μœ„ν•΄ 같은 λ„€νŠΈμ›Œν¬μ— μ†ν•œ μ„œλ²„ μ‚¬μ΄μ˜ ν†΅μ‹ μ—λ§Œ μ“°μ΄λŠ” 사섀 IP μ£Όμ†Œλ₯Ό μ΄μš©ν•œλ‹€.

 

 

πŸ“Œ μΊμ‹œ

μΊμ‹œλŠ” 자주 μ‚¬μš©λ˜λŠ” 데이터λ₯Ό λ©”λͺ¨λ¦¬ μ•ˆμ— 두어, λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•˜λŠ” 횟수λ₯Ό 쀄여 응닡속도 κ°œμ„ κ³Ό λ°μ΄ν„°λ² μ΄μŠ€ λΆ€ν•˜λ₯Ό 쀄일 수 μžˆλ‹€.

 

πŸ’‘ DB에 μžˆλŠ” λ°μ΄ν„°μ˜ 갱신은 자주 μΌμ–΄λ‚˜μ§€ μ•Šμ§€λ§Œ μ°Έμ‘°(쑰회)λŠ” λΉˆλ²ˆν•˜κ²Œ 일어날 λ•Œ μ‚¬μš©ν•˜λ©΄ μ’‹λ‹€.

 

🚨 단, νœ˜λ°œμ„± λ©”λͺ¨λ¦¬μ— λ‘λ―€λ‘œ μ˜μ†μ μœΌλ‘œ 보관할 ν•„μš”κ°€ μžˆλŠ” 데이터λ₯Ό λ‘λŠ” 것은 μ’‹μ§€ μ•Šλ‹€.

 

 

그리고, μΊμ‹œλ₯Ό κ΄€λ¦¬ν•˜λŠ” 정책을 잘 μ„Έμ›Œμ•Ό ν•œλ‹€.

 

μΊμ‹œ 만료 κΈ°ν•œμ΄ λ„ˆλ¬΄ 짧으면, 데이터 베이슀λ₯Ό λ„ˆλ¬΄ 자주 읽게 λ˜μ–΄ μ„±λŠ₯ ν–₯상 이점을 μ–»κΈ° νž˜λ“€κ³  

 

μΊμ‹œ 만료 κΈ°ν•œμ΄ λ„ˆλ¬΄ κΈΈλ©΄, DB 데이터와 차이가 λ°œμƒν•  수 μžˆλ‹€. 

 

λ”°λΌμ„œ, μ €μž₯μ†Œμ˜ 원본을 κ°±μ‹ ν•˜λŠ” μ—°μ‚°κ³Ό μΊμ‹œλ₯Ό κ°±μ‹ ν•˜λŠ” 연산이 단일 νŠΈλžœμž­μ…˜μœΌλ‘œ μ²˜λ¦¬λ˜μ–΄μ•Ό 일관성을 μœ μ§€ν•  수 μžˆλ‹€.

 

 

πŸ“Œ CDN

 

CDN은 정적 μ½˜ν…μΈ λ₯Ό μΊμ‹œν•˜μ—¬ μ „μ†‘ν•˜λŠ”λ° μ“°μ΄λŠ” λ„€νŠΈμ›Œν¬μ΄λ‹€.

 

μ–΄λ–€ μ‚¬μš©μžκ°€ μ›Ήμ‚¬μ΄νŠΈμ— λ°©λ¬Έν•˜λ©΄, κ·Έ μ‚¬μš©μžμ—κ²Œ κ°€μž₯ κ°€κΉŒμš΄ CDN μ„œλ²„κ°€ 정적 μ½˜ν…μΈ λ₯Ό μ „λ‹¬ν•œλ‹€.

 

아직 μΊμ‹±λ˜μ–΄μžˆμ§€ μ•Šμ€ 경우, μ„œλ²„μ— μš”μ²­ν•˜μ—¬ νŒŒμΌμ„ κ°€μ Έμ˜€κ³  캐싱해두고 μ‘λ‹΅ν•œλ‹€.

 

μ΄λ ‡κ²Œ ν•¨μœΌλ‘œμ„œ 정적 μ½˜ν…μΈ (이미지, js 파일, css 파일) 등을 λΉ λ₯΄κ²Œ μ‘λ‹΅ν•˜κ³  WAS λΆ€ν•˜λ₯Ό 쀄여쀄 수 μžˆλ‹€.

 

 

πŸ“Œ λ¬΄μƒνƒœ(Stateless) μ•„ν‚€ν…μ²˜

μ‚¬μš©μžμ˜ HTTP μš”μ²­μ€ μ–΄λ–€ WASλ‘œλ„ 전달될 수 μžˆλ‹€.

 

🚨 μƒνƒœ 정보λ₯Ό WASκ°€ λ³΄κ΄€ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ”, 같은 μ‚¬μš©μžμ˜ μš”μ²­μ€ 항상 같은 WAS둜 μ „μ†‘λ˜λ„λ‘ μ„€μ •ν•˜κ±°λ‚˜ WAS κ°„ μƒνƒœ 정보λ₯Ό κ³΅μœ ν•  수 μžˆλ„λ‘ ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— μ„œλ²„μ— 뢀담을 μ€€λ‹€.

 

λ”°λΌμ„œ, WASλŠ” μ‚¬μš©μžμ˜ μƒνƒœλ₯Ό λ³΄κ΄€ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ‚¬μš©μžμ˜ μƒνƒœ 정보가 ν•„μš”ν•  경우, 곡유 μ €μž₯μ†Œλ‘œλΆ€ν„° 데이터λ₯Ό κ°€μ Έμ˜€λŠ” λ°©μ‹μœΌλ‘œ ν•˜κ³  이λ₯Ό λ¬΄μƒνƒœ μ•„ν‚€νƒμ²˜λΌκ³  ν•œλ‹€.

 

    우규이인우윀
    우규이인우윀
    개발자 κΏˆλ‚˜λ¬΄

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”