데이터베이스란?
- 데이터베이스는 조직 또는 개인의 정보를 구조적으로 저장하는데 사용되는 데이터의 집합이다. 데이터베이스는 테이블, 레코드, 열 등의 데이터 구조로 되어있다.
DBMS
DBMS의 개념
- DBMS는 DataBase Management System의 약자로 데이터를 저장, 조작, 검색 보호하는 소프트웨어이다.
- DBMS는 데이터베이스 설계, 데이터 유지보수, 보안, 백업및 복구, 동시성 제어 등의 기능을 제공한다.
#데이터베이스는 저장공간, DBMS는 데이터베이스를 조작하기 위한 시스템
DBMS의 특징
- 데이터 중앙 저장 : DBMS는 데이터를 중앙 집중식으로 저장. 데이터 중복 최소화, 데이터 일관성 유지
- 데이터 구조화 : DBMS는 데이터를 구조화된 형식으로 저장. 테이블, 로우, 컬럼과 같은 구조로 관리된다
- 데이터 무결성 : DBMS는 데이터 무결성을 유지하기 위한 제약 조건을 제공한다.
- 동시성 제어 : DBMS는 다중 사용자 환경에서 동시에 데이터 접근하는 것을 관리하고 제어한다. 데이터 충돌을 방지, 데이터 일관성을 보장한다.
- 트랙잭션 관리 : DBMS는 트랙잭션을 지원하여 데이터 작업의 일관성과 원자성을 보장한다. (트랜잭션은 모두 성공하거나 모두 실패하는 원자성을 가지고 있다.)
- 그 외의 특징으로 보안 및 관리 권한, 백업 및 회복, 확정성, 멀티플랫폼 지원 등 다양한 특징이 있다.
RDBMS
RDB란?
- RDB란, Relational Database의 약자로, 관계형 데이터 모델에 기초를 둔 데이터 베이스이다.
- 관계형 데이터 모델이란, 데이터를 구성하는데 사용하는 방법 중 하나로 모든 데이터를 2차원 테이블 형태로 표현한다.
- 데이터의 독립성이 높고, 고 수준의 데이터 조작언어를 사용하여 결합, 제약, 투영 등의 관계 조작에 의해 비약적으로 표현 능력을 높일 수 있다.
RDBMS란?
- RDBMS, Relational DataBase Management System의 약자로 RDB를 생성하고 수정하고 관리해주는 소프트웨어이다.
RDBMS의 특징
- RDBMS는 일반 DBMS보다 효율적으로 데이터를 저장, 구성 및 관리를 할 수 있다. 정규화를 통해 데이터의 중복성을 최소화하여 트랙잭션을 수행하는 것이 더 쉽다.
- 스키마 : RDBMS는 스키마를 사용하여 데이터의 구조를 정의한다. 스키마는 데이터 베이스에 저장되는 테이블, 열, 데이터유형, 제약조건을 명시한다.
- SQL을 사용하여 검색, 추가, 수정, 삭제하는데 사용된다.
- 데이터 간의 관계 : 테이블 간의 관계를 설정할 수 있다. 외래키 (foreign key)를 사용하여 테이블간의 관계를 정의하고 데이터를 연결 할 수 있다.
- 그 외에도 데이터보안, 트랜잭션 관리, 데이터 무결성 등의 특징이 있다.
RDBMS의 구성
- 테이블-컬럼 형태로 테이블을 저장한다.
- 하나의 테이블은 여러개의 컬럼으로 구성되어있다.
- 테이블(Table) = 관계(Relation)
- 튜플(Tuple)
- 튜블 = 행 = 레코드 : 테이블에 있는 속성(Arrtibute)의 집합이다.
- 속성(Attribute)
- 속성 = 열 = 필드, 테이블을 구성하는 정보들이다. 속성의 수는 차수(Degree)라고 부른다.
- 도메인(Domain)
- 각 속성에서 가질 수 있는 값들의 집합이다.
트랜잭션(Transaction)
트랜잭션 개념
- 데이터베이스의 상태를 변화시키는 논리적인 작업단위
- 하나의 작업을 수행하는데 필요한 데이터베이스의 연산들을 모아 놓은 것
- 데이터베이스는 무결성, 일관성을 보장하기 위해 작업 수행에 필요한 연산들을 하나의 트랜잭션으로 관리한다.
ACID
- ACID는 RDBMS에서 데이터의 일관성과 안전성을 보장하기 위한 트랜잭션 속성을 나타내는 약어이다.
- ACID는 다음과 같은 4가지 속성으로 구성된다.
- Atomicity(원자성) “All or Nothing”
- 트랜잭션은 원자적이어야 한다. 트랜잭션 내의 모든 작업은 하나의 단위로 간주. 그래서 이 단위 작업중 하나라도 실패하면 전체 트랜잭션이 실패해야 한다. 트랜잭션은 “모두 성공하거나 모두 실패해야한다.”
- Consistency(일관성) “항상 유효한 데이터만 저장”
- 트랜잭션은 수행하기 전과 후에 데이터베이스는 일관된 상태를 유지하여야 한다. 트랜잭션 실행 전과 후에 데이터베이스에 정의된 모든 규칙과 제약 조건이 유효해야 한다.
- Isolation(고립성) “다른 트랜잭션에 영향을 최소화”
- 다중 사용자 환경에서 동시에 실행중인 여러 트랜잭션이 서로에게 영향이 미치지 않아야 한다. 그리고 각 트랜잭션은 다른 트랜잭션에서 수행하는 작업을 볼수 없어야 한다.
- Dutability(지속성) “영구적으로 보관”
- 트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 보관 되어야한다. 시스템 장애 또는 중단과 같은 문제가 발생하더라도 트랜잭션 결과는 손실되지 않아야 한다.
정규화 (Normalization)
- RDBMS에서 정규화는 데이터베이스 설계 과정에서 데이터 중복을 최소화하고 데이터의 일관성과 무결성을 유지하기 위한 중요한 원칙중 하나이다.
- 정규화의 주요 목표는 다음과 같다.
1. 데이터 중복의 최소화 : 데이터 중복을 제거하고, 각 데이터는 한번만 저장되어야하낟,
- 데이터 일관성 및 무결성 유지 : DB내에서 데이터 일관성과 무결성을 보장한다. 즉 동일한 데이터가 여러 곳에 저장되어 다른값으로 변경되는 문제를 방지한다.
- 질의 최적화 : 정규화된 DB는 특정유형의 질의에 대한성능을 최적화 할 수 있다.
정규형
정규화 간단요약
1. 1차 정규형는 한칸의 한 데이터만 넣었다.
2. 2차 정규형는 현재 테이블과 다른 주제는 다른테이블로 나눈다.
3. 3차 정규형는 메인컬럼과 엮이지않고 일반컬럼에 종속된 컬럼은 다른 테이블로 나눈다.
트랜잭션 격리 수준 (isolation level)
트랜잭션 격리수준 개념
- 트랜잭션 isolation level이란, 동시에 여러 트랜잭션이 처리 될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다.
- 간단히 말해 특정 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 할지 말지 결정한다.
고립성 수준 4가지
- READ UNCOMMITTED
- 가장 낮은 고립성 수준이다.
- 다른 트랜잭션에서 변경중인 데이터를 읽을 수 있다.
- 데이터의 일관성과 무결성을 보장하지 않으며, 다른 트랜잭션에 의해 변경된 데이터를 볼 수 있으므로 사용을 피해야한다.
- 발생할 수 있는 문제
- Dirty Read : 한 트랜잭션이 데이터를 변경중이고 다른 트랜잭션이 그 데이터를 읽을 때, 읽은데이터가 나중에 롤백 된 경우 무의미한 데이터를 읽게 될 수 있다.
- ex) A트랜잭션이 계좌 잔액을 변경중이고, B트랜잭션이 A잔액을 읽었을 떄, A변경 내용이 롤백되면 B는 잘못된 잔액을 읽을 수 있습니다.
- READ COMMITTED
- 대부분의 RDBMS에서 기본적으로 사용되는 고립성 수준이다.
- 한 트랜잭션에서 변경한 데이터는 다른 트랜잭션에서 읽을 수 없다.
- 데이터의 일관성을 보장하고, 다른 트랜잭션에 의해 변경된 데이터를 피해 데이터를 읽을 수 있도록 한다.
- 발생할 수 있는 문제
- Non-Repeqtable Read : 동일한 쿼리를 두 번 실행할 때, 다른 결과를 얻을 수 있는 경우. 다른 트랜잭션이 데이터를 변경하면 읽은 데이터가 다를 수 있다.
- ex) A트랜잭션이 상품가격을 조회하고, B트랜잭션이 동일한 상품의 가격을 변경했을 때, A가 다시 조회하면 다른 가격을 얻을 수 있다.
- REPEATABLE READ
- 한 트랜잭션 내에서 쿼리 결과가 항상 동일함을 보장한다.
- 다른 트랜잭션에서 데이터를 변경하더라도 같은 쿼리를 실행하면 변경내용이 반영되지 않는다.
- 발생할 수 있는 문제
- Phantom Read : 동일한 범위의 쿼리를 두번 실행할 떄, 결과 집합에 포함된 행이 다를 수 있는 경우. 다른 트랜잭션이 중간에 행을 추가 또는 삭제하면 발생한다.
- ex) A트랜잭션이 주문 목록을 조회하고, B트랜잭션이 주문을 추가 했을 때, A가 다시 조회하면 새로운 주문이 나타날 수 있다.
- SERIALZABLE
- 가장 높은 고립성 수준으로, 모든 트랜잭션을 순차적으로 실행하는 것처럼 처리한다.
- DB 일관성과 무결성을 가장 엄격하게 보장하지만 성능에 영향을 미친다.
- 발생할 수 있는 문제
- 위와같은 문제들은 발생하지 않는다. 모든 트랜잭션은 서로에게 영향을 미치지 않으며, 쿼리 결과가 일관적으로 유지된다. 하지만 동시성이 감소되기 떄문에 성능에 영향을 끼칠 수 있다.
INDEX
인덱스 개념
- RDBMS에서 인덱스란 데이터베이스 테이블의 특정 열에 대한 검색속도를 향상시키기 위한 자료구조이다.
- 인덱스는 특정 열의 값을 미리 정렬하고, 검색 작업을 빠르게 수행하기 위해 사용된다.
- DB에서 원하는 데이터를 찾고싶을 떄, 레코드를 전부 하나하나 확인하는 것이 아닌 인덱싱 되어 있는 자료구조를 통해서 검색되기 때문에 검색속도가 빨라지는 것이다.
인덱스 동작과정
- 일단 인덱스는 효율적인 탐색을 위해 당연하게 데이터 정렬한다.
- 인덱스는 생성되면 SELECT쿼리문에서 정렬, 조건 등 작업하게되면 옵티마이저의 판단으로 생성된 인덱스를 적용하여 SELECT문이 실행된다.
- 옵티마이저(Optimizer)
- 옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 찾아주는 DBMS 핵심 엔진이다.
- 인덱스는 트리의 형태로 데이터를 보관하고 있다. 인덱스를 정렬해놔도 풀테이블 스캔을 할 필요없이 2번의 질문 만을 원하는 데이터를 찾을 수 있다.
SS
- 아보다 더 효율적인 방법으론 B+tree방법을 사용하여 DB의 데이터를 보관한다. 마찬가지로 질문을 통해 데이터를 찾은 뒤, 맨 아래 노드끼리도 화살표를 연결해놓는다. 그러면 범위 검색에 있어 굉장히 효율적이다.
인덱스의 단점
- 컬럼을 복사해서 정렬해놓는 개념이기 떄문에 정렬할 떄마다 새로운 컬럼이 만들어져 하드 용량이 늘어난다.
- 기존의 데이터가 삽입 수정 삭제가 일어난다면 인덱스에도 똑같이 반영되어 성능 하락이 발생할 수 있다.
- 즉, 데이터 갱신보다는 조회에 주로 사용되는 컬럼에 index를 생성하는 것이 유리하다.
KEY
- RDBMS에서 Key는 데이터베이스 테이블에서 레코드(행)을 식별하고 검색하는데 사용되는 열(속성)또는 열의 조합을 나타낸다. Key는 테이블내의 각 레코드를 고유하게 식별하며 데이터의 일관성을 유지하고 관계를 설정하는데 중요한 역할을 한다.
- 쉽게말해 인스턴스는 RDBMS에서 튜플(행)을 의미한다. 이러한 행들을 서로 구분 할 수 있게 해주는 속성(열),하나 혹은 그 이상의 집합을 키라고 한다.
최소성과 유일성
최소성
- 키의 최소성은 해당 키가 레코드를 식별하는데 꼭 필요한 최소한의 열로 구성되어야 함을 의미한다.
- 불필요한 열을 포함하지 않고 가장 적은 수의 열로 레코드를 고유하게 식별할 수 있어야 한다.
- 최소성을 만족하지 않을 경우, 키가 불필요하게 복잡해질 수 있고 성능에 영향을 미칠수 있다.
유일성
- 키의 유일성은 해당 키값이 테이블 내에서 고유하다는 속성을 나타낸다.
- 즉, 같은 키값을 가지는 레코드가 테이블 내에서 중복되지 않아야 한다.
- 기본키는 모든 레코드를 고유하게 식별해야 하므로 유일성을 가진다.
Key의 종류
- key에는 대표적으로 5가지 종류가있다 아래 예시를 보자
ID | 주민등록번호 | 이름 | 성별 |
---|
abc123 | 853501-1234568 | 김철수 | 남자 |
bcc345 | 901012-1124564 | 안상수 | 남자 |
vdf567 | 870415-2547891 | 김영희 | 여자 |
asdf1234 | 990213-2589153 | 안태희 | 여자 |
- 기본키(Primary Key)
- 테이블 내의 각 레코드를 고유하게 식별하는 주요 키이다.
- 기본 키 열의 값은 NULL이 어니어야 하며 중복될 수 없다.
- 유일성과 최소성을 만족시키는 키이다.
- 이 표에선 없지만 보통 유일성과 최소성을 만족시키기 위해 DB자체에서 겹치지않는 새로운 id를 발급한다.
- 후보키(Candidate Key)
- 후보키는 쉽게 말해 기본키가 될 수 있는 키이다.
- 후보키 또한 유일성과 최소성을 만족시켜야한다.
- 대체키(Alternate Key)
- 기본키로 선택되지 않은 다른 후보키를 말한다.
- 테이블 내에서 레코드를 고유하게 식별하는 역할을 한다.
- 복합키(Composite Key)
- 복합 키는 여러 열의 조합으로 구성되며 이 열들의 조합이 유일성과 최소성이 만족되는 키이다.
- 외래키(Foreign Key)
- 다른 테이블의 기본키와 관계를 설정하는 키이다.
- 외래키는 데이터 무결성을 우지하고 데이터베이스 간의 관계를 구축하는데 사용된다.
- 주문 테이블에서 사용자 ID가 다른 사용자 테이블의 기본키를 참조하는 외래키 일 수 있다.
- 슈퍼키(Super Key)
- 테이블 내의 레코드를 식별할 수 잇는 하나 이상의 열의 조합을 의미한다.
- 슈퍼 키는 기본키, 대체키 및 일반 키 포함을 할 수 있다.
- 슈퍼키는 유일성은 만족시키지만 최소성은 만족시키지 못하는 키이다.