\(@^0^@)/
[BOOK] 트랜잭션과 무결성, 데이터베이스의 종류 본문
728x90
- 트랜잭션
- 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위
- 여러 개의 쿼리들을 하나로 묶는 단위
- ACID 특징을 (원자성, 일관성, 독립성, 지속성) 갖는다
- 원자성(atomicity)
- 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장한다
- ex) 트랜잭션을 커밋했는데, 문제가 발생하여 롤백하는 경우 그 이후에 모두 수행되지 않음을 보장하는 것
- 커밋(commit)과 롤백
- 커밋 : 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어
트랜잭션 단위로 수행되며 변경된 내용이 모두 영구적으로 저장되는 것
"하나의 트랜잭션이 성공적으로 수행되었다"라고도 말할 수 있다.- update, insert, delete의 쿼리가 하나의 트랜잭션 단위로 수행되고 이후에 데이터베이스에 영구 저장된다.
- 롤백 : 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 일(취소)을 말한다.
- 커밋과 롤백 덕에 데이터의 무결성이 보장된다.
- 데이터 변경 전에 변경 사항을 쉽게 확인할 수 있고 해당 작업을 그룹화할 수 있다.
- 커밋 : 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어
- 트랜잭션 전파
- 트랜잭션을 수행할 때 커넥션 단위로 수행하기 때문에 커넥션 객체를 넘겨서 수행해야 한다.
- 하지만, 이게 매번 넘기기가 귀찮고 어려워서 넘겨서 수행하지 않고
여러 트랜잭션 관련 메서드의 호출을 하나의 트랜잭션에 묶이도록 하는 것
- 일관성(consistency)
- '허용된 방식'으로만 데이터를 변경해야 하는 것
- 데이터베이스에 기록된 모든 데이터는 여러 가지 조건, 규칙에 따라 유효함을 가져야 한다.
- ex) a가 100만 원이 있고, b가 0원이 있을 경우 b는 c에게 50만 원을 입금하지 못한다.
(0원으로부터 50만 원이 나오는 것은 불가하기 때문)
- 격리성(isloation)
- 트랜잭션 수행 시 서로 끼어들지 못하는 것
- 복수의 병렬 트랜잭션은 서로 격리되어 마치 순차적으로 실행되는 것처럼 작동되어야 하고,
데이터베이스는 여러 사용자가 같은 데이터에 접근할 수 있어야 한다. - 여러 개의 격리 수준으로 나뉘어 격리성을 보장한다.
- 위로 갈수록 동시성이 강해지지만 격리성은 약해지고, 아래로 갈수록 동시성은 약해지고 격리성은 강해진다.
- 격리 수준에 따라 발생하는 현상
- 팬텀 리드(phantom read)
- 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우
- 반복 가능하지 않은 조회(non-repeatable read)
- 한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데, 그 값이 다른 경우
- 더티 리드(dirty read)
- 반복 가능하지 않은 조회와 유사하며 한 트랜잭션이 실행 중일 때
다른 트랜잭션에 의해 수정되었지만 아직 '커밋되지 않은'행의 데이터를 읽을 수 있을 때 발생
- 반복 가능하지 않은 조회와 유사하며 한 트랜잭션이 실행 중일 때
- 팬텀 리드(phantom read)
- 격리 수준
- Serializable
- 트랜잭션을 순차적으로 진행시키는 것
- Repeatable_read
- 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아주지만 새로운 행을 추가하는 것은 막지 않는다. 따라서 이후에 추가된 행이 발견될 수 도 있다.
- Read_committed
- 가장 많이 사용되는 격리 수준
- 다른 트랜잭션이 커밋하지 않은 정보를 읽을 수 없다.
- 즉, 커밋 완료된 데이터에 대해서만 조회를 허용한다.
- Read_uncommitted
- 가장 낮은 격리 수준
- 하나의 트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출되는 문제가 있지만 가장 빠르다.
- 데이터 무결성을 위해 사용하지 않는 것이 좋지만,
거대한 양의 데이터를 '어림잡아' 집계하는 데는 사용하면 좋다.
- Serializable
- 지속성(durability)
- 성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것을 의미한다
- 데이터베이스에 시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 한다.
- 무결성
- 데이터의 정확성, 일관성, 유효성을 유지하는 것
- 무결성이 유지되어야 데이터베이스에 저장된 데이터 값과
그 값에 해당하는 현실 세계의 실제 값이 일치하는지에 대한 신뢰가 생긴다. - 개체 무결성
- 기본키로 선택된 필드는 빈 값을 허용하지 않는다
- 참조 무결성
- 서로 참조 관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지해야 한다
- 고유 무결성
- 특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우 그 속성 값은 모두 고유한 값을 가진다
- NULL 무결성
- 특정 속성 값에 NULL이 올 수 없다는 조건이 주어진 경우 그 속성 값은 NULL이 될 수 없다는 제약 조건
- 관계형 데이터베이스(RDBMS)
- 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스를 가리키며 SQL이라는 언어를 써서 조작한다.
- MySQL, PostgreSQL, 오라클, SQL Server, MSSQL 등이 있다.
- 관계형 데이터베이스의 경우 표준 SQL을 지키기는 하지만, 각각의 제품에 특화시킨 SQL을 사용한다.
- MySQL
- 대부분의 운영체제와 호환된다
- 현재 가장 많이 사용하는 데이터베이스
- 메타, 트위터 등 많은 기업에서 사용한다.
- C, C++로 만들어졌다.
- 대용량 데이터베이스를 위해 설계되어 있고 롤백, 커밋, 이중 암호 지원 보안 등의 기능을 제공한다.
- NoSQL 데이터베이스(Not only SQL)
- SQL을 사용하지 않는 데이터베이스
- MongoDB와 redis 등이 있다
- MongoDB
- JSON을 통해 데이터에 접근할 수 있다.
- Binary JSON 형태(BSON)로 데이터가 저장된다.
- 키-값 데이터 모델에서 확장된 도큐먼트 기반의 데이터베이스.
- 스키마를 정해 놓지 않고 데이터를 삽입할 수 있기 때문에
다양한 도메인의 데이터베이스를 기반으로 분석하거나 로깅 등을 구현할 때 강점을 보인다. - 도큐먼트를 생성할 때마다 다른 컬렉션에서 중복된 값을 지니기 힘든 유니크한 값인 ObjectID가 생성된다.
출처 : 면접을 위한 CS 전공지식 노트
728x90
'BOOKS > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
[BOOK] 복잡도, 선형 자료 구조, 비선형 자료 구조 (0) | 2023.05.26 |
---|---|
[BOOK] 인덱스, 조인의 종류, 조인의 원리 (0) | 2023.05.22 |
[BOOK] 데이터베이스의 기본, ERD와 정규화 과정 (0) | 2023.05.09 |
[BOOK] 프로세스와 스레드 (0) | 2023.05.03 |
[BOOK] 운영체제와 컴퓨터, 메모리 (0) | 2023.04.28 |