Database란 데이터를 저장 및 보존하는 시스템입니다.
데이터베이스를 사용하는 이유는
Application에서는 데이터가 메모리(RAM)상에서 존재합니다.
그리고 메모리(RAM)에 존재하는 데이터는 보존이 되지 않습니다.
그러므로 데이터를 장기간 저장하고 효과적으로 관리하기 위해
데이터베이스를 사용합니다.
일반적으로 Database는 크게 둘로 나뉩니다.
1. 관계형 데이터베이스
2. 비관계형 데이터베이스
RDBMS(Relational DataBase Management System)
TIL no.65 - Django - Relationships에서 모델의 관계에 대해 알아봤는데
이처럼 관계형 데이터 모델에 기초를 둔 데이터베이스 시스템을 RDBMS라고 합니다.
하나의 테이블에 모든 정보를 넣으면 동일한 정보들이 불필요하게 중복되어 저장됩니다.
그러므로, 더 많은 디스크를 사용하게 되고 잘못된 데이터가 저장 될 가능성이 높아집니다.
대표적인 관계형 데이터베이스에는 MySQL과 PostgreSQL이 있습니다.
RDBMS에서 데이터를 저장하기 위해서, column을 정해주었는데 비관계형 데이터베이스는 데이터를 저장하기 전에 정의할 필요가 없습니다.
대표적인 NoSQL로는 MongoDB, Redis, Cassandra가 있습니다.
트랜잭션이란 질의(query)를 하나로 묶음 처리해서 만약 중간에 실행이 중단됐을 경우, 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 commit을 하는 실행 단위를 의미합니다.
즉, 한 번 질의가 실행되면 질의가 모두 수행되거나 모두 수행되지 않는 작업수행의 논리적 단위입니다.
쉽게 설명하면 중간에 작업이 실패하면 다시 돌아가는 것입니다.
Atomicity, Consistency, Isolation, Durability의 약어입니다.
데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 뜻합니다.
Atomicity(원자성)
작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 성질.
예를 들어, 자금 이체의 경우 송금자의 통장에서 돈을 차감하는 것은 성공했지만 입금되는 통장의 돈을 증가시키는 작업이 실패할 수 있는데 이처럼 중간단계까지만 성공하는 일이 없게끔 하는 것입니다.
분자가 아니라 쪼갤 수 없는 원자(Atom)를 떠올리면 됩니다.
Consistency(일관성)
Transaction이 실행을 성공적으로 완료하면 언제나 일관성있는 데이터베이스 상태로 유지하는 것을 의미합니다.
작업을 수행하면서 데이터 베이스의 조건을 위배하면 안됩니다.
이 조건을 설정함으로써 일관성을 유지할 수 있습니다.
Isolation(고립성)
트랜잭션 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미합니다.
Durability(지속성)
성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미합니다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미합니다. 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있습니다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있습니다.
말 그대로 모든 걸 기록하는 데이터라고 생각하면 됩니다.
굉장히 광범위한 개념입니다.
예를 들어, 인스타그램을 하는 유저가 A광고가 있는 화면에서 20초간 스크롤하지 않았다던가 하는 정보들입니다.