[TIL] CS : Database

AcidΒ·2021λ…„ 9μ›” 11일
0

πŸ–₯️ CS

λͺ©λ‘ 보기
1/1
post-thumbnail

Database에 λŒ€ν•œ κ°œκ΄„μ μΈ λ‚΄μš©μœΌλ‘œ DB, DBMS, RDBMS, ACID 등에 λŒ€ν•œ λ‚΄μš©μ„ ν¬ν•¨ν•©λ‹ˆλ‹€. 😊

λ°μ΄ν„°λ² μ΄μŠ€λž€ 무엇인가 πŸ’Ύ

데이터(Data)λŠ” 무엇인가. CSμ—μ„œ λ°μ΄ν„°λž€ 컴퓨터가 μ²˜λ¦¬ν•  수 μžˆλŠ” 문자, μ†Œλ¦¬, κ·Έλ¦Ό λ“±μ˜ ν˜•νƒœλ‘œ 된 자료λ₯Ό μ˜λ―Έν•œλ‹€. 컴퓨터 μ•ˆ κΈ°λ‘μ΄λΌλŠ” μ˜λ―Έλ‹€. κ·ΈλŸ¬ν•œ 데이터가 일반적으둜 μ •λ¦¬λœ λ°μ΄ν„°μ˜ 집합을 λ°μ΄ν„°λ² μ΄μŠ€(Database)라고 μ •μ˜ν•œλ‹€.

κ·Έλ ‡λ‹€λ©΄ λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ›Ήμ—μ„œ μ–΄λ– ν•œ κ³Όμ •μœΌλ‘œ μš”μ²­λ˜κ³  μ „λ‹¬λ˜λŠ”μ§€ μ•Œμ•„λ³΄μž.

크게 ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„, λ°μ΄ν„°λ² μ΄μŠ€λ‘œ κ΅¬λΆ„μ§€μ—ˆμ„ λ•Œ, ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„μ— ν•„μš”ν•œ 데이터λ₯Ό μš”μ²­ν•œλ‹€. κ·Έλ ‡λ‹€λ©΄ μ„œλ²„λŠ” μš”μ²­ν•œ 정보λ₯Ό κ°€κ³΅ν•˜κ³  μ „λ‹¬ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ—, λ°μ΄ν„°λ² μ΄μŠ€λ‘œ λΆ€ν„° 정보λ₯Ό μš”μ²­ν•˜κ³  그에 λ”°λ₯Έ 응닡을 λ°›λŠ” 과정이 μ§„ν–‰λœλ‹€. 이 κ³Όμ •μ—μ„œ DBMS(Database Management System)κ°€ κ°œμž…ν•˜μ—¬ κ·Έ 역할을 μˆ˜ν–‰ν•œλ‹€.

DBMSλŠ” 말 κ·ΈλŒ€λ‘œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ΄€λ¦¬ν•˜λŠ” μ‹œμŠ€ν…œμœΌλ‘œ μ„œλ²„μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ— μš”μ²­ν•  λ•Œ 이λ₯Ό μ œμ–΄ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 역할을 μˆ˜ν–‰ν•˜λŠ” μ‹œμŠ€ν…œμ΄λ‹€. ν•œ λ§ˆλ””λ‘œ, μ €μž₯된 데이터λ₯Ό κ°€μ Έμ˜€λŠ” μ‹€μ§ˆμ  주체인 것이닀.

κ·Έλ ‡λ‹€λ©΄ 기둝을 μ €μž₯ν•˜κΈ° μœ„ν•΄ DB/DBSM을 μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ? 🧐

DB의 경우 데이터 보쑴과 체계적 κ΄€λ¦¬μ˜ 츑면이 μžˆλ‹€.

μš°μ„  데이터 보쑴의 경우 μž₯κΈ°κ°„ λ³΄κ΄€ν•΄μ•Όν•˜λŠ” λͺ©μ μ˜ λ°μ΄ν„°μ˜ 경우 νœ˜λ°œμ„± 데이터 μ €μž₯ 방식은 λΉ„νš¨μœ¨μ μΈ κ²°κ³Όλ₯Ό λΆˆλŸ¬μ˜¨λ‹€. 그렇기에 μž₯κΈ°κ°„ 데이터 보관을 ν•˜λ €λ©΄ μ΄λŸ¬ν•œ λ°μ΄ν„°λ² μ΄μŠ€ ν˜•νƒœλ‘œ 보관함이 μš©μ΄ν•˜λ‹€λŠ” μž₯점이 μžˆλ‹€.

체계적 κ΄€λ¦¬μ˜ 경우 λ…Όλ¦¬μ μœΌλ‘œ μ—°κ΄€μ„± μžˆλŠ” 데이터λ₯Ό λΆ„μ‚°λœ μƒνƒœκ°€ μ•„λ‹Œ 정리가 된 μƒνƒœλ‘œ μ œμ–΄ν•˜κ³  κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ—, 데이터 μš”μ²­μ— μ˜ν•΄ 이λ₯Ό κ°€μ Έμ˜¬ λ•Œλ„ 효율적으둜 관리할 수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

DBMSλŠ” 생산성, κΈ°λŠ₯μ„±, μ‹ λ’°μ„± 등을 μ‚¬μš©μ˜ 근거둜 말할 수 μžˆλ‹€.

생산성 λΆ€λΆ„μ—μ„œ μ„€λͺ…ν•˜μžλ©΄ 데이터 μš”μ²­μ˜ λͺ©μ μ€ 크게 λ„€ κ°€μ§€λ‘œ κ΅¬λΆ„λ˜λŠ”λ° 이것을 CRUD(Create, Read, Update, Delete)라고 ν•œλ‹€. μ΄λŸ¬ν•œ λ°μ΄ν„°μ˜ 관리 및 μ—°μ‚° κΈ°λŠ₯을 DBMSκ°€ μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— μœ μš©ν•˜λ‹€κ³  ν•  수 μžˆλ‹€.

κΈ°λŠ₯μ„± μΈ‘λ©΄μ—μ„œλŠ” λ‹¨μˆœνžˆ ν•˜λ‚˜μ˜ λ°μ΄ν„°λ² μ΄μŠ€ λ§Œμ„ 일방ν–₯으둜 ν™œμš©ν•˜λŠ” κ²ƒλ§Œμ΄ μ•„λ‹ˆλΌ λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ μ›ν™œν™˜ 관리λ₯Ό 진행할 수 μžˆλ‹€(볡수의 μœ μ € μš”μ²­ λŒ€μ‘ κ°€λŠ₯ λ“±)λŠ” 점이 κ·Έ μ΄μœ κ°€ λœλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ, μ‹ λ’°μ„± λΆ€λΆ„μ—μ„œ ν•œ 곳에 μ§‘μ€‘λ˜λŠ” 데이터λ₯Ό λΆ„λ¦¬ν•˜μ—¬ 관리할 수 μžˆμ–΄, λΆ€ν•˜κ°€ λΆ„μ‚°λ˜κ³  데이터λ₯Ό 주기적으둜 λ°±μ—…ν•˜μ—¬ 결과적으둜 μ•ˆμ „ν•œ 데이터 관리가 κ°€λŠ₯ν•˜λ‹€λŠ” 점이 μžˆλ‹€.

근데 λ°μ΄ν„°λ² μ΄μŠ€ κΌ­ μ•Œμ•„μ•Ό ν•΄μš”? 😟

ν”„λ‘ νŠΈμ—”λ“œκ°€ ꡳ이 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μ•Œμ•„μ•Ό ν•˜λƒκ³  생각이 λ“€ 수 μžˆμ§€λ§Œ, κ·Έλ ‡κ²Œ μƒκ°ν•˜λ©΄ 큰 μ˜€μ‚°μ΄λ‹€. μ–΄μ¨Œλ“  ν”„λ‘ νŠΈμ—”λ“œ λ‹¨μ—μ„œ ν•˜λŠ” μ—…λ¬΄λŠ” 결과적으둜 λ°±μ—”λ“œμ—μ„œ λ„˜μ–΄μ˜¨ 데이터λ₯Ό ν™œμš©ν•˜μ—¬ μ™„μ„±ν•  수 μžˆλŠ” 뢀뢄이고 그러기 μœ„ν•΄μ„  λ„˜μ–΄μ˜€λŠ” 데이터가 μ–΄λ–€ ν˜•μ‹μΈμ§€, μ–΄λ– ν•œ λ°©μ‹μœΌλ‘œ λ„˜μ–΄μ˜€λŠ”μ§€ 등에 λŒ€ν•œ λ‚΄μš©μ€ 이해λ₯Ό 돕기 μœ„ν•΄ μΆ©λΆ„νžˆ ν•„μš”ν•œ λ‚΄μš©μ΄λ‹€.

λ˜ν•œ κ°œλ°œμ€ ν˜Όμžλ‚˜ ν•œμͺ½μ˜ μ˜μ—­μ—μ„œλ§Œ μ§„ν–‰ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, μ„œλ‘œ λ‹€λ₯Έ 뢀뢄듀이 ν† λ‘ κ³Ό ν•©μ˜μ— μ˜ν•΄ μ΄λ£¨μ–΄μ§€λŠ” 것이기 λ•Œλ¬Έμ—, 이에 λŒ€ν•œ 뢀뢄을 λ¬΄μ‹œν•˜κ³  "μ•„ λ‚˜λŠ” κ·Έκ±° 달라고 ν–ˆλŠ”λ°, μ™œ 말을 λͺ» μ•Œμ•„λ¨Ήμ§€?" λΌλŠ” λ§ˆμΈλ“œλ₯Ό 접어두기 μœ„ν•΄μ„  자료 κ΅¬μ‘°λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ μ΄ν•΄λŠ” ν•„μˆ˜ λΆˆκ°€κ²°ν•œ 뢀뢄일 것이닀.

κ·ΈλŸ¬λ‹ˆ μ•žμœΌλ‘œ 진행될 ν”„λ‘œμ νŠΈμ˜ κ³Όμ •μ—μ„œ μ„œλ‘œμ˜ 잘잘λͺ» 따지닀가 뼈만 남은 μ›Ή νŽ˜μ΄μ§€λ₯Ό 남기기 μ‹«λ‹€λ©΄ λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ κ°„λ‹¨νžˆλΌλ„ λ¨Έλ¦Ώ 속에 μƒˆκΈ°κ³  κ°€μž.

(그리고 이거 배우면 λ‚˜λ¦„ μž¬λ°ŒκΈ°λ„ ν•œλ°...πŸ˜…)

RDBMS(Relational DataBase Management System) πŸ–‡οΈ

DBMSλŠ” λ°°μ›Œμ„œ μ•Œκ² λŠ”λ°, RDBMSλŠ” λ¬΄μ—‡μΌκΉŒ? RDBMSλ₯Ό ν•΄μ„ν•˜λ©΄ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œμ΄λΌλŠ” 의미λ₯Ό κ°–λŠ”λ‹€. κ·Έλ ‡λ‹€λ©΄ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•΄ μš°μ„ μ μœΌλ‘œ μ•Œμ•„λ³΄μž.

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€(RDB)λž€ κ΄€κ³„ν˜• 데이터 λͺ¨λΈμ— 기초λ₯Ό λ‘” λ°μ΄ν„°λ² μ΄μŠ€μ΄λ‹€. 이 말이 무슨 말이냐면, 데이터λ₯Ό κ΄€λ¦¬ν•˜λŠ” 방식에 μžˆμ–΄ 데이터 κ°„μ˜ 관계λ₯Ό μ€‘μ‹¬μœΌλ‘œ 이λ₯Ό μ§„ν–‰ν•œλ‹€λŠ” λœ»μ΄λ‹€. λ‹€μŒ κ·Έλ¦Όλ₯Ό 보면 이λ₯Ό 더 μ‰½κ²Œ 이해할 수 μžˆλ‹€.

μœ„ 그림은 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ–΄λ– ν•œ ꡬ쑰λ₯Ό κ°–κ³  μžˆλŠ”μ§€ 보여쀀닀. 같은 λΆ„λ₯˜λ‘œ 묢이 μ—¬λŸ¬κ°€μ§€ λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ„œλ‘œ κ°„μ˜ 관계에 따라 μ—°κ²°λ˜μ–΄ μžˆλ‹€.

RDBMSμ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€λŠ” ν–‰(Row)κ³Ό μ—΄(Column)둜 κ΅¬μ„±λ˜μ–΄ μžˆλŠ” μ—‘μ…€μ˜ ν˜•μ‹κ³Ό μœ μ‚¬ν•œ ν˜•νƒœλ₯Ό 가진닀. μ΄λŸ¬ν•œ ν‘œ ν˜•μ‹μ˜ 2차원 데이터가 ν…Œμ΄λΈ”(Table)에 ν•΄λ‹Ήν•˜κ³  μ΄λŸ¬ν•œ ν…Œμ΄λΈ”λ“€μ΄ μœ„μ™€ 같이 관계λ₯Ό 이루고 μžˆλŠ” 것이 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μΈ 것이닀. 그리고 μ΄λŸ¬ν•œ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ΄€λ¦¬ν•˜λŠ” 것이 RDBMSλ‹€. λŒ€ν‘œμ μΈ RDBMS둜 Oracle, MySQL, PostgreSQL 등이 이에 ν•΄λ‹Ήν•œλ‹€.

πŸ’‘ NoSQL(Not Only SQL)

엑셀이 μž₯κΈ°κ°„ λ™μ•ˆ 사무싀을 μ§€λ°°ν–ˆμ§€λ§Œ, 더이상 RDBMSλ‘œλŠ” μ²˜λ¦¬ν•  수 없을 만큼 λ³΅μž‘ν•˜κ³  λ°©λŒ€ν•œ 데이터듀이 μƒκ²¨λ‚˜κΈ° μ‹œμž‘ν–ˆλ‹€.

κ·ΈλŸ¬ν•œ μ—°μœ λ‘œ NoSQL에 λŒ€ν•œ μ€‘μš”μ„±μ΄ κ°•μ‘°λ˜μ—ˆλ‹€. NoSQLμ΄λž€ "Not Only SQL"의 μ•½μžλ‘œ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ™€λŠ” λ‹€λ₯΄κ²Œ λ°μ΄ν„°λ‚˜ ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό μ •μ˜ν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ—, 자유둭게 데이터λ₯Ό μ €μž₯ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

그리고 key , Value κ°’μœΌλ‘œλ§Œ λ‚˜νƒ€λ‚΄λ©° ꡳ이 μŠ€ν‚€λ§ˆ κ·œκ²©μ— λ§žμΆ°μ„œ 데이터λ₯Ό 닀루지 μ•Šμ•„λ„ λœλ‹€λŠ” μž₯점 λ•Œλ¬Έμ— λŒ€μš©λŸ‰ λ°μ΄ν„°μ˜ 관리에 μœ λ¦¬ν•˜λ‹€.

ν•˜μ§€λ§Œ RDBMSκ°€ μ’€ 더 μ •ν˜•ν™” 된 λ°μ΄ν„°λΌλŠ” μ μ—μ„œ μ•„μ§κΉŒμ§€ ν™•μ‹€ν•œ μž₯점이 μžˆκΈ°μ—, 각각의 ν•„μš” λΆ„μ•Όμ—μ„œ 적절히 μ‚¬μš© 됨을 μΈμ§€ν•˜μž.


πŸ’‘ Primary key

2차원 배열은 ν–‰κ³Ό 열을 κ°€μ§€λŠ”λ° 주둜 각 ν–‰μ˜ 첫 번째 μš”μ†ŒλŠ” ν•΄λ‹Ή μ—΄μ˜ μΈλ±μŠ€κ°€ λ°°μ •λ˜μ–΄ μžˆλŠ” 것을 확인할 수 μžˆλ‹€. 이λ₯Ό Primary key 라고 ν•˜λ©° κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ°μ΄ν„°μ˜ μ‹λ³„μžλ‘œ μ΄μš©ν•˜λŠ” μš©λ„λ‘œ 주둜 쓰인닀.


ν…Œμ΄λΈ” κ°„μ˜ 관계 πŸ”—

μ•žμ—μ„œ λ§ν–ˆλ“―μ΄ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” 각 ν…Œμ΄λΈ”μ΄ μƒν˜Έ 연관성을 가지며, μ΄λŠ” μ™„μ „ν•œ 독립이 μ‘΄μž¬ν•˜μ§€ λͺ»ν•œλ‹€λŠ” 것이닀. 그리고 κ·ΈλŸ¬ν•œ κ΄€κ³„λŠ” ν…Œμ΄λΈ” κ°„μ˜ 관계가 μ–΄λ–»κ²Œ λ˜μ–΄ μžˆλŠ”κ°€μ— λ”°λΌμ„œλ„ ꡬ뢄이 λ˜λŠ”λ°, μ΄λŠ” 크게 1:1(One to One), 1:M(One to Many), M:M(Many to Many)둜 κ΅¬λΆ„λœλ‹€.

μš°μ„  1:1은 각각의 ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터가 ν•˜λ‚˜λ‹Ή ν•˜λ‚˜μ˜ λ°μ΄ν„°λ§Œ μ—°κ²°λ˜μ–΄ μžˆλŠ” 것이닀. 이에 λŒ€ν•œ μ˜ˆμ‹œλ‘œ μ‚¬λžŒκ³Ό μ£Όλ―Όλ“±λ‘λ²ˆν˜ΈλΌλŠ” 각각의 ν…Œμ΄λΈ”μ΄ μ‘΄μž¬ν•  λ•Œκ°€ μžˆλ‹€.

각각의 μ‚¬λžŒμ˜ 이름이 μ ν˜€μžˆλŠ” ν…Œμ΄λΈ”κ³Ό κ·Έ μ‚¬λžŒλ“€μ˜ μ£Όλ―Όλ“±λ‘λ²ˆν˜Έκ°€ μ €μž₯λ˜μ–΄ μžˆλŠ” ν…Œμ΄λΈ”μ΄ μ‘΄μž¬ν•  λ•Œ, 각각의 μ‚¬λžŒλ“€μ€ ν•˜λ‚˜μ˜ μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ λ§Œμ„ κ°€μ§ˆν…Œκ³ , λ°˜λŒ€λ‘œλ„ 각각의 μ£Όλ―Όλ“±λ‘λ²ˆν˜ΈλŠ” ν•œ μ‚¬λžŒμ˜ μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ λ°–μ•  될 수 μ—†λ‹€. μ΄λ ‡κ²Œ 각각의 λ°μ΄ν„°μ˜ 관계가 1:1둜 이루어진 관계λ₯Ό 1:1 관계라고 ν•œλ‹€.

λ‹€μŒμœΌλ‘œ 1:M은 ν•˜λ‚˜μ˜ 데이터가 λ‹€λ₯Έ ν…Œμ΄λΈ”μ— μ—¬λŸ¬ 데이터와 κ΄€λ ¨λ˜μ–΄ μžˆλŠ” ν˜•νƒœμ˜ 관계이닀. 이에 λŒ€ν•œ μ˜ˆμ‹œλ‘œ μ‚¬λžŒκ³Ό κ·Έ μ‚¬λžŒλ“€μ˜ κ°€μ‘±μ˜ 이름듀이 ν¬ν•¨λœ ν…Œμ΄λΈ”μ˜ 관계λ₯Ό μ˜ˆμ‹œλ‘œ λ“€ 수 μžˆλ‹€.

μ—­μ‹œλ‚˜ ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μ—λŠ” μ‚¬λžŒλ“€μ˜ 이름이 μ €μž₯λ˜μ–΄ 있고, λ‹€λ₯Έ ν…Œμ΄λΈ”μ—λŠ” κ·Έ μ‚¬λžŒμ˜ κ°€μ‘±μ˜ 이름듀이 ν¬ν•¨λœ λͺ…단이 μžˆλ‹€. ν•œ μ‚¬λžŒμ€ μ—¬λŸ¬ λͺ…μ˜ κ°€μ‘±μ˜ 이름과 λŒ€μ‘μ΄ 될 수 μžˆμ§€λ§Œ, ν•΄λ‹Ή 가쑱듀은 ν•œ μ‚¬λžŒκ³Ό μ—°κ΄€λ˜μ–΄ μžˆλŠ” ν˜•νƒœμ˜ 관계λ₯Ό 확인할 수 μžˆλ‹€. μ΄λŸ¬ν•œ 관계λ₯Ό 1:M 관계라고 μ •μ˜ν•  수 μžˆλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ M:M κ΄€κ³„λŠ” λ‹€μˆ˜μ˜ 데이터와 λ‹€μˆ˜μ˜ 데이터가 볡수 λŒ€ 볡수둜 연결될 수 μžˆλŠ” 관계λ₯Ό λ§ν•œλ‹€. M:M κ΄€κ³„λŠ” ν•œ μ‚¬λžŒκ³Ό κ·Έ μ‚¬λžŒμ΄ μž…μ€ μ˜·λ“€μ„ μ €μž₯ν•œ ν…Œμ΄λΈ” κ°„μ˜ κ΄€κ³„λ‘œ μ„€λͺ…ν•  수 μžˆλ‹€.

이 경우 ν•œ μ‚¬λžŒλ‹Ή 머리뢀터 λ°œλκΉŒμ§€ λ‹€μ–‘ν•œ μ˜·μ„ μž…μ—ˆμ„ν…Œκ³ , κ·Έ μ˜·λ“€μ€ 각각의 λΈŒλžœλ“œκ°€ μžˆμ„ 것이닀. ν•˜μ§€λ§Œ, λ‹€λ₯Έ μ‚¬λžŒμ΄λΌλ„ 같은 μ˜·μ„ μž…μ—ˆμ„ κ²½μš°κ°€ μ‘΄μž¬ν•˜κ³  μ΄λ ‡κ²Œ 되면 ν•œ μ‚¬λžŒμ΄ μ—¬λŸ¬κ°€μ§€ μ˜·μ„ μž…κ³  μžˆμ§€λ§Œ, ν•˜λ‚˜μ˜ μ˜·μ΄λΌλ„ μ—¬λŸ¬ μ‚¬λžŒλ“€μ΄ κ³΅ν†΅μ μœΌλ‘œ μž…κ³  μžˆμ„ 수 μžˆλŠ” 것이닀. μ΄λŸ¬ν•œ 관계λ₯Ό M:M 관계라고 μ •μ˜ν•œλ‹€.

νŠΈλžœμž­μ…˜(Transaction) 🧰


νŠΈλžœμž­μ…˜(Transaction)μ΄λž€ κ΄Έκ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯ 쀑 ν•˜λ‚˜λ‘œ, λ°μ΄ν„°λ² μ΄μŠ€ μƒνƒœλ₯Ό λ³€ν™˜μ‹œν‚€λŠ” ν•˜λ‚˜μ˜ 논리적 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μž‘μ—…μ˜ λ‹¨μœ„ λ˜λŠ” ν•œκΊΌλ²ˆμ— λͺ¨λ‘ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•˜λŠ” 일련의 연산듀을 μ˜λ―Έν•œλ‹€.

νŠΈλžœμž­μ…˜μ€ ACIDλ₯Ό 보μž₯ν•˜λ©΄μ„œ μ•žμ—μ„œ μ–ΈκΈ‰ν•œ 일련의 μž‘μ—…μ΄ ν•˜λ‚˜μ˜ μž‘μ—…μ²˜λŸΌ μ·¨κΈ‰λ˜λŠ” 것이라, λͺ¨λ‘ 성곡(Commit) μ•„λ‹ˆλ©΄ λͺ¨λ‘ μ‹€νŒ¨(Rollback)만이 μžˆλŠ” 것을 μ˜λ―Έν•œλ‹€.

κ·Έλ ‡λ‹€λ©΄ 이 ACID에 λŒ€ν•΄ κ°„λ‹¨νžˆ μ•Œμ•„λ³΄μž.

μ›μžμ„±(Atomicity)


μ›μžμ„±μ΄λž€ νŠΈλžœμž­μ…˜μ˜ 연산은 λ°μ΄ν„°λ² μ΄μŠ€μ— μ „λΆ€ λ°˜μ˜λ˜λ“ μ§€, μ•„λ‹ˆλ©΄ μ „ν˜€ 반영이 λ˜μ§€ μ•Šλ“ μ§€ ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀.

νŠΈλžœμž­μ…˜ λ‚΄ λͺ¨λ“  λͺ…령은 λ°˜λ“œμ‹œ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•˜λ©° ν•˜λ‚˜μ˜ λͺ…령이라도 였λ₯˜κ°€ λ°œμƒν•œλ‹€λ©΄ νŠΈλžœμž­μ…˜ μ „λΆ€κ°€ μ·¨μ†Œ 되고 μ›λž˜λŒ€λ‘œ λ˜λŒμ•„κ°„λ‹€.

일관성(Consistency)


μΌκ΄€μ„±μ΄λž€ νŠΈλžœμž­μ…˜μ˜ 싀행이 μ™„λ£Œλ˜μ—ˆμ„ λ•Œ, λ°μ΄ν„°λ² μ΄μŠ€μ˜ μƒνƒœκ°€ 일관성이 μžˆμ–΄μ•Ό 함을 μ˜λ―Έν•œλ‹€. μ‹œμŠ€ν…œμ˜ κ³ μ • μš”μ†ŒλŠ” νŠΈλžœμž­μ…˜ 전후와 관계 없이 μƒνƒœκ°€ κ°™μ•„μ•Ό ν•œλ‹€.

독립성(Isolation)


독립성은 ν•˜λ‚˜μ˜ λ‘˜ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆμ—λŠ” λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ κ°œμž…ν•˜μ§€ λͺ»ν•¨μ„ μ˜λ―Έν•œλ‹€. λ˜ν•œ μˆ˜ν–‰ 쀑인 νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλ˜κΈ° μ „κΉŒμ§€λŠ” λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ˜ μˆ˜ν–‰ κ²°κ³Όλ₯Ό μ°Έμ‘°ν•  수 μ—†λ‹€.

지속성(Durability)


λ§ˆμ§€λ§‰μœΌλ‘œ, 지속성은 μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œν•œ νŠΈλžœμž­μ…˜μ΄ λ§Œλ“  κ²°κ³ΌλŠ” μ‹œμŠ€ν…œ κ³ μž₯이라도 μ €μž₯이 되면 μ§€μ†μ μœΌλ‘œ μœ μ§€ν•œλ‹€λŠ” 것이닀.

πŸ’‘ νŠΈλžœμž­μ…˜μ˜ μ—°μ‚°(Commit/Rollback)

μœ„μ—μ„œ μ–ΈκΈ‰ν•œ νŠΈλžœμž­μ…˜μ˜ 연산에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

μš°μ„  Commit 연산은 ν•œ κ°€μ§€μ˜ νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ 마무리λ₯Ό ν•˜κ³  μΌκ΄€λœ μƒνƒœλ₯Ό μœ μ§€ν•  λ•Œ, 연산이 μ™„λ£ŒλμŒμ„ κ΄€λ¦¬μžμ—κ²Œ μ•Œλ €μ£ΌλŠ” 것이닀.

그리고 Rollback 연산은 ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ μ²˜λ¦¬κ°€ 비정상적인 μ’…λ£Œκ°€ λ˜μ–΄ 일관성이 κΉ¨μ‘Œμ„ λ•Œ, 일뢀 정상 처리된 것이 μžˆλ”λΌλ„ 일관성을 μœ„ν•΄, ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ΄ ν–‰ν•œ λͺ¨λ“  연산을 μ·¨μ†Œν•˜λŠ” 것이며, Rollback의 경우 ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ„ μž¬μ‹œμž‘ ν˜Ήμ€ νκΈ°ν•œλ‹€.


마무리 🧾


μœ„ λ‚΄μš©λ“€μ„ μš”μ•½ν•˜λ©΄ λ‹€μŒκ³Ό 같이 정리할 수 μžˆλ‹€.

  • DB(Database)λŠ” λ°μ΄ν„°μ˜ 집합이고, DBMS(Database Management System)λŠ” 이λ₯Ό μ€‘κ°„μ—μ„œ κ΄€λ¦¬ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ‹€.
  • DBλŠ” 데이터 보쑴과 체계적 κ΄€λ¦¬μ˜ μΈ‘λ©΄μ—μ„œ, DBMSλŠ” 생산성, κΈ°λŠ₯μ„±, μ‹ λ’°μ„±μ˜ μΈ‘λ©΄μ—μ„œ 이점을 κ°–λŠ”λ‹€.
  • RDB(Relational Database)λŠ” λ°μ΄ν„°λ² μ΄μŠ€ 쀑 데이터 κ°„ 관계에 쀑심을 λ‘” λ°μ΄ν„°λ² μ΄μŠ€κ³ , RDBMSλŠ” 이λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μ‹œμŠ€ν…œμœΌλ‘œ, Oracle, MySQL, PostgreSQL 등이 이에 ν•΄λ‹Ήν•œλ‹€.
  • ν…Œμ΄λΈ” κ°„μ˜ 관계에 따라 1:1, 1:M, M:M κ΄€κ³„λ‘œ κ΅¬λΆ„λœλ‹€.
  • νŠΈλžœμž­μ…˜(Transaction)μ΄λž€ 논리적 κΈ°λŠ₯ μˆ˜ν–‰μ„ μœ„ν•œ μž‘μ—… λ‹¨μœ„ 내지 일련의 과정을 μ˜λ―Έν•œλ‹€.
  • νŠΈλžœμž­μ…˜μ€ ACIDλ₯Ό 보μž₯ν•˜λ©° 일련의 μž‘μ—…μ΄ μ „μ²΄μ˜ 성곡(commit) ν˜Ήμ€ μ‹€νŒ¨(Rollback)둜만 이루어진닀.


그럼 λ‹€μŒ 토픽인 HTTPμ—μ„œ λ‹€μ‹œ λŒμ•„μ˜€κ² λ‹€.

profile
μ΄μœ μ— μ§‘μ°©ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ 개발자 μ§€λ§μƒμž…λ‹ˆλ‹€ 🧐

0개의 λŒ“κΈ€