면접 - 스프링프레임워크

개발자 면접 질문 - 트랜잭션 격리 수준

snow-line 2020. 12. 3. 20:53
반응형

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

반응형