[Book] κ²Œμž„ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° κ΅κ³Όμ„œ - 8μž₯ NoSQL 기초

2022. 3. 12. 18:14Β·πŸ“ Book/✏ Game Server

8μž₯ NoSQL κΈ°μ΄ˆ

μ•žμ„œ μ•Œμ•„λ³Έ λ°μ΄ν„°λ² μ΄μŠ€λŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ΄λ‹€. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” ν…Œμ΄λΈ”κ³Ό μ™Έλž˜ ν‚€ 등을 μ‚¬μš©ν•˜κ³  λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ 질의 ꡬ문으둜 μ›ν•˜λŠ” 정보λ₯Ό λ‹€κ°μ μœΌλ‘œ λΉ λ₯΄κ²Œ μΆ”μΆœν•  수 μžˆλ‹€. 또 데이터 일관성을 μ€‘μš”ν•˜κ²Œ μƒκ°ν•œλ‹€.

 

λ°μ΄ν„°λ² μ΄μŠ€ 쀑 또 λ‹€λ₯Έ ν•˜λ‚˜μΈ NoSQLλŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ „ν†΅μ μœΌλ‘œ μ€‘μ‹œν•˜λ˜ λͺ‡ κ°€μ§€λ₯Ό ν¬κΈ°ν•˜λŠ” λŒ€μ‹  λ‹€λ₯Έ 츑면의 μž₯점을 κ°€μ§„λ‹€.

 

1. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ™€ NoSQL

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” 였랜 역사λ₯Ό μ§€λ‹ˆκ³  μžˆμ§€λ§Œ, νŠΉμ • μƒν™©μ—μ„œ λͺ‡ κ°€μ§€ λΆ€μ‘±ν•œ 점이 μžˆλ‹€. μ˜ˆλ₯Ό λ“€μ–΄ λ‘œκ·Έ 데이터λ₯Ό ν•œ ν…Œμ΄λΈ”μ— 기둝할 λ•Œ λΆˆνŽΈν•  수 μžˆλ‹€. 둜그 데이터가 λˆ„μ λ˜μ–΄ ν…Œμ΄λΈ”μ— μ•½ 1μ–΅ 개의 λ ˆμ½”λ“œκ°€ μŒ“μ˜€μ„ λ•Œ μœ μ§€ 보수λ₯Ό μœ„ν•΄ ν•„λ“œ ν•˜λ‚˜λ₯Ό 더 μΆ”κ°€ν•΄μ•Ό ν•˜λŠ” 상황이 였면, κΈ°μ‘΄ 1μ–΅ 개의 λ ˆμ½”λ“œμ—λ„ 이 ν•„λ“œκ°€ λ°˜λ“œμ‹œ μΆ”κ°€λ˜μ–΄μ•Ό ν•œλ‹€. 그리고 κΈ°μ‘΄ ν…Œμ΄λΈ”μ˜ ν•„λ“œ ꡬ쑰λ₯Ό λ°”κΎΈλ©΄ λ°”κΏ€μˆ˜λ‘ ν…Œμ΄λΈ” ꡬ쑰도 λ³΅μž‘ν•΄μ§ˆ 것이닀.

 

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ˜ λ ˆμ½”λ“œ 1κ°œλŠ” λ…Όλ¦¬μ μœΌλ‘œ λ³Ό λ•Œ λ¦¬μŠ€νŠΈλ‚˜ λ°°μ—΄ ꡬ쑰의 데이터이닀. 이 λ ˆμ½”λ“œκ°€ λ¦¬μŠ€νŠΈλ‚˜ 배열이 μ•„λ‹Œ νŠΈλ¦¬λ‚˜ ꡬ쑰체 ν˜•νƒœλ₯Ό κ°–μΆœ 수 μžˆλ‹€λ©΄ μ–΄λ–¨κΉŒ? 뒀에 λ“±μž₯ν•  NoSQL은 μ΄λŸ¬ν•œ ν˜•νƒœλ₯Ό κ°€μ§„λ‹€.

 

2. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν™•μž₯μ„±

μ΄λ²ˆμ—λŠ” λ‹€λ₯Έ 상황도 생각해 보자. κ²Œμž„ μ„œλΉ„μŠ€μ˜ μ΄μš©μžκ°€ λ§Žμ„ λ•Œ κ²Œμž„ μ„œλ²„ ν•œ λŒ€λ‘œλŠ” 이 μ–΄λ§ˆμ–΄λ§ˆν•œ μ‚¬μš©λŸ‰μ„ 감당할 수 μ—†λ‹€. κ·Έλž˜μ„œ 이λ₯Ό ν•΄κ²°ν•˜κ³ μž κ²Œμž„ μ„œλ²„λ₯Ό ν•˜λ“œμ›¨μ–΄ μ—¬λŸ¬ λŒ€λ‘œ κ΅¬μ„±ν•˜κ³  λ°μ΄ν„°λ² μ΄μŠ€λ„ μ—¬λŸ¬ λŒ€μ— λ‚˜λˆ„μ–΄ μ €μž₯ν–ˆλ‹€.

 

λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λΆ„μ‚°ν•˜λŠ” 방법 쀑 ν•˜λ‚˜μΈ 수직 뢄산은 μ—¬λŸ¬ ν…Œμ΄λΈ”μ„ 각각 μ—¬λŸ¬ λ°μ΄ν„°λ² μ΄μŠ€ 컴퓨터에 λ‚˜λˆ„λŠ” 것이닀. κ·ΈλŸ¬λ‚˜ 수직 뢄산은 ν•œκ³„κ°€ μžˆλ‹€. ν…Œμ΄λΈ”μ΄ μˆ˜κ°€ λ°μ΄ν„°λ² μ΄μŠ€ 컴퓨터 μˆ˜λ³΄λ‹€ μž‘λ‹€λ©΄ λ‚˜λˆ„λŠ” 것이 λΆˆκ°€λŠ₯ν•΄μ§„λ‹€. μ΄λ•ŒλŠ” μˆ˜ν‰ λΆ„μ‚°ν•˜λŠ” 것이 μ’‹λ‹€. μˆ˜ν‰ 뢄산은 κ° 컴퓨터에 λ ˆμ½”λ“œλ₯Ό λΆ„λ°°ν•˜λŠ” κ²ƒμœΌλ‘œ 각 컴퓨터가 큰 ν…Œμ΄λΈ” 1개λ₯Ό 쑰각쑰각 κ°€μ§„ μ…ˆμ΄λ‹€. 이 쑰각을 μƒ€λ“œλΌκ³  ν•œλ‹€.

 

μˆ˜ν‰ λΆ„μ‚°

 

μœ„μ™€ 같은 μƒνƒœμ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ•‘μ„ΈμŠ€ ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ? λ¨Όμ € μ–΄λŠ μƒ€λ“œμ— μžˆλŠ”μ§€ νŒŒμ•…ν•œ ν›„ ν•΄λ‹Ή μƒ€λ“œμ— λ°μ΄ν„°λ² μ΄μŠ€ 질의λ₯Ό μ‹€ν–‰ν•˜λ©΄ λœλ‹€.

  • ν•΄μ‹œ ν•¨μˆ˜ μ‚¬μš©: ν•΄μ‹œ ν•¨μˆ˜λ‘œ 얻은 μ •μˆ˜ 값을 μƒ€λ“œ λ„˜λ²„λ‘œ μ‚¬μš©ν•œλ‹€.
  • λ‘œμΌ€μ΄ν„° DB μ‚¬μš©: λ³„λ„μ˜ ν…Œμ΄λΈ”μ— μ•‘μ„ΈμŠ€ ν•˜μ—¬ μ–΄λŠ μƒ€λ“œμ— μžˆλŠ”μ§€ νŒŒμ•…ν•œλ‹€.

 

DB 코디넀이터가 λ‘œμΌ€μ΄ν„° DB와 DB μƒ€λ“œλ₯Ό μ΄μš©ν•΄μ„œ DB λΆ„μ‚°

 

전체 과정은 λ‹€μŒκ³Ό κ°™λ‹€. κ²Œμž„ μ„œλ²„κ°€ λ°μ΄ν„°λ² μ΄μŠ€μ— 질의λ₯Ό λ˜μ§€λ©΄, λ°μ΄ν„°λ² μ΄μŠ€ 질의λ₯Ό μˆ˜ν–‰ν•˜λŠ” 코디넀이터가 μ§ˆμ˜μ— κ΄€λ ¨λœ λ ˆμ½”λ“œμ˜ μœ„μΉ˜λ₯Ό λ‘œμΌ€μ΄ν„° DB에 λ¬»λŠ”λ‹€. κ·Έλ ‡κ²Œ ν•΄λ‹Ή μƒ€λ“œ μœ„μΉ˜λ₯Ό νŒŒμ•…ν•˜λ©΄, ν•΄λ‹Ή μƒ€λ“œμ—μ„œ λ ˆμ½”λ“œ μ•‘μ„ΈμŠ€λ₯Ό μ²˜λ¦¬ν•˜μ—¬ κ²°κ³Όλ₯Ό λ°›λŠ”λ‹€.

 

μ΄λŸ¬ν•œ μˆ˜ν‰ 뢄산을 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ— μ‚¬μš©ν•œλ‹€λ©΄, 처리 속도 μΈ‘λ©΄μ—μ„œ 문제점이 생길 수 μžˆλ‹€. 기본적으둜 데이터 일관성을 μ€‘μš”ν•˜κ²Œ μ—¬κΈ°κΈ° λ•Œλ¬Έμ— 데이터에 λ³€ν™”κ°€ μžˆλ‹€λ©΄ μƒ€λ“œμ™€ λ‘œμΌ€μ΄ν„° DB λͺ¨λ‘ μˆ˜μ •μ΄ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

 

3. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ κ³ κ°€μš©μ„±

μ΄λ²ˆμ—λŠ” μ²˜λ¦¬λŸ‰μ΄ μ•„λ‹Œ μž₯μ•  극볡(fail over)에 κ΄€ν•΄ μ•Œμ•„λ³΄μž. μž₯μ•  극볡은 κ³ κ°€μš©μ„±μ„ μœ„ν•΄ ν™œμš©λ˜λŠ” λ‹€μ–‘ν•œ 기법 쀑 ν•˜λ‚˜μ΄λ‹€. κ³ κ°€μš©μ„±μ΄λž€ ν•˜λ“œμ›¨μ–΄ κ³ μž₯ λ˜λŠ” λ‹€λ₯Έ 이유둜 μ„œλ²„ κΈ°κΈ°κ°€ 정상 μž‘λ™μ„ ν•˜μ§€ μ•Šμ„ λ•Œλ„ μ‚¬μš©μž μž…μž₯μ—μ„œλŠ” μ„œλΉ„μŠ€κ°€ μ§€μ†λ˜λŠ” μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 것을 λ§ν•œλ‹€.

 

μž₯μ•  극볡을 μœ„ν•΄μ„œ ν•  수 μžˆλŠ” 것은 λ ˆμ½”λ“œ μƒμ‹œ 백업이닀. DB 1에 μžˆλŠ” λ ˆμ½”λ“œλ₯Ό DB 2에 항상 λ°±μ—…, 즉 미러링 볡제λ₯Ό μˆ˜ν–‰ν•˜λŠ”λ°, ν‰μ†Œμ—λŠ” DB 1(active, master)을 μ•‘μ„ΈμŠ€ ν•˜λ‹€κ°€ μ£½μœΌλ©΄, DB 2(passive, slave)κ°€ λŒ€μ‹  μ•‘μ„ΈμŠ€λ₯Ό λ°›μ•„ μ²˜λ¦¬ν•˜λŠ” 것이닀. μ΄λ•Œ 같은 데이터가 DB 1, DB 2에 λͺ¨λ‘ 있게 ν•˜λŠ” 것을 이쀑화 ν˜Ήμ€ 닀쀑화라고 ν•œλ‹€.

 

일관성 μ€‘μ‹œ

 

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” 데이터 일관성을 μ€‘μ‹œν•˜κΈ° λ•Œλ¬Έμ— 데이터λ₯Ό λ³€κ²½ν•  λ•Œ μ•‘ν‹°λΈŒμ™€ νŒ¨μ‹œλΈŒ λͺ¨λ‘ λ³€κ²½ν•œ 후에야 처리 μ™„λ£Œλ₯Ό μ„ μ–Έν•œλ‹€. μ΄λŠ” 일관성은 μœ μ§€λ˜μ§€λ§Œ 처리 μ„±λŠ₯은 ν•˜λ½λœλ‹€.

 

처리 μ„±λŠ₯ μ€‘μ‹œ

 

μœ„ 방법은 처리 μ†λ„λŠ” λΉ λ₯΄μ§€λ§Œ 일관성이 κΉ¨μ§„λ‹€.

 

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” ACIDλ₯Ό μΆ”κ΅¬ν•˜λŠ” 것이 원칙이닀. ν•˜μ§€λ§Œ 이 μ€‘μ—μ„œ C(일관성)와 I(고립성)λ₯Ό μ–΄λŠ 정도 ν¬κΈ°ν•˜λ©΄ μŠ€μΌ€μΌ 아웃과 κ³ κ°€μš©μ„±μ„ 확보할 수 μžˆλ‹€. μ΄λŸ¬ν•œ μž₯점을 κ°€μ§„ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό NoSQL이라 λΆ€λ₯Έλ‹€.

  • ACID λŒ€μ‹  BASE(Basically Available)λ₯Ό μ§€ν–₯ν•œλ‹€. 기본적으둜 κ°€μš©μ„±μ΄λž€ 의미둜 데이터 μƒνƒœκ°€ μœ μ—°ν•œ 것을 λ§ν•œλ‹€.
  • 일관성을 일뢀 ν¬μƒν•˜λ”λΌλ„ 높은 ν™•μž₯μ„±κ³Ό κ³ κ°€μš©μ„±μ„ μ‹€ν˜„ν•œλ‹€.
  • νƒˆ ν…Œμ΄λΈ” ꡬ쑰의 μœ μ—°ν•œ μ €μž₯ 방식을 μ΄μš©ν•˜μ—¬ 더 효율적인 ν”„λ‘œκ·Έλž˜λ°μ„ μΆ”κ΅¬ν•œλ‹€.

 

5. MongoDB μ‹œμž‘

Mongo μ§‘ν•© 관계

 

NoSQL λ°μ΄ν„°λ² μ΄μŠ€ 쀑 ν•˜λ‚˜λ‘œ RDBMS(κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€)의 μ§‘ν•© 관계와 λΉ„μŠ·ν•˜μ§€λ§Œ λͺ‡ κ°€μ§€ 차이가 μžˆλ‹€.

  • ν…Œμ΄λΈ” λŒ€μ‹  μ»¬λ ‰μ…˜μ΄ μžˆλ‹€.
  • λ ˆμ½”λ“œ λŒ€μ‹  λ„νλ¨ΌνŠΈκ°€ 있으며 데이터 트리λ₯Ό μ €μž₯ν•œλ‹€.
  • JSON을 적극 ν™œμš©ν•œλ‹€.

 

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Book/✏ Game Server' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Book] κ²Œμž„ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° κ΅κ³Όμ„œ - 9μž₯ λΆ„μ‚° μ„œλ²„ ꡬ쑰 (2)
  • [Book] κ²Œμž„ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° κ΅κ³Όμ„œ - 9μž₯ λΆ„μ‚° μ„œλ²„ ꡬ쑰 (1)
  • [Book] κ²Œμž„ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° κ΅κ³Όμ„œ - 7μž₯ λ°μ΄ν„°λ² μ΄μŠ€ 기초
  • [Book] κ²Œμž„ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° κ΅κ³Όμ„œ - 6μž₯ κ²Œμž„ λ„€νŠΈμ›Œν¬ μ—”μ§„ ν”„λΌμš°λ“œλ„·
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[Book] κ²Œμž„ μ„œλ²„ ν”„λ‘œκ·Έλž˜λ° κ΅κ³Όμ„œ - 8μž₯ NoSQL 기초
μƒλ‹¨μœΌλ‘œ

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