# TIL-20210408
# Today
- database
# content
# database는 무엇인가?
파편화 되어있는 정보를 하나의 묶음으로 저장해 필요한 곳에 사용할 수 있게 하는 것.
초기의 데이터 베이스는 파일형태로 구성되었으며, 지금은 크게 SQL(관계형 데이터 베이스), NoSQL 형식의 데이터 베이스가 대표적이다
MySQL, Oracle, SQLite, PostgerSQL등은 DBMS(database management system)의 일종이며, 데이터 베이스를 이용하기 쉽게 해주는 매니지먼트 시스템이라고 볼 수 있다.
# SQL
관계형 데이터베이스를 다루는 언어, MySQL, Oracle, SQLite등이 SQL을 사용한다. 통상적으로 관계형 데이터베이스를 SQL이라고 많이들 부른다.
# 특징
- 데이터의 독립성
- 물리적 독립성: 물리적인 크기가 변화하더라도 관련된 응용 프로그램을 수정할 필요가 없어야 한다.
- 논리적 독립성: 다양한 응용프로그램과 소통할 수있도록 논리적 요구를 만족할 수 있다.
- 데이터 무결성
잘못된 데이터가 들어오면 유효성 검사를 통해 걸러내 무결성 데이터를 구현하게 된다. - 데이터 보안성
사용자마다의 접근권한을 통해 허가된 데이터에만 접근할 수 있도록 한다. - 데이터 일관성
파일로 구성되어있던 기존 데이터베이스 방식은 흩어져 있는 값들이 일치하지 않는 경우(고객 전화번호 같은 것)가 생길 수 있는데, 논리적 구조를 통해 이런한 일을 방지한다. - 데이터 붕족 최소화
논리적인 구조를 통해 중복되는 데이터가 기록되지 않도록 관리할 수 있다.
ACID
원자성(Atomicity)은 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 이런 경우에는 모든 요청이 실패하도록 하며, 충동 요건에 따라 처리 결과를 결정하기도 한다.
일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 계좌번호는 항상
number
타입이다가 어느 순간부터는string
타입으로 변경되어서는 안된다.독립성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 요청간의 간섭이 없어야 한다. 마치 순수함수와 같은 방식으로 트랜잭션을 처리해야 한다.
지속성(Durability)은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.