[CS] Database

Myung A Lee·2023년 7월 30일
0

CS

목록 보기
10/11

Database

DBMS

  • 데이터베이스를 관리하고 운영하는 소프트웨어
    • 정의 : DB 구조 (테이블, 속성) 정의
    • 조작 : DB 연산(삽입, 수정, 삭제, 검색) 처리
    • 제어 : 데이터 무결성, 일관성, 접근 권한, 동시성 제어
  • 구조적 질의 언어 (Structure Query Language)를 통해 삽입,삭제, 수정 조회 등을 수행
  • 응용 프로그램들이 데이터베이스에 접근할 수 있는 인터페이스를 제공하고 복구기능과 보안성 기능을 제공하여 사용자에게 편리한 DB 조작을 가능하게 함

SQL

  • DDL(Data Definition Language 데이터 정의어) :
    • 데이터베이스 구조를 정의, 수정, 삭제하는 언어
    • CREATE, DROP, ALTER
  • DML(Data Manipulation Language 데이터 조작어):
    • 조회,삽입,수정,삭제와 같은 데이터 관리를 위한 언어
    • SELECT, INSERT, UPDATE, DELETE
  • DCL(Data Control Language 데이터 제어어):
    • 사용자 관리 및 관리, 접근 권한을 다루기 위한 언어
    • COMMIT, ROLLBACK, GRANT, REVOKE

RDBMS VS NoSQL

  • RDMS (Relational Database Management System)

    • 관계형 데이터베이스 관리 시스템으로 데이터를 2차원 테이블 형태로 표현
    • 관계를 맺고 모여있는 테이블들의 집합체
    • 테이블 간의 관계에서 서로의 칼럼을 기준으로 Join이 가능
    • 정해진 스키마에 따라 데이터를 저장하기 때문에 명확한 데이터 구조 보장
    • 시스템이 커질수록 Join문이 많은 복잡한 쿼리가 필요하여 성능 저하
    • MySQL, Oracle 등
  • NoSQL (Not Only SQL)

    • 비 관계형 데이터베이스로 Key-Value, Document, Big Tavble, Graph 방식으로 데이터를 관리
    • 테이블간 관계를 정의하지 않음
    • 관계가 없기 때문에 Join이 불가능하고 트랜젝션을 지원하지 않음
    • 데이터의 일관성이 보장되지 않기 때문에 중복으로 저장된 데이터마다 업데이트가 필요
    • Redis, MongoDB
  • RDMS는 명확한 데이터 구조를 보장하지만 스키마 추후 변경이 번거롭고 어렵다. 또한 시스템이 커질 경우 Join문이 많은 복잡한 쿼리가 만들어질 수 있으며 성능 향상을 위해 서버의 성능을 향상 시켜야 하므로 비용이 크게 증가할 수 있다 . 그에 비해 No-SQL은 스키마가 없기때문에 자유로운 데이터 구조를 갖고 데이터 분산이 용이하다는 장점이 있다. 하지만 데이터의 중복이 발생할 수 있으며 데이터 구조 결정이 어려울 수 있다.


ERD

  • ERD (Entity Relationship Diagram)는 데이터베이스를 구축할 때 가장 기초적인 뼈대로 릴레이션 간의 관계들을 정의한 것
  • 시스템의 요구사항을 기반으로 작성되며 ERD를 기반으로 데이터베이스를 구축
  • 관계형 구조로 표현할 수 있는 데이터를 구성하는데 유용하지만 비정형 데이터를 충분히 표현할 수 없음

### KEY * 테이블 간의 관계를 명확하게 하고 검색, 정렬 시 튜플을 구분하는 기준이 되는 속성 * 종류 * 기본키 Primary Key : 유일성과 최소성을 만족하는 키 * 후보키 Candidate key : 유일성과 최소성을 만족하지만 기본키로 선택되지 못한 키 * 슈퍼 키 Super Key : 유일성을 만족하지만 최소성은 만족하지 못하는 키 * 외래 키 Foreign Key : 다른 테이블의 기본키를 참조하는 값으로 관계 식별에 사용되는 키

데이터베이스 무결성

  • 데이터의 정확성, 일관성, 유효성이 유지되는 것
  • Entity Intergrity 개체 무결성 (기본키 제약조건)
    • 기본키(Primary Key)는 테이블 내에 오직 하나의 값만 존재해야 하며 Null 값이 올 수 없음
  • Referentail Intergrity 참조 무결성 (외래키 제약조건)
    • 외래키(Foreign Key)는 상위 테이블에 반드시 존재하는 값이거나 Null이어야 함
    • 참조 관계에 있는 두 테이블의 데이터가 항상 일관된 값을 갖도록 유지
  • Domain Intergrity 도메인 무결성
    • 필드의 무결성을 보장하기 위한 것 특정 속성의 값이 그 속성이 정의된 도메인에 속한 값이어야 함

Index

  • Index란 테이블을 처음부터 끝까지 검색하지 않고 인덱스를 검색하여 해당 자료의 테이블을 엑세스 할 수 있도록 하는 자료구조
  • 별도의 메모리 공간에 Key-Value형태로 데이터의 물리적인 주소화 함께 저장
  • 항상 정렬된 상태를 유지하기 때문에 원하는 값을 빠르게 검색할 수 있지만 데이터 삽입, 삭제, 수정시에는 속도가 느림
  • 데이터가 많거나 Join이 많은 경우에 적합하며 데이터의 삽입/삭제/갱신이 잦은 경우에서는 불필요

View

  • 하나의 가상 테이블로 물리적으로 존재하지 않음
  • 복잡한 쿼리를 통해 얻을 수 있는 결과를 간단하게 얻을 수 있음

Trigger

  • 특정 테이블에 대한 이벤트에 반응해 자동으로 동작되도록 작성된 프로그램으로 사용자가 직접 호출하지 않고 데이터베이스에서 자동적으로 호출

트랜잭션

  • 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위
  • ACID 특징
    • 원자성(Atomicity) : "All or Nothing"으로 모든 작업이 수행 되거나 트랜잭션 중간에 어떠한 문제가 발생한다면 트랜잭션에 해당하는 어떠한 작업 내용도 수행되지 않음을 보장
    • 일관성(Consistency) : 트랜잭션 실행 전 후로 일관성 보장
    • 고립성(Isolation) : 각각의 트랜잭션은 독립적으로 수행
    • 지속성(Durability) : 트랜잭션 완료후의 데이터를 영구적으로 보존
  • 격리 수준
    • SERIALIZABLE : 한 트랜잭션이 commit 될떄까지 다른 트랜잭션은 CRUD 불가
    • REPEATABLE_READ : 조회중인 데이터를 다른트랜잭션에서 UPDATE 불가
    • READ_COMMITTED : COMMIT 된 데이터만 조회 가능
    • READ_UNCOMMITTED : 다른 트랜잭션에서 커밋되지 않은 데이터도 접근 가능

DBLock

  • DB Lock은 데이터의 무결성을 보장하기 위해 트랜잭션 처리의 순차성을 보장하는 방법
  • Shared Lock 공유락
    • 데이터를 읽을 때 사용
    • 데이터를 다른 사용자가 동시에 읽을 수 있도록 하지만 변경은 불가능
  • Exclusive Lock 베타락
    • 데이터를 변경할 때 사용
    • 트랜잭션 완료시 까지 어떤 접근(읽기, 쓰기)도 허용하지 않음

Blocking

  • Lock들의 경합이 발생하여 특정 프로세스의 작업이 진행되지않고 멈춘 상태

DeadLock 교착상태

  • 트랜젝션 간 각각 가지고 있는 리소스의 Lock을 획득하려고 할 때 발생으로 자원이 사용가능 해 질때 까지 무한 대기인 상태

이상현상

  • 테이블 내의 데이터들이 불필요하게 중복되어 테이블 조작시 발생되는 데이터 불일치 현상
  • 종류
    • 삽입 이상 (Insertion Anomaly) : 원하지 않는 자료가 삽입되거나 Key가 없어서 삽입하지 못하는 이상 현상
    • 삭제 이상 (Deletion Anomaly) : 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실이 발생하는 이상 현상
    • 갱신 이상 (Update Anomaly) :일부만 변경하여 데이터가 불일치하는 모순, 또는 중복되는 튜플이 존재하게 되는 이상 현상

Nomarlization 정규화

  • 데이터베이스의 중복을 제거하고 무결성을 유지하기 위해 데이터를 구조화하는 작업
  • 이상현상을 제거하고 저장 공간을 효율적으로 사용
  • 정규화의 종류
    • 제 1 정규화 (1NF) : 모든 도메인은 원자 값으로만 구성되도록 분해
    • 제 2 정규화 (2NF) : 기본키가 아닌 모든 속성들이 기본키에 완전 함수 종속을 만족하도록
    • 제 3 정규화 (3NF) : 이행적 함수 종속을 제거하도록 분해

완전 함수 종속

기본키의 부분 집합이 다른 값을 결정하지 않도록 하는 것

이행적 함수 종속

A -> B, B -> C 일 때 A -> C 성립


Denomarlization 역정규화

  • 정규화는 이상현상을 최소화하기 위해 테이블을 쪼개는 작업이지만 지나친 정규화는 쿼리를 복잡하게 만들고 성능을 저하될 수 있으므로 이를 방지하여 전반적인 성능을 향상시키기 위함
  • 테이블이 단순해지고 관리 효율성이 증가되나 데이터의 일관성이나 무결성이 저장되지 않을 수 있음

Join

  • 두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것
  • 종류
    • Inner Join 내부 조인 : 양쪽 테이블의 두행이 모두 일치하는 행이 있는 데이터만 출력
    • [Left/Outer/Full] Outer Join : 한쪽에는 데이터가 있고 한쪽에는 없는 경우, 데이터가 있는 쪽의 내용을 전부 출력하는 방법

DELETE vs TRUNCATE vs DROP

  • DELETE : 조건에 해당하는 데이터를 삭제, Rollback 가능
  • TRUNCATE : 테이블 구조를 제외한 모든 데이터를 삭제, 테이블 자체를 삭제(DROP) 후 재생성(CREATE)의 개념으로 Rollback 불가능
  • DROP : 테이블 자체를 완전히 삭제, Rollback 불가능

JDBC (Java Databse Connectivity)

  • JAVA 프로그램이 Database와 연결 되어 데이터를 주고 받을 수 있게 해주는 프로그래밍 인터페이스로 응용 프로그램과 DBMS간의 통신을 중간에서 번역해주는 역할

Optimizer 옵티마이저

  • SQL을 가장 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS 내부의 핵심 엔진
  • 시스템 통계정보를 활용하여 각 실행계획의 예상 비용을 산정한 후 각 실행계획을 비교해서 최고의 효율을 가지고 있는 실행계획을 판별한 후 그 실행계획에 따라 쿼리를 수행
  • 종류
    • 규칙 기반 옵티마이저 : 실행 속도가 빠른 순으로 규칙을 먼저 세워두고 우선순위가 앞서는 방법을 채택
    • 비용 기반 옵티마이저 : 행 계획을 세운 뒤 비용이 최소한으로 나온 실행 계획을 수행

1개의 댓글

comment-user-thumbnail
2023년 7월 30일

유익한 글이었습니다.

답글 달기