상세 컨텐츠

본문 제목

스프링 DB - [3] 트랜잭션 이해

spring/DB

by 덴마크 당나귀 2023. 2. 12. 18:27

본문

728x90

 

트랜잭션?
  • 트랜잭션은 거래라는 뜻. 즉, 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장한다는 뜻.
  • 커밋 : 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것.
  • 롤백 : 작업 중 하나라도 실패해서 거래 이전으로 되돌리는 것.

 

트랜잭션 ACID
  • 트랜잭션의 ACID는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)을 보장하는 것을 의미.
  • 원자성 : 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공 하거나 모두 실패해야 한다.
  • 일관성 : 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 예를 들어 데이터베이스에서 정한 무결성 제약 조건을 항상 만족해야 한다.
  • 격리성 : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다.예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야한다. 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준 선택 가능 
  • 지속성 : 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구해야 한다.
  • 문제는 격리성. 격리성을 완벽히 보장하려면 트랜잭션을 거의 순서대로 실행해야 되는데 그렇게 하면 동시 처리가 매우 나빠짐.

 

데이터베이스 서버 연결 구조와 DB 세션

  • 사용자는 웹 어플리케이션 서버(WAS)나 DB 접근 툴 같은 클라이언트를 사용해서 데이터베이스 서버에 접근.
  • 클라이언트는 데이터베이스 서버에 커넥션을 맺고 그 때 데이터베이스 서버 내부에서 세션이라는 것을 만든다. 그 세션을 통해 해당 커넥션의 모든 요청이 실행된다.
  • 즉, 개발자가 클라이언트를 통해 SQL을 전달하고 현재 커넥션에 연결된 세션이 SQL을 실행.
  • 세션은 트랜잭션을 시작,커밋 또는 롤백을 통해 트랜잭션 종료. 그 이후 새로운 트랜잭션 실행 가능.
  • 사용자가 커넥션을 닫거나, DBA가 세션을 강제로 종료하면 세션은 종료.
  • 커넥션 풀이 10개의 커넥션을 생성하면 세션도 10개 만들어진다.
728x90

'spring > DB' 카테고리의 다른 글

스프링 DB - [2] 커넥션풀과 데이터소스 이해  (0) 2023.02.12
스프링 DB - [1] JDBC의 이해  (0) 2023.02.12

관련글 더보기