λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ–₯️/DBMS

DB(Database)와 DBMS (Database Management System)에 λŒ€ν•œ κ°„λ‹¨ν•œ μ„€λͺ…

by HanaV 2023. 3. 23.
728x90

 λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ‘΄μž¬ν•˜κΈ° μ΄μ „μ—λŠ” 파일 μ‹œμŠ€ν…œμ„ μ΄μš©ν•΄μ„œ 데이터λ₯Ό κ΄€λ¦¬ν•˜μ˜€λ‹€. ν•˜μ§€λ§Œ 파일의 ꡬ쑰가 μ‘μš© ν”„λ‘œκ·Έλž¨μ— λ°˜μ˜λ˜μ–΄ 있기 λ•Œλ¬Έμ— λ°μ΄ν„°λ‚˜ ν”„λ‘œκ·Έλž¨ 쀑 ν•˜λ‚˜κ°€ λ°”λ€Œλ©΄ λ‹€λ₯Έ ν•˜λ‚˜λ„ μˆ˜μ •ν•΄μ•Ό ν•˜λŠ” λ²ˆκ±°λ‘œμ›€μ΄ μžˆμ—ˆλ‹€. 또 ν”„λ‘œκ·Έλž¨λ§ˆλ‹€ λ³„λ„μ˜ 파일둜 관리해야 ν•˜κΈ° λ•Œλ¬Έμ— 데이터가 μ€‘λ³΅λ˜κ±°λ‚˜, ν•˜λ‚˜μ˜ νŒŒμΌμ— μ—¬λŸ¬ 개의 μ‘μš©ν”„λ‘œκ·Έλž¨μ΄ μ ‘κ·Όν•˜μ—¬ μ‚¬μš©ν•  μˆ˜κ°€ μ—†μ—ˆλ‹€. μ΄λŠ” ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•˜κ±°λ‚˜ μœ μ§€λ³΄μˆ˜λ₯Ό ν•  λ•Œ λ¬Έμ œκ°€ λ˜μ—ˆλ‹€.
 
κ·ΈλŸ¬λ‹€κ°€ μ €μž₯ν•œ 데이터λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ μ‚­μ œ, μˆ˜μ •, κ΄€λ¦¬ν•˜κΈ° νŽΈν•˜κ²Œ ν•˜κ³ , ν—ˆκ°€λœ μ‚¬μš©μžλŠ” λ™μ‹œμ— 접속도 κ°€λŠ₯ν•˜κ³ , 무엇보닀도 데이터가 ν”„λ‘œκ·Έλž¨μ— 쒅속적이지 μ•Šκ³  ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ”λΌλ„ 사라지지 μ•Šκ²Œ ν•  μˆ˜λŠ” μ—†μ„κΉŒ ν•΄μ„œ λ§Œλ“€μ–΄μ§„ 것이 λ°μ΄ν„°λ² μ΄μŠ€μ΄λ‹€.

 λ°μ΄ν„°λ² μ΄μŠ€(Database)λŠ” μ—¬λŸ¬ μ‚¬μš©μžλ“€μ΄ κ³΅μœ ν•˜κ³  μ‚¬μš©ν•  λͺ©μ μœΌλ‘œ 파일 ν˜•νƒœλ‘œ 흩어져 있던 데이터듀을 ν•˜λ‚˜λ‘œ λͺ¨μ•„μ„œ 톡합 κ΄€λ¦¬λ˜λŠ” λ°μ΄ν„°μ˜ 집합이닀. 그리고 이 μ‚¬μš©μžλ“€μ΄ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ΄€λ¦¬ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό DBMS(Database Management System)라고 ν•œλ‹€.

 

 DB의 νŠΉμ§•

 νŒŒμΌ μ‹œμŠ€ν…œμ˜ ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ κ²ƒμΈλ§ŒνΌ, λ°μ΄ν„°λ² μ΄μŠ€λŠ” λ°μ΄ν„°μ˜ 독립성, 무결성, λ³΄μ•ˆμ„±, 쀑볡 μ΅œμ†Œν™”λ₯Ό μœ μ§€ν•œλ‹€λŠ” νŠΉμ§•μ„ 가지고 μžˆλ‹€.

 λ°μ΄ν„°μ˜ 독립성은 λ°μ΄ν„°λ² μ΄μŠ€ ꡬ쑰의 λ³€ν™”λ‚˜ λ°μ΄ν„°μ˜ μ €μž₯ μœ„μΉ˜ 등이 변해도 μ‘μš© ν”„λ‘œκ·Έλž¨μ—λŠ” μ•„λ¬΄λŸ° 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€λŠ” 것이닀. 즉, νŒŒμΌμ— μ ‘κ·Όν•˜λŠ” 방식이 μ‘μš©ν”„λ‘œκ·Έλž¨ 내에 ν‘œν˜„λ˜μ—ˆλ˜ νŒŒμΌμ‹œμŠ€ν…œκ³ΌλŠ” 달리 μ‘μš©ν”„λ‘œκ·Έλž¨μ΄ 데이터에 μ’…μ†λ˜μ§€ μ•ŠλŠ” 것이닀.
 λ°μ΄ν„°μ˜ 무결성은 λ°μ΄ν„°μ˜ μ€‘λ³΅μ΄λ‚˜ λˆ„λ½μ΄ μ—†κ³ , 원인과 결과의 μ˜λ―Έκ°€ μ—°μ†μ μœΌλ‘œ 일관적인 μƒνƒœλ₯Ό λ§ν•œλ‹€.
 λ°μ΄ν„°μ˜ λ³΄μ•ˆμ„±μ€ ν—ˆκ°€λœ μ‚¬μš©μžλ§Œμ΄ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” 것이고, 파일 μ‹œμŠ€ν…œμ˜ λ¬Έμ œμ˜€λ˜ 것 쀑 ν•˜λ‚˜μΈ λ°μ΄ν„°μ˜ 쀑볡을 μ΅œμ†Œν™”ν•  수 μžˆλ‹€.

 

 DB의 μ’…λ₯˜

λ°μ΄ν„°λ² μ΄μŠ€λŠ” λ‹€μ–‘ν•œ μ’…λ₯˜κ°€ μžˆλŠ”λ°, 제일 ν”ν•˜κ²Œ μ‚¬μš©λ˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€λŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€(Relational Database, RDBMS)이닀. Oracle, MySQL, MariaDB등이 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ‹€. κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” ν…Œμ΄λΈ”(table)둜 데이터λ₯Ό μ €μž₯ν•˜κ³ , μ•Œλ‹€μ‹œν”Ό ν…Œμ΄λΈ”μ€ ν•˜λ‚˜ μ΄μƒμ˜ μ—΄(column)κ³Ό ν–‰(row)으둜 이루어져 μžˆλ‹€. ν…Œμ΄λΈ”μ—λŠ” λͺ¨λ“  데이터가 각 λ ˆμ½”λ“œλ₯Ό λŒ€ν‘œν•  수 μžˆλŠ” 고유 값인 PK(Primary Key, κ³ μœ ν‚€)κ°€ μ‘΄μž¬ν•œλ‹€. 우리의 μ£Όλ―Όλ“±λ‘λ²ˆν˜Έλ‚˜ λŒ€ν•™ ν•™λ²ˆλ„ PK라고 ν•  수 μžˆλ‹€. 이 PK값을 μ°Έμ‘°ν•΄μ„œ λ‹€λ₯Έ ν…Œμ΄λΈ”κ³Ό μ„œλ‘œ μ—°κ²°ν•  μˆ˜λ„ μžˆλ‹€.

 NoSQL(Non-relational SQL) λ°μ΄ν„°λ² μ΄μŠ€λŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ³΄λ‹€ 덜 μ œν•œμ μ΄κ³ , key와 valueκ°’ ν˜•νƒœλ‘œ μ €μž₯ν•˜κ³ , keyλ₯Ό μ‚¬μš©ν•΄ 데이터 관리 및 접근을 ν•œλ‹€.

 κ³„μΈ΅ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” λ°μ΄ν„°μ˜ 관계λ₯Ό 트리 ꡬ쑰둜 μ •μ˜ν•˜κ³ , λΆ€λͺ¨/μžμ‹ ν˜•νƒœλ₯Ό κ°–λŠ” ꡬ쑰이닀. ν’€μ–΄μ„œ λ§ν•˜λ©΄ μƒμœ„μ˜ λ ˆμ½”λ“œκ°€ 볡수의 ν•˜μœ„ λ ˆμ½”λ“œλ₯Ό κ°–λŠ” ꡬ쑰이닀. ν•˜μ§€λ§Œ 이 λ°μ΄ν„°λ² μ΄μŠ€λŠ” 데이터가 쀑볡될 μˆ˜λ„ μžˆλ‹€λŠ” 단점이 μžˆλ‹€.

 λ„€νŠΈμ›Œν¬ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” κ³„μΈ΅ν˜• λ°μ΄ν„°μ˜ 데이터 쀑볡 문제λ₯Ό ν•΄κ²°ν–ˆκ³ , λ ˆμ½”λ“œ κ°„μ˜ λ‹€μ–‘ν•œ 관계λ₯Ό λ„€νŠΈμ›Œν¬κ°™μ΄ κ·Έλ¬Ό ν˜•νƒœλ‘œ κ°–λŠ” ꡬ쑰이닀. ν•˜μ§€λ§Œ λ³΅μž‘ν•œ ꡬ쑰 λ•Œλ¬Έμ— 좔후에 ꡬ쑰λ₯Ό λ³€κ²½ν•œλ‹€λ©΄ λ§Žμ€ 어렀움이 λ”°λ₯Έλ‹€.

 κ·Έ 외에도 λ‹€μ–‘ν•œ λ°μ΄ν„°λ² μ΄μŠ€κ°€ μžˆλ‹€. κ·Έλž˜ν”„ λ°μ΄ν„°λ² μ΄μŠ€(Graph DB)λŠ” 관계와 λ°©ν–₯을 λ‚˜νƒ€λ‚Ό 수 있고, Document λ°μ΄ν„°λ² μ΄μŠ€λŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ³΄λ‹€ μ’€ 더 자유둭고 μ •κ·œν™” 없이 μ“°κ³  λΆ„μ‚°μ²˜λ¦¬λ₯Ό μž˜ν•΄μ€€λ‹€. ν•˜μ§€λ§Œ 쀑볡을 없애지 μ•ŠκΈ° λ•Œλ¬Έμ— 였λ₯˜κ°€ μ’€ 많고 λ°μ΄ν„°λ² μ΄μŠ€κ°„ 일관성이 λ–¨μ–΄μ§„λ‹€λŠ” 단점이 μžˆλ‹€.  Column-family λ°μ΄ν„°λ² μ΄μŠ€λŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ²˜λŸΌ table ν˜•μ‹μΈλ° 더 μžμœ λ‘­λ‹€. λŒ€μ‹  λ§ˆμ°¬κ°€μ§€λ‘œ μ€‘λ³΅μ²˜λ¦¬λ₯Ό ν•˜μ§€ μ•Šμ•„μ„œ λ³΅μ œμ™€ 뢄산은 μž˜ν•΄μ£Όμ§€λ§Œ λ°μ΄ν„°μ˜ 일관성이 λΆ€μ‘±ν•˜λ‹€. Search Engine은 index 보관에 νŠΉν™”λœ DBMS이닀. μ‹€μ‹œκ°„ 검색어 μ—°κ΄€ 검색어 같은 λΉ λ₯Έ 검색에 μ΅œμ ν™” λ˜μ–΄μžˆλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€λŠ” μ’…λ₯˜κ°€ λ‹€μ–‘ν•΄μ„œ 상황과 λͺ©μ μ— 맞게 μ˜¬λ°”λ₯Έ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 선택할 수 μžˆμ–΄μ•Ό ν•œλ‹€. μ‹€μ œλ‘œ μ˜κ΅­μ—μ„œ 거의 16,000건의 μ½”λ‘œλ‚˜ 사둀가 λ³΄κ³ λ˜μ§€ μ•Šμ€ 일이 μžˆμ—ˆλŠ”λ°, κ·Έ μ΄μœ λŠ” ν™•μ§„μž 수 관리λ₯Ό 맑은 μ—μ΄μ „μ‹œκ°€ 정식 DBMSλ₯Ό 쓰지 μ•Šκ³  엑셀을 μ‚¬μš©ν•΄μ„œμ˜€λ‹€. 엑셀은 λ™μ‹œ 접근이 μ•ˆλ˜κ³  μ²˜λ¦¬ν•  수 μžˆλŠ” λ ˆμ½”λ“œ μˆ˜μ— ν•œκ³„κ°€ 있기 λ•Œλ¬Έμ— DBMS둜 λ³΄μ§€λŠ” μ•Šμ§€λ§Œ, λ°μ΄ν„°μ˜ 양을 κ³ λ €ν•˜μ—¬ μ ν•©ν•œ DBMSλ₯Ό μ„ νƒν–ˆλ‹€λ©΄ λ°œμƒν•˜μ§€ μ•Šμ„ λ¬Έμ œμ˜€λ‹€.

 

 RDBMSμ—μ„œ μ“°λŠ” μ–Έμ–΄ SQL

RDBMSμ—μ„œ, 즉 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ΄€λ¦¬ν•˜κ³  μ‚¬μš©ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ–Έμ–΄λ₯Ό SQL(Structured Query Language, ꡬ쑰적 질의 μ–Έμ–΄)이라고 ν•œλ‹€. SQL은 기본적으둜 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šμ§€λ§Œ, μ’…λ₯˜μ— 따라 λ˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€λ‚˜ ν•„λ“œλͺ…에 λŒ€ν•΄μ„œλŠ” λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜κΈ°λ„ ν•œλ‹€. SQL λͺ…령은 λ°˜λ“œμ‹œ μ„Έλ―Έμ½œλ‘ (;)으둜 λλ‚˜κ³ , κ³ μœ κ°’μ€ λ”°μ˜΄ν‘œ(“)둜 κ°μ‹Έμ€˜μ•Ό ν•œλ‹€.

 SQL은 데이터λ₯Ό μ œμ–΄ν•˜λŠ” DCL (Data Control Language)κ³Ό 데이터λ₯Ό μ •μ˜ν•˜λŠ” DDL (Data Definition Language), 그리고 λ°μ΄ν„°λ² μ΄μŠ€μ˜ 데이터λ₯Ό μ‘°μž‘ν•˜λŠ” DML (Data Manipulation Language) μ΄ μžˆλ‹€. DCLμ—λŠ” grant(κΆŒν•œ μ£ΌκΈ°), revoke(κΆŒν•œ λ°•νƒˆ), commit(ν™•μ‹€ν•œ μ‹€ν–‰), rollback(원볡) 등이 있고, DDLμ—λŠ” create, alter, drop, truncate 등이 있고, DMLμ—λŠ” select, insert, update, delete 등이 μžˆλ‹€.

 μš°μ„  제일 λ¨Όμ € ν•΄μ•Ό ν•˜λŠ” 것은 λ°μ΄ν„°λ² μ΄μŠ€ μƒμ„±ν•˜κ³  μ‚¬μš©ν•˜λŠ” 것이닀. create database DB이름; 으둜 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 생성해주고, use DB이름; λͺ…λ Ήμ–΄λ₯Ό 톡해 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λ„λ‘ ν•΄μ€€λ‹€.
 
그리고 이제 ν…Œμ΄λΈ”μ„ λ§Œλ“€μ–΄μ•Ό ν•˜λŠ”λ°, ν…Œμ΄λΈ”μ„ 생성할 λ•ŒλŠ” create λͺ…λ Ήμ–΄λ₯Ό 톡해 λ§Œλ“€μ–΄μ£Όκ³ , κ·Έ μ•ˆμ—λŠ” 열이름과 λ°μ΄ν„°νƒ€μž…, nullν—ˆμš©μ—¬λΆ€ 그리고 기타 속성이 있으면 μ°¨λ‘€λ‘œ μž…λ ₯ν•΄μ£Όλ©΄ λœλ‹€. λ§Œμ•½ μ—΄μ˜ μ΄λ¦„μ΄λ‚˜ 속성을 λ³€κ²½ν•˜κ³  μ‹Άλ‹€λ©΄ alter λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•΄ λ³€κ²½ν•˜κ±°λ‚˜, drop λͺ…λ Ήμ–΄λ‘œ ν…Œμ΄λΈ” 자체λ₯Ό μ—†μ•΄λ‹€κ°€ λ‹€μ‹œ λ§Œλ“€ μˆ˜λ„ μžˆλ‹€.
 
ν…Œμ΄λΈ”μ„ λ§Œλ“€μ—ˆμœΌλ©΄ 이제 ν…Œμ΄λΈ” μ•ˆμ— 데이터λ₯Ό μž…λ ₯ν•΄μ£Όλ©΄ λ˜λŠ”λ°, 데이터 μž…λ ₯은 insert into ν…Œμ΄λΈ” 이름 values (데이터); 둜 λ„£μ–΄μ£Όκ³ , μž…λ ₯ν•œ 데이터λ₯Ό μ‚­μ œν•˜κ³  μ‹Άλ‹€λ©΄ delete from ν…Œμ΄λΈ”μ΄λ¦„ where PKκ°’; μ„ μ‚¬μš©ν•΄μ£Όλ©΄ λœλ‹€.
 PK
λŠ” Primary Key(κ³ μœ ν‚€)둜, ν…Œμ΄λΈ” ν–‰μ˜ μ—¬λŸ¬ 정보듀 쀑에 행을 μ‹λ³„ν•˜κ³  λŒ€ν‘œν•  수 μžˆλŠ” 값이닀. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— λΉ„μ–΄ μžˆμ–΄λ„ μ•ˆ 되고 μ€‘λ³΅λ˜μ–΄μ„œλ„ μ•ˆλœλ‹€. PKλ₯Ό λ‹€λ₯Έ ν…Œμ΄λΈ”μ— μ°Έμ‘°ν•΄μ„œ μ‚¬μš©ν•  μˆ˜λ„ μžˆλŠ”λ°, μ΄λ•Œ μ°Έμ‘° ν…Œμ΄λΈ”μ—μ„œ μ°Έμ‘°λ˜λŠ” 값을 FK(Foreign Key, μ™Έλž˜ν‚€)라고 ν•œλ‹€. PK값을 μ‚¬μš©ν•΄μ•Ό μ›ν•˜λŠ” 데이터가 λ”± ν•˜λ‚˜λ§Œ μ‚­μ œλ˜κΈ° λ•Œλ¬Έμ— PK값을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€. μž…λ ₯ν•œ 데이터λ₯Ό μˆ˜μ •ν•˜κ³  μ‹Άλ‹€λ©΄ update ν…Œμ΄λΈ”μ΄λ¦„ set μˆ˜μ •ν•˜κ³ μ‹Άμ€μ—΄μ΄λ¦„='μˆ˜μ •ν›„λ°μ΄ν„°' where μˆ˜μ •ν•˜κ³ μ‹Άμ€μ—΄μ΄λ¦„='μˆ˜μ •μ „λ°μ΄ν„°'; 둜 μˆ˜μ •ν•  수 μžˆλ‹€.
 
λ§ˆμ§€λ§‰μœΌλ‘œ ν…Œμ΄λΈ”μ—μ„œ 데이터λ₯Ό κ°€μ Έμ™€μ„œ μ½λŠ” 법은 select λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•œλ‹€ μ›ν•˜λŠ” 데이터듀을 자주 μ‚¬μš©ν•œλ‹€λ©΄ viewλ₯Ό λ§Œλ“€μ–΄μ„œ 더 νŽΈν•˜κ²Œ 데이터λ₯Ό 뢈러올 μˆ˜λ„ 있고, join을 톡해 λ§Žμ€ 데이터듀을 μ—°κ΄€ν•΄μ„œ 뢈러올 수 μžˆλ‹€.

SQL문은 λ°μ΄ν„°λ² μ΄μŠ€λ§ˆλ‹€ μ‘°κΈˆμ”© λ‹€λ₯΄λ‹€. ν•˜μ§€λ§Œ ν‘œμ€€ SQL은 κ°™κΈ° λ•Œλ¬Έμ— ν•˜λ‚˜λ₯Ό μ΅ν˜€λ‘λ©΄ λ‹€λ₯Έ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ 문법 λ‹€λ₯Έ κ²ƒλ§Œ μ£Όμ˜ν•΄μ„œ μ‚¬μš©ν•˜λ©΄ 어렡지 μ•Šκ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

728x90

"); wcs_do();