Database #SQL #NoSQL #Scaling

κ³½μ„œν˜„Β·2022λ…„ 11μ›” 1일
0

SQL과 NoSQL의 차이

SQL(κ΄€κ³„ν˜• DB)

πŸ’‘ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—λŠ” 핡심적인 두가지 νŠΉμ§•μ΄ μžˆλ‹€.

  1. λ°μ΄ν„°λŠ” 정해진 데이터 μŠ€ν‚€λ§ˆμ— 따라 ν…Œμ΄λΈ”μ— μ €μž₯λœλ‹€.

    • λ°μ΄ν„°λŠ” ν…Œμ΄λΈ”μ— λ ˆμ½”λ“œλ‘œ μ €μž₯λ˜λŠ”λ°, 각 ν…Œμ΄λΈ”λ§ˆλ‹€ λͺ…ν™•ν•˜κ²Œ μ •μ˜λœ ꡬ쑰(ν•„λ“œλͺ…κ³Ό λ°μ΄ν„°νƒ€μž…) κ°€ μžˆλ‹€.
    • λ”°λΌμ„œ μŠ€ν‚€λ§ˆλ₯Ό μ€€μˆ˜ν•˜μ§€ μ•Šμ€ λ ˆμ½”λ“œλŠ” ν…Œμ΄λΈ”μ— μΆ”κ°€ν•  수 μ—†λ‹€.
  2. λ°μ΄ν„°λŠ” 관계λ₯Ό 톡해 μ—¬λŸ¬ ν…Œμ΄λΈ”μ— λΆ„μ‚°λœλ‹€.

    • λ°μ΄ν„°μ˜ 쀑볡을 ν”Όν•˜κΈ° μœ„ν•΄ 관계λ₯Ό μ΄μš©ν•¨
    • ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μ—μ„œ 쀑볡 없이 ν•˜λ‚˜μ˜ λ°μ΄ν„°λ§Œμ„ κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— λ‹€λ₯Έ ν…Œμ΄λΈ”μ—μ„œ λΆ€μ •ν™•ν•œ 데이터λ₯Ό λ‹€λ£° μœ„ν—˜μ΄ μ—†μ–΄μ§„λ‹€λŠ” μž₯점이 μžˆλ‹€.

NoSQL(λΉ„κ΄€κ³„ν˜• DB)

πŸ’‘κ΄€κ³„ν˜• DBμ™€λŠ” 달리 μŠ€ν‚€λ§ˆμ™€ 관계가 μ—†λ‹€λŠ” νŠΉμ§•μ΄ μžˆλ‹€.

NoSQLμ—μ„œλŠ” λ ˆμ½”λ“œλ₯Ό λ¬Έμ„œ(document)라고 λΆ€λ₯Έλ‹€.
λ¬Έμ„œλŠ” JSONκ³Ό λΉ„μŠ·ν•œ ν˜•νƒœλ‘œ, κ΄€κ³„ν˜• DB처럼 μ—¬λŸ¬ ν…Œμ΄λΈ”μ— λ‚˜λˆ„μ–΄ λ‹΄λŠ”κ²ƒμ΄ μ•„λ‹ˆλΌ κ΄€λ ¨ 데이터λ₯Ό λ™μΌν•œ μ»¬λ ‰μ…˜μ— λ„£λŠ”λ‹€.

=> μ‘°μΈμ΄λΌλŠ” κ°œλ…μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 이유!!

쑰인을 잘 μ‚¬μš©ν•˜μ§€ μ•Šκ³  자주 λ³€κ²½λ˜μ§€ μ•ŠλŠ” 데이터일 λ•Œ NoSQL을 μ“°λ©΄ μƒλ‹Ήνžˆ νš¨μœ¨μ μ΄λ‹€.

μž₯점:

  • 데이터 λΆ„μ‚°, λŒ€μš©λŸ‰ 데이터 μ²˜λ¦¬μ— νŠΉν™”λ˜μ–΄ 있으며 데이터에 λŒ€ν•œ μΊμ‹œκ°€ ν•„μš”ν•œ κ²½μš°μ— μ ν•©ν•˜λ‹€. λ˜ν•œ, λ°°μ—΄ ν˜•μ‹μ˜ 데이터λ₯Ό κ³ μ†μœΌλ‘œ μ²˜λ¦¬ν•  κ²½μš°μ— μ ν•©ν•˜λ‹€.
  • λ°μ΄ν„°λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν•„μš”λ‘œ ν•˜λŠ” ν˜•μ‹μœΌλ‘œ μ €μž₯λ˜λ―€λ‘œ 데이터 μ½μ–΄μ˜€λŠ” 속도 빨라진닀.
    λ°°μ—΄ ν˜•μ‹μ˜ 데이터λ₯Ό κ³ μ†μœΌλ‘œ μ²˜λ¦¬ν•  κ²½μš°μ— μ ν•©ν•˜λ‹€. _ 이게 무슨 말인지 μ•„μ‹œλŠ” λΆ„

단점:

  • μœ μ—°μ„±μœΌλ‘œ 인해 데이터 ꡬ쑰 결정을 미루게 될 수 있음
  • 데이터 쀑볡을 계속 μ—…λ°μ΄νŠΈ ν•΄μ•Ό 함
  • 데이터가 μ—¬λŸ¬ μ»¬λ ‰μ…˜μ— μ€‘λ³΅λ˜μ–΄ 있기 λ•Œλ¬Έμ— μˆ˜μ • μ‹œ λͺ¨λ“  μ»¬λ ‰μ…˜μ—μ„œ μˆ˜ν–‰ν•΄μ•Ό 함 (SQLμ—μ„œλŠ” 쀑볡 데이터가 μ—†μœΌλ―€λ‘œ ν•œλ²ˆλ§Œ μˆ˜ν–‰μ΄ κ°€λŠ₯)

정리

πŸ’‘κ΄€κ³„ν˜• DBλŠ” 계측적 κ΅¬μ‘°λ‚˜ κ·Έλž˜ν”„ ꡬ쑰와 같은 데이터 λͺ¨λΈμ„ μ €μž₯ν•˜κ³  μ²˜λ¦¬ν•˜κΈ°μ—λŠ” μ ν•©ν•˜μ§€ μ•Šμ§€λ§Œ, NoSQL은 λ‹€μ–‘ν•œ 데이터 λͺ¨λΈλ§ 기법을 ν†΅ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆλ‹€.
πŸ’‘κ΄€κ³„ν˜• DBλŠ” 데이터 λͺ¨λΈμ„ μ •μ˜ν•œ 이후에 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— λ§žλŠ” 쿼리λ₯Ό κ°œλ°œν•˜μ§€λ§Œ NoSQL은 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— ν•„μš”ν•œ 쿼리와 μ„±λŠ₯을 μ •μ˜ν•œ 이후에 μš”κ΅¬μ‚¬ν•­μ— λΆ€ν•©ν•˜λ„λ‘ 데이터 λͺ¨λΈμ„ κ΅¬μ„±ν•œλ‹€λŠ” 차이가 있음

ν™•μž₯(Scaling)

  • 수직적 ν™•μž₯(Scale-up): λ‹¨μˆœνžˆ DB μ„œλ²„μ˜ μ„±λŠ₯을 ν–₯상 μ‹œν‚€λŠ” 것(CPU μ—…κ·Έλ ˆμ΄λ“œ)
  • μˆ˜ν‰μ  ν™•μž₯(Scale-out): 더 λ§Žμ€ μ„œλ²„κ°€ μΆ”κ°€λ˜κ³  DBκ°€ μ „μ²΄μ μœΌλ‘œ 뢄산됨을 μ˜λ―Έν•¨(ν•˜λ‚˜μ˜ DBμ—μ„œ μž‘λ™ν•˜μ§€λ§Œ μ—¬λŸ¬ ν˜ΈμŠ€νŠΈμ—μ„œ μž‘λ™ν•¨)

κ·ΈλŸ¬λ‚˜ 데이터 μ €μž₯λ°©μ‹μœΌλ‘œ 인해 SQL DBλŠ” 일반적으둜 수직적 ν™•μž₯만 지원함
- NoSQL은 μˆ˜ν‰, 수직 ν™•μž₯ λͺ¨λ‘ κ°€λŠ₯!!

λ°μ΄ν„°μ˜ ν˜•μ‹μ— 따라 SQL, NoSQL을 선택해야 ν•œλ‹€.

SQL μ‚¬μš©μ΄ μ ν•©ν•œ 경우

  • 관계λ₯Ό λ§Ίκ³  μžˆλŠ” 데이터가 자주 λ³€κ²½λ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 경우
  • 변경될 여지가 μ—†μ§€λ§Œ λͺ…ν™•ν•œ μŠ€ν‚€λ§ˆκ°€ μ‚¬μš©μžμ™€ 데이터에 μ€‘μš”ν•œ 경우

NoSQL μ‚¬μš©μ΄ μ ν•©ν•œ 경우

  • μ •ν™•ν•œ 데이터 ꡬ쑰λ₯Ό μ•Œ 수 μ—†κ±°λ‚˜ λ³€κ²½/ν™•μž₯ 될 수 μžˆλŠ” 경우
  • 읽기λ₯Ό 자주 ν•˜μ§€λ§Œ, 데이터 변경은 자주 μ—†λŠ” 경우
  • λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μˆ˜ν‰μœΌλ‘œ ν™•μž₯ν•΄μ•Ό ν•˜λŠ” 경우 (λ§‰λŒ€ν•œ μ–‘μ˜ 데이터λ₯Ό 닀뀄야 ν•˜λŠ” 경우)

0개의 λŒ“κΈ€