상세 컨텐츠

본문 제목

트랜잭션 이해

Spring Data

by Wanderer Kim 2025. 1. 5. 12:58

본문

728x90

트랜잭션이란?

트랜잭션을 이름 그대로 번역하면 거래라는 뜻이다. 다시 말하면 데이터베이스에서 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 이를 위해 데이터베이스는 모든 작업이 성공해서 데이터베이스에 정상 반영(commit)을 하던가, 작업 중 하나라도 실패해서 이전으로 되돌리는 것(rollback)을 지원해준다.

트랜잭션 ACID

ACID는 원자성, 일관성, 격리성, 지속성을 나타내는 단어이다.

  • 원자성 : 트랜잭션 내에서 실행한 작업들은 하나의 작업인 것처럼 모두 성공하거나 실패해야 한다.
  • 일관성 : 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 예를 들어 데이터베이스에서 정한 무결성 제약 조건을 항상 만족해야 한다.
  • 격리성 : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리해야 한다.
  • 지속성 : 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다.

트랜잭션 격리 수전(Isolcation Level)

  • READ UNCOMMITED : 커밋되지 않은 읽기
  • READ COMMITED : 커밋된 읽기
  • REPEATABLE READ : 반복 가능한 읽기
  • SERIALIZABLE : 직렬화 가능

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

  • 사용자는 웹 애플리케이션 서버나 DB 접근 툴 같은 클라이언트를 이용해서 데이터베이스 서버에 접근할 수 있다. 클라이언트는 데이터베이스 서버에 연결을 요청하고 커넥션을 맺게 된다. 이때 데이터베이스 서버는 내부에 세션을 만든다. 그리고 앞으로 해당 커넥션을 통한 모든 요청은 이 세션을 통해서 실행하게 된다.
  • 개발자가 클라이언트를 통해 SQL을 전달하면 현재 커넥션에 연결된 세션이 SQL을 실행한다.
  • 세션은 트랜잭션을 시작하고, 커밋 또는 콜백을 통해 트랜잭션을 종료한다. 그리고 이후에 새로운 트랜잭션을 다시 시작할 수 있다.
  • 사용자가 커넥션을 닫거나, DBA가 세션을 강제로 종료하면 세션은 종료된다.

  • 커넥션 풀이 10개의 커넥션을 생성하면, 세션도 10개 만들어진다.

자동 커밋, 수동 커밋

자동 커밋으로 설정하면 각각의 쿼리 실행 직후에 자동으로 커밋을 호출한다. 따라서 커밋이나 롤백을 직접 호출하지 않아도 되는 편리함이 있다. 하지만 쿼리를 하나하나 실행할 때 마다 자동으로 커밋이 되어버리기 때문에 트랜잭션 기능을 제대로 사용할 수 없다.

따라서 commit, rollback을 직접 호출하면서 트랜잭션 기능을 제대로 수행하려면 자동 커밋을 끄고 수동 커밋을 사용해야 한다.

보통 자동 커밋 모드가 기본으로 설정된 경우가 많기 때문에, 수동 커밋 모드로 설정하는 것을 트랜잭션이 시작한다고 본다.

수동 커밋 설정을 하면 이후에 꼭 commit, rollbak을 호출해야 한다.

참고로 수동 커밋 모드나 자동 커밋 모드는 한번 설정하면 해당 세선에서는 계속 유지된다. 단, 중간에 변경하는 것을 가능하다.

반응형

'Spring Data' 카테고리의 다른 글

DataSource 이해  (0) 2024.11.30
커넥션 풀  (0) 2024.11.17
Spring Transaction 사용 시 주의할 점  (0) 2021.09.25
선언적 Transactional  (0) 2021.09.19

관련글 더보기

댓글 영역