# TIL-20210408

# Today

  • database

# content

# database는 무엇인가?

파편화 되어있는 정보를 하나의 묶음으로 저장해 필요한 곳에 사용할 수 있게 하는 것.
초기의 데이터 베이스는 파일형태로 구성되었으며, 지금은 크게 SQL(관계형 데이터 베이스), NoSQL 형식의 데이터 베이스가 대표적이다

MySQL, Oracle, SQLite, PostgerSQL등은 DBMS(database management system)의 일종이며, 데이터 베이스를 이용하기 쉽게 해주는 매니지먼트 시스템이라고 볼 수 있다.

# SQL

관계형 데이터베이스를 다루는 언어, MySQL, Oracle, SQLite등이 SQL을 사용한다. 통상적으로 관계형 데이터베이스를 SQL이라고 많이들 부른다.

# 특징

  1. 데이터의 독립성
  • 물리적 독립성: 물리적인 크기가 변화하더라도 관련된 응용 프로그램을 수정할 필요가 없어야 한다.
  • 논리적 독립성: 다양한 응용프로그램과 소통할 수있도록 논리적 요구를 만족할 수 있다.
  1. 데이터 무결성
    잘못된 데이터가 들어오면 유효성 검사를 통해 걸러내 무결성 데이터를 구현하게 된다.
  2. 데이터 보안성
    사용자마다의 접근권한을 통해 허가된 데이터에만 접근할 수 있도록 한다.
  3. 데이터 일관성
    파일로 구성되어있던 기존 데이터베이스 방식은 흩어져 있는 값들이 일치하지 않는 경우(고객 전화번호 같은 것)가 생길 수 있는데, 논리적 구조를 통해 이런한 일을 방지한다.
  4. 데이터 붕족 최소화
    논리적인 구조를 통해 중복되는 데이터가 기록되지 않도록 관리할 수 있다.
  • ACID

    • 원자성(Atomicity)은 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 이런 경우에는 모든 요청이 실패하도록 하며, 충동 요건에 따라 처리 결과를 결정하기도 한다.

    • 일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 계좌번호는 항상 number타입이다가 어느 순간부터는 string 타입으로 변경되어서는 안된다.

    • 독립성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 요청간의 간섭이 없어야 한다. 마치 순수함수와 같은 방식으로 트랜잭션을 처리해야 한다.

    • 지속성(Durability)은 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.