설명
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 불가능
개념
사용자
와데이터베이스
사이
에서사용자의 요구에
따라정보를 생성
하고,DB를 관리
해주는소프트웨어
구성
ref : https://noahlogs.tistory.com/39
사용자의 질의
를처리
해주는다양한 컴파일러
가 있고,데이터베이스 관리자
가DBMS를 관리
한다
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개 혹은 여러개의 컬럼
을 이용하여 구성하며접근 속도
를빠르게 한다
인덱스를 사용해야 하는 경우
데이터의 양
이많고
검색
이변경
보다빈번
한 경우인덱스
를 걸고자 하는필드
의값
이다양한 값
을 가지는 경우
단점
데이터의 변경작업이 자주 발생
한다면성능이 저하
된다인덱스 구성
을 위해추가적인 저장공간
이필요
개념
일부 속성
들의종속
으로인해 데이터의 중복이 발생
해서테이블 조작
시발생하는 현상
종류
- 삽입 이상
데이터를 삽입
할 때원하지 않는 값
들로 인해삽입이 되지 않는 현상
- 삭제 이상
튜플을 삭제
할 때다른 값들도 삭제되는 현상
(연쇄 삭제
)- 갱신 이상
데이터가 일부만 갱신
되어불일치성
이 생기는 현상
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 정규화
모든 결정자
는후보키
를 만족하는 것현재교수
는특강이름
을결정
하는결정자
이지만,모든 튜플을 유일하게 식별
하는후보키가 아님
-->테이블 분리 필요
- 제 4정규화 / 제 5정규화는 아래 참조
[ 비 정규화 ]
개념
의도적으로 정규화를 위배
하여성능 향상
및편의성
을 이루는 과정시스템의 성능과 효율성은 증가
되지만,데이터의 일관성과 정합성은 저하
될 수 있음
장점 & 단점
- 장점
빠른 데이터 조회
-->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
는NoSQL의 일종
보통 DB
는하드디스크
나SSD
에저장
하지만,Redis
는메모리(RAM)에 저장
해서디스크 스캐닝 없이 매우 빠르게 접근
해서 사용- RAM은 휘발성 ?
RAM자체
는휘발성
이기 때문에껏다 키면 사라짐
- 이를 막기 위해서
Snapshot / AOF
라는백업 과정
이 존재
- 주로
DB를 따로 두고
,캐시(Cache)역할
로Redis를 추가로 사용
하는 경우가 많음