
설명
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를 추가로 사용하는 경우가 많음