[CS 정리] 데이터베이스(DataBase)

김정욱·2021년 5월 28일
2

면접준비

목록 보기
5/6
post-thumbnail
post-custom-banner

SQL

설명

  • Structured Query Language의 약자
  • 관계형 데이터베이스 시스템(RDBMS)데이터 베이스이해할 수 있는 언어
  • 종류
    • DDL(Data Definition Language)
      • 테이블이나 관계의 구조생성하는데 사용되는 데이터 정의어
      • CREATE / ALERT / DROP
    • DML(Data Manipulation Language)
      • 테이블의 데이터를 검색, 삽입, 수정, 삭제하는데 사용되는 데이터 조작어
      • SELECT / INSERT / DELETE / UPDATE
    • DCL(Data Control Language)
      • 데이터의 사용 권한을 관리하는데 사용되는 데이터 제어어
      • GRANT / REVOKE

추가

  • 삭제 명령들의 차이
    • DROP
      • 테이블 자체삭제
      • Rollback 불가능
    • DELETE
      • 데이터만 삭제
      • Commit 이전에는 Rollback 가능
    • TRUNCATE
      • 테이블최초 생성된 초기 상태로 만듬
      • Rollback 불가능

DBMS

개념

  • 사용자데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성하고, DB를 관리해주는 소프트웨어

구성

ref : https://noahlogs.tistory.com/39

  • 사용자의 질의처리해주는 다양한 컴파일러가 있고, 데이터베이스 관리자DBMS를 관리한다

RDB / NoSQL

RDB(Relational Database)

  • 데이터2차원 형태의 테이블로 표현하는 데이터 모델에 기초를 둔 DataBase
  • 엄격하게 정해진 스키마에 따라 데이터를 저장하기에 명확한 데이터 구조를 보장하는 DB
    • 스키마 : DB를 구성하는 데이터 개체, 속성, 관계등 다양한 제약조건을 정의하는 것
  • 중복 데이터존재하지 않아서 데이터 수정(update)용이하며 테이블이 많아질 경우 JOIN으로 인해 많은 쿼리가 발생하는 단점이 있다
  • 수평적인 확장이 어렵다
  • RDBMS
    • 관계형 데이터베이스생성하고 수정하고 관리할 수 있는 소프트웨어
    • ex) MySQL / Oracle / Maria-DB

NoSQL

  • Not Only SQL의 약자
  • 기존 RDB의 한계극복하고, 수평적인 확장성을 가짐
  • 유연한 스키마를 통해 유연성확장성을 가짐
  • ex) MongoDB / 다이나모 DB
  • 장점
    • 수평적인 확장쉽다
    • 데이터의 저장 및 검색을 위한 특화된 매커니즘 제공
      --> 응답속도나 처리효율 등에 있어서 매우 뛰어난 성능

설명

  • 특정 튜플식별할 때 사용하는 속성(Attribute) 혹은 속성의 집합
  • 릴레이션(테이블) 간관계를 맺는데도 사용됨

종류

  • 후보키(Candidate Key)
    • 튜플유일하게 식별할 수 있는 최소 속성의 집합들
    • 조건
      • 유일성 : Key하나의 튜플유일하게 식별
      • 최소성 : 꼭 필요한 최소 속성으로 구성
  • 기본키(Primary Key)
    • 후보키 중에서 선택하여 대표로 삼은 키
    • 유일성최소성모두 만족시킨 (후보키에서 골랐으니 당연)
    • 개체 무결성 제약조건만족해야 함
  • 대체키(Alternate Key)
    • 후보키 중 기본키를 제외한 나머지 키 = 보조키
  • 슈퍼키(Super Key)
    • 유일성은 만족하지만, 최소성은 만족하지 못하는 키
  • 외래키(Foreign Key)
    • 다른 릴레이션(테이블)의 기본키그대로 참조하는 속성의 집합
    • 릴레이션 간 관계(Relationship)을 표현
    • 참조 무결성 제약조건만족해야 함

무결성 제약조건

설명

  • 데이터베이스에 저장된 데이터무결성을 보장하고, 상태를 일관되게 유지하기 위한 제약 조건들

종류

  • 개체 무결성 제약조건
    • 기본키를 구성하는 모든 속성NULL값가지면 안되는 규칙
      --> 전체 혹은 일부널값을 가지면 유일하게 판단할 수 없기 때문
  • 참조 무결성 제약조건
    • 외래키 값NULL이거나 참조 릴레이션의 기본키 값과 동일해야 한다는 규칙
    • 추가로 부모 릴레이션삭제 / 수정시 제약을 받는다
      • 즉시 작업 중지 (RESRICT)
      • 자식 릴레이션의 관련 튜플 연쇄 삭제 (CASCADE)
      • 초기 설정된 값으로 변경 (SET DEFAULT)
      • NULL값으로 설정 (SET NULL)
  • 도메인 무결성 제약조건
    • 릴레이션 내 튜플각 속성의 도메인에 지정된 값만 가져야 한다는 조건
  • 그 외에도 몇가지 더 무결성 제약조건이 있긴한데 볼일이 별로 없음(있다는 것만 인지)

뷰 & 인덱스

[ 뷰 ]

개념

  • 허용된 데이터제한적으로 보여주기 위해 하나 이상의 테이블에서 유도된 가상 테이블

장점 & 단점

  • 장점
    • 뷰의 데이터저장되는 물리적인 위치가 없으니 리소스를 낭비하지 않을 수 있음
    • 삽입 / 업데이트와 같은 명령을 허용하지 않아서 데이터 액세스가 제한 --> 보안성
    • 데이터의 논리적 독립성 제공
  • 단점
    • 해당 뷰와 관련된 테이블삭제하면 뷰도 함께 삭제(테이블에 의존적)
    • 큰 테이블에 대해 뷰를 만들 때많은 메모리가 사용

[ 인덱스 ]

개념

  • 데이터를 쉽고 빠르게 찾을 수 있도록 <키 값, 포인터> 쌍으로 구성하는 데이터 구조
  • 테이블 내1개 혹은 여러개의 컬럼을 이용하여 구성하며 접근 속도빠르게 한다

인덱스를 사용해야 하는 경우

  • 데이터의 양많고 검색변경보다 빈번한 경우
  • 인덱스를 걸고자 하는 필드다양한 값을 가지는 경우

단점

  • 데이터의 변경작업이 자주 발생한다면 성능이 저하된다
  • 인덱스 구성을 위해 추가적인 저장공간필요

이상(Anomaly) 현상

개념

  • 일부 속성들의 종속으로 인해 데이터의 중복이 발생해서 테이블 조작발생하는 현상

종류

  • 삽입 이상
    • 데이터를 삽입할 때 원하지 않는 값들로 인해 삽입이 되지 않는 현상
  • 삭제 이상
    • 튜플을 삭제할 때 다른 값들도 삭제되는 현상(연쇄 삭제)
  • 갱신 이상
    • 데이터가 일부만 갱신되어 불일치성이 생기는 현상

정규화 & 비 정규화

ref : https://mangkyu.tistory.com/110

[ 정규화 ]

개념

  • 테이블무손실 분해 하는 과정
  • 테이블 간중복된 데이터허용하지 않는 목표를 통해 무결성(Integrity)유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다
  • 1정규화 ~ 5정규화 로 갈 수록 엄격한 조건을 갖추어 단계적으로 진행된다
  • 반드시 높은 정규화답은 아닐 수 있으니 인지해야 함
    --> 너무 분해하면 JOIN시 큰 비용이 발생
    --> 이렇게 되면 결국 비 정규화를 통해 다시 합치는 과정필요

종류

  • 제 1정규화(1NF)
    • 모든 속성도메인원자 값으로만 이루어짐
  • 제 2정규화(2NF)
    • 기본키가 아닌 속성들기본키에 대해 완전 함수적 종속인 관계
    • 기본키의 부분집합어떤 속성을 결정하는 결정자되어서는 안됨!
      현재 강좌이름이라는 기본키의 부분집합강의실이라는 속성의 결정자라서 제2정규형 만족 X
      --> 테이블을 분리해서 따로 유지해야 함
  • 제 3정규화(3NF)
    • 기본키가 아닌 속성들기본키에 대해 이행적 함수적 종속이 아닌 관계
    • 이행적 종속이라는 것은 A->B, B->C 일 때 A->C성립되는 것
  • BCNF 정규화
    • 모든 결정자후보키를 만족하는 것현재 교수특강이름결정하는 결정자이지만, 모든 튜플을 유일하게 식별하는 후보키가 아님 --> 테이블 분리 필요

[ 비 정규화 ]

개념

  • 의도적으로 정규화를 위배하여 성능 향상편의성을 이루는 과정
  • 시스템의 성능과 효율성은 증가되지만, 데이터의 일관성과 정합성은 저하될 수 있음

장점 & 단점

  • 장점
    • 빠른 데이터 조회 --> JOIN 비용이 줄어듬
    • 데이터 조회 쿼리가 간단해짐 --> 버그 발생 가능성 하락
  • 단점
    • 데이터 갱신이나 삽입 비용높음 --> 테이블이 커지기 때문
    • 데이터간의 일관성과 정합성이 저하될 수 있음
    • 데이터를 중복 저장하여 더 많은 저장공간이 필요

종류

  • 테이블 통합
    • 두 테이블의 조인이 많이 사용되는 경우 하나의 테이블로 합치는 것
  • 테이블 분할
    • 특정 속성 혹은 레코드많이 사용되는 경우 테이블수직 / 수평으로 분할
  • 중복 테이블 추가
    • 여러 테이블에서 데이터를 자주 추출할 때 차라리 하나의 중복 테이블추가하는 방법
  • 중복 속성 추가
    • 조인해서 데이터를 처리할 때 데이터를 조회하는 경로단축하기 위해 사용

트랜잭션

개념

  • 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위
  • 특정 하나의 SQL이 아니라 하나의 유기적인 행동을 의미
  • Ex) A계좌에서 B계좌로 돈을 송금하는 과정

특징 (ACID)

  • 원자성(Atomicity)
    • 트랜잭션DB에 모두 반영되거나, 혹은 모두 반영되지 않아야 한다
    • 즉, 일부분만 반영되면 안된다
      (은행 계좌간 송금을 하는데 내 계좌에서 빠져나갔는데 상대방에게 안가면 ? --> 슬픔)
  • 일관성(Consistency)
    • 트랜잭션의 작업 처리 결과는 항상 일관성 있어야 한다
    • 즉, 트랜잭션 전과 후의 데이터의 무결성일관성지켜져야 한다
  • 독립성(Isolation)
    • 둘 이상의 트랜잭션동시에 병행 실행되고 있을 때, 상호 간 트랜잭션은 영향을 줄 수 없다
    • 트랜잭션끼리는 서로 영향을 줄 수 없음
  • 지속성(Durability)
    • 성공적으로 수행된 트랜잭션영구적으로 반영되어야 한다
    • commit을 해서 상태가 저장되어야 한다

DB에서 ACID를 보장하는 방법

  • 원자성(Atomicity)
    • 트랜잭션에 의해 변경되는 내역유지하면서, 이전에 Commit된 상태임시 영역에 따로 저장하여 보장
    • 즉, 현재 수행하고 있는 트랜잭션오류가 발생하면 전체를 날리고 임시 영역에 저장했던 상태rollback
    • 이전 데이터들이 임시로 저장되는 영역롤백 세그먼트(Rollback segment)라고 함
  • 일관성(Consistency)
    • 데이터 모델의 모든 제약조건만족하는 것을 통해 데이터의 일관성보장
  • 독립성(Isolation)
    • OS세마포어와 비슷한 개념으로 lock & unlock을 통해 독립성을 보장
    • 데이터를 읽을 때 다른 트랜잭션은 읽기만 가능하며, 작업이 시작할때 Lock & 끝날 때 unlock을 해서 데이터에 대한 상호배제를 지킴
  • 지속성(Durability)
    • commit을 통해서 상태가 데이터 베이스에 영구적으로 저장됨을 보장

트랜잭션 격리 수준

개념

  • 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나서로 고립되어 있는지를 나타내는 수준
  • 즉, 특정 트랜잭션다른 트랜잭션에 변경한 데이터를 볼 수 있도록 허용할지 말지를 결정

격리 수준 필요성 --> 동시성으로 인한 성능 향상

  • 각 트랜잭션기본적으로 Locking을 통해 독립적으로 수행
  • 자원을 무조건 Locking하면 동시성 측면에서 효율적이지 못하기 때문적절한 고립수준으로 성능을 향상시킬 수 있다

격리 수준

  • READ UNCOMMITTED
    • 각 트랜잭션에서 변경 내용COMMIT / ROLLBACK 여부에 상관 없이 다른 트랜잭션에서 값을 읽을 수 있는 수준
    • DIRTY READ 발생
      • COMMIT되지 않은 상태에서 값을 참조해서 정합성에 문제가 발생
  • READ COMMITTED
    • COMMIT된 트랜잭션에 대해서값을 읽어서 참조하는 수준
    • RDB에서 대부분 기본적으로 사용되고 있는 격리 수준
    • DIRTY READ가 발생하지 X
    • 실제 테이블의 값을 가져오는 것이 아니라, Undo 영역에 백업된 레코드에서 값음 가져옴
    • NON-REPEATABLE READ 문제 발생
      : 하나의 트랜잭션이 시작되기 전값을 가져온 후, 트랜잭션이 끝난 후다시 참조하면 2번의 참조로 가져온 데이터는 결과가 다르다
    • 실제로 NON-REPEATABLE READ문제가 발생 될 정도로 오래 지속되는 경우는 거의 없어서 READ COMMITED 방식이 표준으로 지정
  • REPEATABLE READ
    • 트랜잭션마다 ID를 부여하고 트랜잭션 ID보다 작은 트랜잭션 번호에서 변경한 것만 읽게 함
    • Undo 공간백업해둔 데이터를 사용
    • 이러한 변경방식을 MVCC(Multi Version Concurrency Control)이라고 함
    • PHANTOM READ라는 문제가 발생
      • 다른 트랜잭션에서 수행한 변경 작업에 의해 레코드보였다가 안보였다 하는 현상
      • 이를 방지하기 위해서는 변경하지 못하게 쓰기 잠금을 걸어야 함
  • SERIALIZABLE
    • 다른 사용자트랜잭션 영역에 해당되는 데이터에 대한 수정 및 입력불가능한 수준
    • 가장 엄격한 격리 수준
    • PHANTOM READ해결하긴 하는데 실제 DB에서는 거의 사용되지 않는다!

신뢰성 & 회복

ref : https://victorydntmd.tistory.com/130

회복(Recovery)

  • 트랜잭션이 수행되는 동안 시스템에 오류 또는 물리적 문제가 발생되면, 복구가 필요하다
  • 트랜잭션 내의 질의수행하면서 문제가 발생했을 때
    --> Rollback 수행
  • 시스템의 오류 또는 물리적인 문제의 경우 시스템 상 문제라서 트랜잭션이 다시 시작되어야 함
    --> UNDO / REDO 수행

check point

  • 트랜잭션을 수행하면서 중간 중간 check point를 설정해서 성공적으로 수행이 되어 disk에 확실히 저장된 상태저장
  • 회복 과정에서 너무 많이 되돌아가지 않도록 하는 목적

UNDO

  • failure이 발생했을 때, 트랜잭션Commit되지 않고 계속 진행중일 때 수행
  • 트랜잭션의 모든 작업을 하지 않은 것으로 되돌림

REDO

  • failure이 발생했을 때, 트랜잭션이 Commit되어 disk에 반영된 상태일 때 수행
  • 작업을 되돌린 후, 실패가 발생하기 전 과정을 그대로 따라서 수행
  • redo를 하기 위해서정상적으로 실행되기 까지 과정을 기록log가 필요함

예시

  • T1 : 회복 X
  • T2 : failure 발생 시점이미 commit되었기 때문에 redo 수행
  • T3 : failure 발생 시점아직 진행중이기 때문에 undo 수행
  • T4 : redo 수행
  • T5 : undo 수행

레디스(Redis)

설명

  • RedisNoSQL의 일종
  • 보통 DB하드디스크SSD저장하지만, Redis메모리(RAM)에 저장해서 디스크 스캐닝 없이 매우 빠르게 접근해서 사용
  • RAM은 휘발성 ?
    • RAM자체휘발성이기 때문에 껏다 키면 사라짐
    • 이를 막기 위해서 Snapshot / AOF라는 백업 과정이 존재
  • 주로 DB를 따로 두고, 캐시(Cache)역할Redis를 추가로 사용하는 경우가 많음
profile
Developer & PhotoGrapher
post-custom-banner

0개의 댓글