1. 트랜잭션 격리 수준(Isolation Level)
- 트랜잭션에서 일관성이 없는 데이터를 허용하도록 하는 수준
2. 필요성
- 데이터베이스는 ACID(트랜잭션 특징) 같이 원자적이면서도 독립적인 수행을 하도록 한다.
- 그래서 Locking 이라는 개념이 등장한다.
- 하지만 무조건적인 Locking으로 동시에 수행되는 많은 트랜잭션들을 순서대로 처리하는 방식은 성능이 떨어진다.
- 그래서 최대한 효율적인 Locking 방법이 필요하다.
3. Isolation Level 종류
1) Read Uncommitted (레벨0) - 커밋되지 않는 읽기
- 트랜잭션 A가 특정 컬럼 데이터를 변경하고 있을 때(커밋하지 않은 상태) 트랜잭션 B가 read하면 트랜잭션 A가 변경한 데이터를 읽어온다.
- 커밋되지 않는 읽기는 dirty read 문제가 있다. (트랜잭션 A가 특정 컬럼 데이터를 변경하고 롤백 했을 때 발생)
- 데이터의 일관성을 유지할 수 없다.
2) Read Committed (레벨1) - 커밋된 읽기
- 트랜잭션 A가 특정 컬럼 데이터를 변경하고 있을 때(커밋하지 않은 상태) 트랜잭션 B가 read하면 트랜잭션 A가 변경하기 전 데이터를 읽어온다. 만약 트랜잭션 A가 데이터 변경 후 커밋하게 되면 트랜잭션 B는 변경된 데이터를 읽어온다.
3) Repeatable Read (레벨2) - 반복 가능한 읽기
- 항상 일관성 있는 데이터 읽기를 보장하는 레벨
- 다른 트랜잭션에서 데이터를 조작하여도 영향을 받지 않는다.
4) Serializable (레벨3) - 직렬화 가능
- 가장 높은 격리 수준
- 트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리므로 다른 사용자는 그 영역에 해당되는 데이터에 수정 및 입력이 불가능하다.
* DB 별 default isolation
- MSSQL : READ COMMITTED
- MYSQL : REPEATABLE READ
- ORACLE : READ COMMITTED
'면접 - 스프링프레임워크' 카테고리의 다른 글
개발자 면접 질문 - 스프링 버전 별 변화 (0) | 2020.12.03 |
---|---|
개발자 면접 질문 - 트랜잭션 전파 옵션 (0) | 2020.12.03 |
개발자 면접 질문 - 디스패쳐 서블릿(Dispatcher-Servlet) 정의 (0) | 2020.12.03 |
개발자 면접 질문 - 서블릿(Servlet) 정의 (0) | 2020.12.03 |
개발자 면접 질문 - 스프링 프레임워크에서의 Singleton (0) | 2020.12.03 |