Computer Science/데이터베이스

[데이터베이스] 트랜잭션 (Transaction)

excited-hyun 2021. 5. 13. 20:47
반응형

트랜잭션이란?

 

데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산. 

작업의 완전성을 보장한다. 하나의 논리적인 기능을 수행하는 작업의 단위로 논리적인 작업 셋을 모두 완벽하게 처리하지 못할 경우에는 원래 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능.

 

트랜잭션과 Lock

Lock은 동시성을 제어하기 위한 개념이고 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다.

Lock은 여러 커넥션이 동시에 동일한 자원을 요청할 때 순서대로 한 시점에 하나의 커넥션만 변경하게 해준다. 

트랜잭션의 경우 하나의 논리적인 작업셋 중 몇개의 쿼리가 있던 상관없이 논리적인 작업셋 자체에 100% 적용되거나 아무것도 적용되지 않아야 함을 보장하는 것. 

 

트랜잭션의 특성

- 원자성

트랜젝션 중간에 문제가 발생한다면 트랜잭션에 해당하는 어떠한 작업도 수행되어서는 안된다. 아무 문제가 발생하지 않은 경우에만 모든 작업이 수행되어야 한다.

- 일관성

트랜잭션이 완료된 다음의 상태에서도 트랜젝션이 일어나기 전의 상황과 동일하게 데이터의 일관성이 보장되어야 한다.

- 독립성

각각의 트렌잭션은 서로 간섭없이 독립적으로 수행되어야 한다.

- 지속성

트랜젝션이 정상적으로 종료한 다음엔 영구적으로 DB에 작업의 결과가 저장되어야 한다.

 

트랜잭션의 연산

 

Commit연산

하나의 트랜잭션 작업이 성공적으로 끝나 데이터베이스가 다시 일관된 상태가 되었을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산

Rollback연산

하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때 그 중 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 위해 이 트랜잭션이 행한 모든 연산을 취소하는 연산이다.

Rollback시에는 해당 트랜잭션을 재시작하거나 폐기한다.

 

트랜잭션 사용 시 주의 점

트랜잭션은 꼭 필요한 코드에만!!!! 일반적으로 DB 커넥션은 수가 제한적인데 각 단위 프로그램이 커넥션을 소유하는 시간이 길어지면 사용가능한 여유 커넥션의 개수는 줄어든다. 그러다 각 단위 프로그램에서 커넥션을 가져가기 위해 기다려야 하는 상황이 발생할 수도 있다.

 

트랜잭션을 병행으로 처리할 때 발생할 수 있는 문제 => 로킹 제어로 해결

갱신 내용의 손실: 동시에 하나의 데이터가 갱신될 때 하나의 갱신이 누락

현황 파악 오류: 하나의 데이터 갱신이 끝나지 않은 시점에서 다른 트랜젝션이 해당 데이터를 조회하는 경우

모순성: 두 트랜젝션이 동시에 실행될 때 데이터베이스가 일관성 없는 상태가 될 수 있음

연쇄 복귀: 두 트랜젝션이 하나의 레코드를 갱신할 때 하나의 트랜젝션이 롤백하면 다른 하나의 트랜젝션도 롤백하는 문제

 

로킹 제어가 일으킬 수 있는 문제점?

트랜잭션의 직렬화 가능성이 높아지며 교착상태가 일어날 수 있다.

 

교착 상태

트랜젝션을 병행으로 처리하다 보면 교착상태가 일어나기도 한다. 이는 두 개 이상의 트랜젝션이 특정 자원의 Lock을 획득한 채 다른 트랜젝션이 소유한 Lock을 요구하면 아무리 기다려도 상황이 바뀌지 않는 것을 말한다.

 

교착상태의 빈도를 낮추는 법

- 트랜젝션을 자주 커밋

- 정해진 순서로 테이블에 접근

- 읽기 Lock 획득의 사용을 피함

- 한 테이블의 복수 행을 복수의 연결에서 순서 없이 갱신하면 교착상태 발생이 쉬워짐. => 테이블 단위의 Lock을 획득해 갱신을 직렬화하면 동시성은 떨어지나 교착상태는 예방

 

 

 

 

 

 

CS 면접 대비를 위해 아래 깃허브를 기반으로 작성 되었습니다.

github.com/JaeYeopHan/Interview_Question_for_Beginner

 

JaeYeopHan/Interview_Question_for_Beginner

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - JaeYeopHan/Interview_Question_for_Beginner

github.com

 

728x90
반응형