🐳DataBase

πŸ’Ύλ°μ΄ν„°λ² μ΄μŠ€(Database, DB)λž€?

λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό ν•œ λ§ˆλ””λ‘œ μ •μ˜ν•˜λ©΄ β€˜λ°μ΄ν„°μ˜ 집합’이라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€μ—λŠ” μΌμƒμƒν™œ λŒ€λΆ€λΆ„μ˜ 정보가 μ €μž₯되고 κ΄€λ¦¬λ©λ‹ˆλ‹€. 였늘 λ³΄λ‚΄κ±°λ‚˜ 받은 μΉ΄μΉ΄μ˜€ν†‘ λ©”μ‹œμ§€, μΈμŠ€νƒ€κ·Έλž¨μ— λ“±λ‘ν•œ 사진, μΉ΄νŽ˜μ—μ„œ κ΅¬λ§€ν•œ μ•„μ΄μŠ€ 아메리카노 λ“±μ˜ 정보가 λͺ¨λ‘ λ°μ΄ν„°λ² μ΄μŠ€μ— κΈ°λ‘λ©λ‹ˆλ‹€.

πŸ’ΎDBMSλž€?

λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό β€˜λ°μ΄ν„°μ˜ 집합’이라고 μ •μ˜ν•œλ‹€λ©΄, 이런 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ΄€λ¦¬ν•˜κ³  μš΄μ˜ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό DBMS(Database Management System)라고 ν•©λ‹ˆλ‹€. λ‹€μ–‘ν•œ 데이터가 μ €μž₯λ˜μ–΄ μžˆλŠ” λ°μ΄ν„°λ² μ΄μŠ€λŠ” μ—¬λŸ¬ λͺ…μ˜ μ‚¬μš©μžλ‚˜ μ‘μš© ν”„λ‘œκ·Έλž¨κ³Ό κ³΅μœ ν•˜κ³  λ™μ‹œμ— 접근이 κ°€λŠ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.

예둜 μ€ν–‰μ˜ 예금 κ³„μ’ŒλŠ” λ§Žμ€ μ‚¬λžŒλ“€μ΄ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ λͺ…μ˜ 예금 κ³„μ’Œ 정보λ₯Ό λͺ¨μ•„ 놓은 것이 λ°μ΄ν„°λ² μ΄μŠ€μž…λ‹ˆλ‹€. 은행이 κ°€μ§€κ³  μžˆλŠ” 예금 κ³„μ’Œ λ°μ΄ν„°λ² μ΄μŠ€μ—λŠ” μ—¬λŸ¬ λͺ…이 λ™μ‹œμ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예금 κ³„μ’Œ 주인, 은행 직원, 인터넷 λ±…ν‚Ή, ATM κΈ°κΈ° λ“±μ—μ„œ λͺ¨λ‘ 접근이 κ°€λŠ₯ν•˜λ‹ˆκΉŒμš”. μ΄λŸ¬ν•œ 것이 κ°€λŠ₯ν•œ μ΄μœ λŠ” λ°”λ‘œ DBMSκ°€ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

πŸ’ΎDBMS의 μ’…λ₯˜

DBMS와 같은 μ†Œν”„νŠΈμ›¨μ–΄λŠ” νŠΉμ • λͺ©μ μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ λ¬Έμ„œλ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜μ•„ν•œκΈ€(HWP)μ΄λ‚˜ μ›Œλ“œ(Word), ν‘œ 계산을 μœ„ν•΄μ„œλŠ” μ—‘μ…€(Excel)μ΄λ‚˜ 캘크(Calc), λ©‹μ§„ 사진을 νŽΈμ§‘ν•˜λ €λ©΄ 포토샡(PhotoShop)μ΄λ‚˜ κΉ€ν”„(Gimp)와 같은 μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ§ˆμ°¬κ°€μ§€λ‘œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλ„ μ†Œν”„νŠΈμ›¨μ–΄, 즉 DBMSλ₯Ό μ„€μΉ˜ν•΄μ•Ό ν•˜λŠ”λ° λŒ€ν‘œμ μœΌλ‘œ MySQL, 였라클(Oracle), SQL μ„œλ²„, MariaDB 등이 μžˆμŠ΅λ‹ˆλ‹€. μ†Œν”„νŠΈμ›¨μ–΄ 각각의 μ‚¬μš© 방법과 νŠΉμ§•μ΄ λ‹€λ₯΄μ§€λ§Œ νŠΉμ • λͺ©μ μ„ μœ„ν•΄μ„œλŠ” μ–΄λ–€ 것을 μ‚¬μš©ν•΄λ„ λ¬΄λ°©ν•©λ‹ˆλ‹€.

λŒ€ν‘œμ μΈ DBMS의 νŠΉμ§•

DB 점유율 μˆœμœ„

κ΄€κ³„ν˜• DB 와 NoSQL

κ΄€κ³„ν˜• 데이터 λ² μ΄μŠ€λŠ” 데이터λ₯Ό ν…Œμ΄λΈ” ν˜•νƒœλ‘œ μ €μž₯ν•œλ‹€.

μ‰½κ²Œ μƒκ°ν•˜λ©΄ μ—‘μ…€ ν‘œμ— 데이터λ₯Ό μ €μž₯ν•˜λŠ” 것과 λ™μΌν•˜λ‹€κ³  λ³΄λ©΄λœλ‹€.

μ‹€μ œλ‘œ 각 데이터 ν•­λͺ©λ“€μ€ ν–‰(row)에 μ €μž₯되고, ν•­λͺ©μ˜ 속성은 μ—΄(column)이라고 ν‘œν˜„ν•œλ‹€. 열은 ν•­λͺ©μ˜ 속성인 만큼 μž…λ ₯λ˜λŠ” λ°μ΄ν„°μ˜ μœ ν˜•μ΄ μ •ν•΄μ§„λ‹€.

μš©μ–΄ 정리

➊ μ—΄(column)

각각의 열은 μœ μΌν•œ 이름을 κ°€μ§€κ³  있으며, μžμ‹ λ§Œμ˜ νƒ€μž…(number, stringλ“±)을 κ°€μ§€κ³  μžˆλ‹€. 열을 ν•„λ“œ(field) λ˜λŠ” 속성(attribute)이라고도 ν•œλ‹€.

βž‹ ν–‰(row)

행은 κ΄€κ³„λœ λ°μ΄ν„°μ˜ λ¬ΆμŒμ„ μ˜λ―Έν•œλ‹€. ν•œ ν…Œμ΄λΈ”μ˜ λͺ¨λ“  행은 같은 수의 열을 κ°€μ§„λ‹€. 행을 νŠœν”Œ(tuple)μ΄λ‚˜ λ ˆμ½”λ“œ(record)라고도 λΆ€λ₯Έλ‹€.

➌ κ°’(value)

ν…Œμ΄λΈ”μ€ 각각의 ν–‰κ³Ό 열에 λŒ€μ‘ν•˜λŠ” 값을 κ°–λŠ”λ‹€. 이 값은 μ—΄μ˜ νƒ€μž…μ— λ§žμ•„μ•Όν•œλ‹€.

➍ ν‚€(key)

ν…Œμ΄λΈ”μ—μ„œ ν–‰μ˜ μ‹λ³„μžλ‘œ μ΄μš©λ˜λŠ” 열을 (key)λ˜λŠ” κΈ°λ³Έ ν‚€(primary key)라고 ν•œλ‹€. 객체의 JSμ—μ„œ 객체의 id와 μœ μ‚¬ν•œ 역할을 ν•œλ‹€. 즉, ν…Œμ΄λΈ”μ—μ„œ μ €μž₯된 λ ˆμ½”λ“œλ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜λŠ” 후보 ν‚€(candidate key) μ€‘μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€ μ„€κ³„μžκ°€ μ§€μ •ν•œ 속성을 μ˜λ―Έν•œλ‹€.

➎ 관계(relationship)

ν…Œμ΄λΈ” κ°„μ˜ κ΄€κ³„λŠ” 관계λ₯Ό λ§ΊλŠ” ν…Œμ΄λΈ” μˆ˜μ— 닀라 λ‹€μŒκ³Ό 같이 λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • μΌλŒ€μΌ 관계

  • μΌλŒ€λ‹€ 관계

  • λ‹€λŒ€λ‹€ 관계

    βœ… κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” μ΄λŸ¬ν•œ 관계λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ μ™Έλž˜ ν‚€(foreigh key)λΌλŠ” 것을 μ‚¬μš©ν•œλ‹€. μ™Έλž˜ ν‚€λŠ” ν•œ ν…Œμ΄λΈ”μ˜ ν‚€ μ€‘μ—μ„œ λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ ν–‰(row)을 식별할 수 μžˆλŠ” ν‚€λ₯Ό μ˜λ―Έν•œλ‹€.

➏ μŠ€ν‚€λ§ˆ(Schema)

μŠ€ν‚€λ§ˆλŠ” ν…Œμ΄λΈ”μ„ λ””μžμΈν•˜κΈ° μœ„ν•œ 청사진 이라고 ν•  수 μžˆλ‹€. μ΄λŸ¬ν•œ μŠ€ν‚€λ§ˆλŠ” ν…Œμ΄λΈ”μ˜ 각 열에 λŒ€ν•œ ν•­λͺ©κ³Ό νƒ€μž…λΏλ§Œ μ•„λ‹ˆλΌ κΈ°λ³Έ 킀와 μ™Έλž˜ν‚€λ„ λ‚˜νƒ€λ‚΄μ•Ό ν•œλ‹€. μŠ€ν‚€λ§ˆλŠ” 개체-관계 λ‹€μ΄μ–΄κ·Έλž¨(entity-relationship diagram)μ΄λ‚˜ λ¬Έμžμ—΄λ‘œ ν‘œν˜„ν•  수 μžˆλ‹€. Reservation(ID, Name, Date, RoomNum)

SQL

Structured Query Language(SQL)은 λ°μ΄ν„°λ² μ΄μŠ€ μ–Έμ–΄λ‘œ, 주둜 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ— μ‚¬μš©ν•œλ‹€. λ°μ΄ν„°μ˜ ꡬ쑰가 κ³ μ •λ˜μ—ˆμžˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€μš© ν”„λ‘œκ·Έλž¨μ–Έμ–΄μΈ SQL은 λ°μ΄ν„°λ² μ΄μŠ€μ— 쿼리λ₯Ό 보내 μ›ν•˜λŠ” 데이터λ₯Ό κ°€μ Έμ˜€κ³ λ‚˜ μ‚½μž…ν•  수 μžˆλ‹€. 그리고 SQL은 relation이라고 λΆˆλ¦¬λŠ” 데이터가 κ΅¬μ‘°ν™”λœ ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν™œμš© ν•  수 μžˆλ‹€. SQL을 μ‚¬μš©ν•˜λŠ” κ΄€κ³„ν˜•λ°μ΄ν„° λ°μ΄ν„°λ² μ΄μŠ€ 예. MySQL, Oracle, SQLite, PostgreSQLλ“±

NoSQL

λ°μ΄ν„°μ˜ ꡬ쑰가 κ³ μ •λ˜μ§€ μ•Šμ€ λ°μ΄ν„°λ² μ΄μŠ€λŠ” ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  데이터λ₯Ό λ‹€λ₯Έ ν˜•νƒœλ‘œ μ €μž₯ν•œλ‹€.

Key - Value DB : redis

Graph DB : Amazon Neptune

Docoment DB : mongoDB, CouchDB, Cloud Firesotre

Column-family DB : cassandra, Google Bigtable

Search engine : elastic, CloudSearch

Last updated