week10_incheol_4 - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

111

SQL

  • SQL은 'ꡬ쑰화 된 쿼리 μ–Έμ–΄ (Structured Query Language)'의 μ•½μžμ΄λ‹€.
  • νŠΉμ • μœ ν˜•μ˜ λ°μ΄ν„°λ² μ΄μŠ€μ™€ μƒν˜Έ μž‘μš©ν•˜λŠ” 데 μ‚¬μš© ν•˜λŠ” 쿼리 언어이닀.
  • SQL을 μ‚¬μš©ν•˜λ©΄ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œ(RDBMS)μ—μ„œ 데이터λ₯Ό μ €μž₯, μˆ˜μ •, μ‚­μ œ 및 검색 ν•  수 μžˆλ‹€.

RDBMS νŠΉμ§•

  • λ°μ΄ν„°λŠ” 정해진(μ—„κ²©ν•œ) 데이터 μŠ€ν‚€λ§ˆ (= structure)λ₯Ό 따라 λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ— μ €μž₯λœλ‹€.
  • λ°μ΄ν„°λŠ” 관계λ₯Ό ν†΅ν•΄μ„œ μ—°κ²°λœ μ—¬λŸ¬κ°œμ˜ ν…Œμ΄λΈ”μ— λΆ„μ‚°λœλ‹€.

μ—„κ²©ν•œ μŠ€ν‚€λ§ˆ

  • λ°μ΄ν„°λŠ” ν…Œμ΄λΈ”μ— λ ˆμ½”λ“œλ‘œ μ €μž₯되며 각 ν…Œμ΄λΈ”μ—λŠ” λͺ…ν™•ν•˜κ²Œ μ •μ˜λœ ꡬ쑰(schema)이 μžˆλ‹€.
  • μŠ€ν‚€λ§ˆλ₯Ό μ€€μˆ˜ν•˜μ§€ μ•ŠλŠ” λ ˆμ½”λ“œλŠ” μΆ”κ°€ν•  수 μ—†λ‹€.

데이터 관계

  • μ •κ·œν™”λ₯Ό 톡해 데이터듀을 μ—¬λŸ¬κ°œμ˜ ν…Œμ΄λΈ”μ— λ‚˜λˆ„μ–΄μ„œ, λ°μ΄ν„°λ“€μ˜ 쀑볡을 ν”Όν•  수 μžˆλ‹€.

NoSQL

  • No SQL은 Non-SQL, Not Only SQL, non-relational database라고도 λΆ€λ₯Έλ‹€. μ˜λ―ΈλŠ” SQLκ³Ό λ°˜λŒ€λ˜λŠ” μ ‘κ·Όλ°©μ‹μœΌλ‘œ 이해할 수 μžˆλ‹€.
  • RDB의 λ ˆμ½”λ“œλŠ” λ¬Έμ„œ(documents)둜 μΌμ»«λŠ”λ‹€.
  • λ‹€λ₯Έ ꡬ쑰의 데이터λ₯Ό 같은 μ»¬λ ‰μ…˜(SQL의 ν…Œμ΄λΈ”μ„ 의미)에 μΆ”κ°€ν•  수 μžˆλ‹€.

비ꡐ 뢄석

ν™•μž₯μ„±

SQL

  • SQL은 μˆ˜μ‹μ μœΌλ‘œ ν™•μž₯ν•œλ‹€.
  • 수직적 ν™•μž₯은 CPIλ‚˜ RAM 같은 λΆ€ν’ˆμ„ μ—…κ·Έλ ˆμ΄λ“œν•˜κ±°λ‚˜ ν•˜λ“œμ›¨μ–΄λ₯Ό μΆ”κ°€ν•˜μ—¬ μ„œλ²„μ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¨λ‹€.

NoSQL

  • NoSQL은 μˆ˜ν‰μ μœΌλ‘œ ν™•μž₯ν•œλ‹€.
  • μˆ˜ν‰μ  ν™•μž₯은 더 λ§Žμ€ μ„œλ²„λ₯Ό μΆ”κ°€ν•΄μ„œ μ„œλ²„λ₯Ό μ „μ²΄μ μœΌλ‘œ λΆ„μ‚°μ‹œν‚¨λ‹€.

관계

SQL

  • κ΄€κ³„ν˜• λ°μ΄ν„°λŠ” 각 table κ°„μ˜ 관계(JOIN)을 톡해 데이터λ₯Ό νŒŒμ•…ν•  수 μžˆλ‹€.
  • 데이터 쀑볡을 없앨 수 있고 λ°μ΄ν„°μ˜ 정확성을 높일 수 μžˆλ‹€.

NoSQL

  • λ‹€λ₯Έ Collection이 ν•„μš”ν•˜λ‹€λ©΄ κΈ°μ‘΄ Collection의 데이터λ₯Ό 일뢀 λ³΅μ œν•œλ‹€.
  • Collection λ³„λ‘œ μ€‘λ³΅λœ 데이터가 μ‘΄μž¬ν•œλ‹€.
  • μ€‘λ³΅λœ λ°μ΄ν„°λŠ” μ‚­μ œν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•  λ•Œ 반영이 λ˜μ§€ μ•Šμ„ 수 μžˆλ‹€.

Sharding(샀딩)은 같은 ν…Œμ΄λΈ” μŠ€ν‚€λ§ˆλ₯Ό 가진 데이터λ₯Ό λ‹€μˆ˜μ˜ DB에 λΆ„μ‚°ν•˜μ—¬ μ €μž₯ν•˜λŠ” 방법이닀. 이 κΈ°μˆ μ„ μ ‘λͺ©ν•˜λ©΄ SQL도 μˆ˜ν‰μ  ν™•μž₯을 μ μš©ν•  수 λŠ” μžˆμ§€λ§Œ, μ‹€μ œ κ΅¬ν˜„μ€ μ–΄λ ΅λ‹€κ³  ν•œλ‹€.

속성

SQL

  • SQL은 ACID νŠΉμ„±μ„ λ”°λ₯Έλ‹€.
  • ACIDλŠ” DB의 νŠΈλžœμž­μ…˜μ΄ μ•ˆμ „ν•˜κ²Œ μˆ˜ν–‰λ˜λŠ”κ²ƒμ„ 보μž₯ν•˜κΈ° μœ„ν•œ νŠΉμ§•μ΄λ‹€.

NoSQL

  • NoSQL은 CAP이둠을 λ”°λ₯Έλ‹€.
  • CAP이둠은 λΆ„μ‚° μ‹œμŠ€ν…œμ—μ„œλŠ” CAP μ„Έ 가지 속성 λͺ¨λ‘λ₯Ό λ§Œμ‘±ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ©°, 였직 2κ°€μ§€λ§Œ λ§Œμ‘±ν•  수 μžˆλ‹€λŠ” κ²ƒμœΌλ‘œ μ •μ˜ν•  수 μžˆλ‹€.

Consistency (일관성) : λͺ¨λ“  μš”μ²­μ€ μ΅œμ‹  데이터 λ˜λŠ” μ—λŸ¬λ₯Ό μ‘λ‹΅λ°›λŠ”λ‹€. (DBκ°€ 3개둜 λΆ„μ‚°λ˜μ—ˆλ‹€κ³  κ°€μ •ν•  λ•Œ, ν•˜λ‚˜μ˜ νŠΉμ • DB의 데이터가 μˆ˜μ •λ˜λ©΄ λ‚˜λ¨Έμ§€ 2개의 DBμ—μ„œλ„ μˆ˜μ •λœ 데이터λ₯Ό 응닡받아야 ν•œλ‹€.) Availability (κ°€μš©μ„±) : λͺ¨λ“  μš”μ²­μ€ 정상 응닡을 λ°›λŠ”λ‹€. (νŠΉμ • DBκ°€ μž₯μ• κ°€ λ‚˜λ„ μ„œλΉ„μŠ€κ°€ κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.) Partitions Tolerance (뢄리 내ꡬ성) : DBκ°„ 톡신이 μ‹€νŒ¨ν•˜λŠ” κ²½μš°λΌλ„ μ‹œμŠ€ν…œμ€ 정상 λ™μž‘ ν•œλ‹€.

μŠ€ν‚€λ§ˆ

SQL

  • SQL은 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ μŠ€ν‚€λ§ˆκ°€ λ¨Όμ € μ •μ˜ λ˜μ–΄μ•Ό ν•œλ‹€.

NoSQL

  • NoSQL은 JSON ν˜Ήμ€ 객체의 ν˜•νƒœμΈ Key-Value둜 데이터가 μ €μž₯λœλ‹€. (Document β†’ Collection β†’ Database)

κ²°λ‘ 

SQL

μž₯점

  • μŠ€ν‚€λ§ˆκ°€ μ •μ˜λ˜μ–΄ μžˆμ–΄ ν™•μ‹€ν•˜κ³  λͺ…ν™•ν•˜λ‹€.
  • ꡬ쑰의 완전성을 보μž₯ν•  수 μžˆλ‹€.
  • 관계λ₯Ό μ„€μ •ν•˜κΈ°μ—, λ°μ΄ν„°λŠ” 쀑볡없이 ν•œλ²ˆλ§Œ μ €μž₯λœλ‹€.

단점

  • μœ μ—°ν•˜μ§€ λͺ»ν•˜λ‹€. μŠ€ν‚€λ§ˆλ₯Ό 사전에 μ‹œκ°„ λ“€μ—¬ μ² μ €ν•˜κ²Œ μ§œμ•Ό ν•˜κ³  λ‚˜μ€‘μ— μˆ˜μ •ν•˜κΈ° λ²ˆκ±°λ‘­λ‹€ (μ—„κ²©ν•œ μŠ€ν‚€λ§ˆ).
  • 관계λ₯Ό λ§Ίμ–΄ 데이터λ₯Ό μ €μž₯ν•˜κΈ°μ—, μ€‘λ³΅λ˜μ§€λŠ” μ•Šμ§€λ§Œ, 쑰인을 많이 ν•΄μ•Όν•  경우 맀우 λ³΅μž‘ν•œ 쿼리λ₯Ό μž‘μ„±ν•΄μ•Ό ν•  수 μžˆλ‹€.
  • μˆ˜ν‰μ  ν™•μž₯이 κ°€λŠ₯ν•˜μ§€λ§Œ μ–΄λ ΅κΈ° λ•Œλ¬Έμ— μ„±μž₯ ν•œκ³„κ°€ μ˜€λŠ” μ‹œμ μ΄ μ˜¨λ‹€.

관계λ₯Ό λ§Ίκ³  μžˆλŠ” 데이터가 자주 λ³€κ²½λ˜λŠ” 경우, 또 λͺ…ν™•ν•œ μŠ€ν‚€λ§ˆκ°€ μ‚¬μš©μžμ™€ λ°μ΄ν„°μ—κ²Œ μ€‘μš”ν•œ 경우 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ”κ²Œ μ’‹λ‹€. 금육 μ‚°μ—…κ³Ό 같은 μ‹œμŠ€ν…œμ˜ ν˜•νƒœκ°€ κΈ‰κ²©ν•˜κ²Œ λ³€ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ κ·Έ μ•ˆμ˜ 데이터가 계속 λ°”λ€ŒλŠ” 보수적인 μ‹œμŠ€ν…œμ—μ„œ μœ λ¦¬ν•˜λ‹€.

NoSQL

μž₯점

  • μŠ€ν‚€λ§ˆκ°€ 없기에, 훨씬 더 μœ μ—°ν•˜λ‹€. μ–Έμ œλ“ μ§€ 데이터λ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€ (ν•„λ“œ μΆ”κ°€).
  • μ–΄λ– ν•œ ν˜•μ‹μœΌλ‘œλ„ 데이터λ₯Ό μ €μž₯ν•  수 μžˆκΈ°μ—, ν•„μš”ν•œ λŒ€λ‘œ μ €μž₯ν•΄ μ½μ–΄μ˜€λŠ” 속도가 빨라진닀.
  • 수직 및 μˆ˜ν‰ ν™•μž₯ λͺ¨λ‘ κ°€λŠ₯ν•΄ λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°œμƒμ‹œν‚€λŠ” λͺ¨λ“  읽기 / μ“°κΈ° μš”μ²­μ„ μ²˜λ¦¬ν•  수 μžˆλ‹€.

단점

  • μœ μ—°μ„±μ— μ˜ν•΄, 데이터 ꡬ쑰 결정을 계속 λ―Έλ£° 수 μžˆλ‹€.
  • 데이터λ₯Ό μ€‘λ³΅λ˜κ²Œ ν•„μš”ν•œ μ»¬λ ‰μ…˜ λ§ˆλ‹€ μ €μž₯ν•  수 μžˆμ–΄, ν•„μš”ν•œ μ»¬λ ‰μ…˜λ§ˆλ‹€ λŒλ©΄μ„œ μ—¬λŸ¬ 개의 λ ˆμ½”λ“œλ₯Ό λ‹€ μ—…λ°μ΄νŠΈν•΄μ€˜μ•Ό ν•œλ‹€. λˆ„λ½ν•  μ‹œ, 데이터가 μ΅œμ‹ μ΄ 아닐 수 μžˆλ‹€.
  • μˆ˜μ • μ‹œ, λͺ¨λ“  μ»¬λ ‰μ…˜μ—μ„œ λ‹€ μˆ˜μ •ν•΄μ€˜μ•Ό ν•œλ‹€.

λΉ„κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” μ •ν™•ν•œ 데이터 ꡬ쑰λ₯Ό μ•Œ 수 μ—†κ±°λ‚˜ λ³€κ²½ / ν™•μž₯ 될 수 μžˆλŠ” 경우 (μˆ˜ν‰μ μœΌλ‘œ), 읽기 μ²˜λ¦¬λŠ” 많이 ν•˜μ§€λ§Œ, 데이터λ₯Ό 자주 λ³€κ²½ν•˜μ§€ μ•ŠλŠ” 경우 μ‚¬μš©ν•˜λ©΄ μœ λ¦¬ν•˜λ‹€.

μ°Έκ³