DEV/Spring Data JPA

데이터베이스 트랜잭션 기초

행운개발자 2024. 3. 18. 22:40
728x90

데이터베이스 종류에 따른 인터페이스 통합

  • 애플리케이션에서 데이터베이스를 사용할 때, 커넥션 연결 → 쿼리 전달 → 응답 반환의 흐름을 사용한다.
  • 그런데 데이터베이스마다 커넥션을 연결하는 방법이 다르다.
  • 이를 통일하기 위해서 JDBC 표준 인터페이스가 만들어졌다 (DriverManager)

일반 커넥션과 커넥션 풀의 도입

  • 데이터베이스 커넥션을 사용할 때 커넥션 풀을 사용한다
  • 직접 커넥션을 연결할 수도 있고, 커넥션 풀을 사용할 수도 있다.
  • 커넥션을 조회하는 방법을 추상화한게 DataSource이다
    • DriverMangerDataSource
    • HikariDataSource

트랜잭션의 도입

  • DataSource에서 가져온 커넥션에 대해서 JDBC 코드를 반복해서 작성해야 한다
    • 자동커밋과 수동 커밋에 대한 옵션을 직접 다루어야 하고
    • 정상 처리, 예외처리에서 커밋과 롤백을 직접 호출해야한다
  • 영속성 레이어의 예외처리가 서비스 계층까지 올라오는 문제도 있고
  • 여러 개의 서비스 로직을 하나의 트랜잭션으로 처리할 때 커넥션을 직접 전달해야하는 문제도 있다
  • 이를 해결하기 위해서 트랜잭션 매니저와 트랜잭션 동기화 매니저가 도입되었다
  • 일단 쓰레드로컬을 사용하는 트랜잭션 매니저, 트랜잭션 동기화 매니저를 통해서 커넥션을 조회하기 때문에 파라미터로 커넥션을 전달해야하는 문제가 사라졌다
  • 커넥션을 조회한 뒤, 정상, 실패에 따라서 커밋과 롤백을 수행해야하는 로직들은 트랜잭션 템플릿을 통해서 감추어졌다
  • 트랜잭션 템플릿에 콜백으로 전달해야하는 비즈니스 로직은 애노테이션 기반의 영속성 처리 방식에서 완전히 고도화되었다
728x90