사용하는 이유
데이터베이스 사용 이전 파일 시스템을 이용하여 데이터를 관리하였다. 하지만 이러한 방식은 데이터 종속성, 중복성, 무결성에 대한 문제를 발생시켰다.
데이터베이스의 장점
데이터의 무결성
- 데이터 유효성 검사를 통해 데이터의 무결성을 구현하게 된다.
- 무결성이란 정확성을 의미한다. 즉 데이터베이스의 값이 정확하다는 것을 의미한다.
데이터의 보안성
- 인가된 사용자들만 데이터베이스나 데이터베이스 내의 자원에 접근할 수 있도록 하여 데이터에 보안을 구현할 수 있다.
- 계정 관리나 접근 권한을 통해 데이터 보안을 구현한다.
데이터 중복 최소화
데이터를 통합해서 관리함으로서 중복되는 데이터 문제를 해결할 수 있다.
데이터베이스의 특징
1. 실시간 접근
데이터베이스는 사용자가 요청하는 순간 데이터를 제공한다.
2. 계속적인 변화
데이터베이스는 삽입, 수정, 삭제를 데이터에 반영하여 최신 데이터를 유지한다.
3. 동시 공유
동시에 여러 사용자가 동일한 내용의 데이터를 이용할 수 있다.
4. 내용에 따른 참조
데이터 값을 사용하여 원하는 데이터를 찾는다.
트랜잭션 격리 수준
read uncommited
read commited
- 오라클 DBMS 등 에서 default 값(가장 많이 선택되는 격리 수준)
- Undo 영역에 백업된 레코드를 이용하여 수정 되기 이전 내용 읽어온다.(MVCC)
- REPEATABLE READ와 READ COMMITTED의 차이는 언두 영역에 백업된 레코드의 여러 버전 가운데 몇 번째 이전의 버전까지 찾아 들어가야 하는지에 있습니다.
- (참고) undo 영역의 목적
- 롤백 대비
- 격리 수준을 유지하면서 높은 동시성 제공
repeatable read
- MySQL의 InnoDB 스토리지 엔진에서 기본적으로 사용되는 격리 수준
- InnoDB 스토리지 엔진은 ROLLBACK을 대비해 변경되기 전 레코드를 Undo 영역에 백업하고 실제 레코드 값을 변경(MVCC)
- MVCC(Multi Version Concurrency Control)
- 잠금을 사용하지 않고 일관된 읽기를 제공
- 서로 다른 세션이 동일한 데이터에 접근했을 때 각 세션마다 스냅샷 이미지를 보장
- 동시성을 높이기 위한 기술
- Undo 영역에 백업된 이전 테이터를 통해 동일한 트랜잭션 내에서는 동일한 결과를 보여주도록 보장
- 하나의 트랜잭션이 수행한 행을 다른 트랜잭션이 수정할 수 없다.
- 새로운 행을 추가하는 것은 막지 못한다.(추가되는 행의 발견 가능성, phantom read)
serializable
- 트랜잭션을 순차적으로 진행
- 락을 건다.
- 한 트랜잭션에서 읽고 쓰는 레코드를 다른 트랜잭션에서는 절대 접근할 수 없습니다.
(참고) 데이터 베이스 스토리지 엔진
Innodb
: mysql 8.0의 default 엔진
MyISAM
wiredtiger
참고