backend
  • README
  • DOCS
    • Java Docs
    • Servlet Docs
    • JSP Docs
    • DB & SQL Docs
    • Spring Boot Docs
    • Spring Security Docs
    • AWS Docs
  • 설치하기
    • Intellij 설정
  • 자바
    • 01 Java란?
    • 02 자바 시작하기
    • 03 자료형과 연산자
    • 04 제어문
    • 05 메소드
    • 06 클래스 기초
      • Static 보충자료
      • 패키지 보충자료
    • 07 객체지향 프로그래밍
    • 08 클래스 더 알아보기
      • 열거형 ENUM 보충자료
    • 09 클래스와 자료형
      • 다형성 보충자료
      • 제네릭 보충자료
    • 10 컬렉션 프레임워크
      • 컬렉션 프레임워크 보충자료
    • 11 람다식과 함수형 프로그래밍
      • 람다식 보충자료
    • 12 오류 대비하기
      • 오류 보충자료
    • 13 멀티태스킹
      • 멀티태스킹 보충자료
    • 교재보충
      • java.lang
  • 스프링
    • 서블릿, JSP
      • 05 Servlet(서블릿)
        • 서블릿 보충자료
        • 서블릿 추가코드
        • XML, YAML, JSON
      • 06 JSP(자바 서버 페이지)
        • JSP 보충자료
      • 07 JSTL(JSP 스탠다드 태그 라이브러리)
        • JSTL 보충자료
      • 08 Cookie(쿠키), Session(세션)
      • 09 서블릿,필터,리스너
        • 서블릿,필터,리스너 보충자료
      • 11 도서관리 프로젝트 실습
    • Spring Boot
      • 01 스프링 등장 배경, 객체지향
        • 스프링 등장 배경, 객체지향 보충자료
      • 02 IOC(제어의 역전), DI(의존성 주입)
        • IOC 보충자료
        • DI 보충자료
      • 03 스프링 구조
        • 스프링 구조 보충설명
      • 04 테스트코드 실습
      • 05 스프링 빈 설정
        • 스프링 빈 설정 보충자료
      • 06 싱글톤
        • 싱글톤 보충 자료
      • 07 스프링 빈 자동설정
        • 스프링 빈 자동설정 보충자료
      • 08 빈 생명주기
        • 빈 생명주기 보충자료
      • 09 빈 스코프
        • 빈 스코프 보충자료
      • 10 스프링 MVC
        • 스프링 MVC 보충자료
        • 데이터베이스 연동에 필요한 부분
      • 11 Validation(검증)
        • Validation(검증) 보충자료
      • 12 Bean Validation(빈검증)
        • Bean Validation(빈검증) 보충자료
      • 13 예외처리
        • 예외처리 보충자료
      • 14 타입변환
      • 15 JDBC(Java Database Connectivity)
      • 16 커넥션풀
      • 17 트랜잭션
        • 트랜잭션 보충자료
      • 18 JDBC 템플릿 활용
      • 19 MyBatis
      • 20 JPA(Java Persistence API)
      • 22 게시판 프로젝트 실습
    • Spring Security
      • 보안(Security)
      • Spring Security
      • 2. Spring Security 알아보기
        • 보안 위협 실제 사례와 방어 전략
      • 3. Spring Security 기본 동작 흐름
      • 4. Spring Security로 인증 권한 추가하기
        • Spring Security의 인증 및 인가
      • 5. Spring Security에서 세션 관리하기
        • 세션(Session)과 쿠키(Cookie) 비교, 토큰(Token)과의 관계
        • 해싱 및 해싱알고리즘
        • base64
      • 6. Spring Security 악용 보호
        • SameSite
      • 7. Spring Security로 인가 권한 추가하기
      • 8. Bcrypt(비크립트) 암호화
      • OAuth2 적용하기
  • 네트워크
    • HTTP
    • OSI 7계층
  • DB&SQL
    • 01 Database(데이터베이스)와 SQL 개요
    • 02 관계형 모델
    • 03 집합
    • 04 JOIN 연산
    • 05 MySQL
      • 세이브포인트
      • DBeaver, Mysql 오토커밋 설정 관련
    • 06 SQL 기초
      • 예시데이터 쿼리문
    • 07 SQL 실습
      • 실습 스키마
    • 08 Join 활용
      • 실습스키마
    • 09 SQL 활용
      • 실습스키마
    • 10 정규화
      • 실습 스키마
    • 데이터타입
    • 예시 프로젝트 스키마 구성
  • AWS
    • SSL 연결하기
    • 보충설명
Powered by GitBook
On this page
  1. 스프링
  2. Spring Boot
  3. 17 트랜잭션

트랜잭션 보충자료

DataSourceUtils는 Spring 프레임워크에서 데이터 소스를 관리하고 트랜잭션 처리 시 데이터베이스 연결을 효율적으로 처리하기 위해 제공되는 유틸리티 클래스입니다. 주로 Spring의 JDBC 모듈에서 사용되며, javax.sql.DataSource와 함께 트랜잭션 경계를 유지하면서 커넥션을 안전하게 가져오거나 반환할 때 사용됩니다.


주요 기능

  1. 트랜잭션 컨텍스트에서 커넥션 가져오기 DataSourceUtils를 사용하면 트랜잭션 경계 내에서 데이터 소스에서 Connection 객체를 가져옵니다. Spring의 트랜잭션 관리자가 활성화된 경우, 이 클래스는 트랜잭션 경계와 연결된 Connection을 반환하며, 그렇지 않으면 데이터 소스에서 새 Connection을 생성합니다.

  2. 커넥션 반환 처리 트랜잭션 컨텍스트 내에서 사용된 Connection을 닫는 대신, DataSourceUtils.releaseConnection 메서드를 통해 반환하면 Spring이 커넥션 반환을 올바르게 처리합니다. 트랜잭션이 활성화된 경우, 커넥션을 닫지 않고 풀에 반환하거나 트랜잭션 매니저에 연결된 상태를 유지합니다.


주요 메서드

1. getConnection(DataSource dataSource)

  • 지정된 DataSource로부터 Connection을 가져옵니다.

  • 활성 트랜잭션이 있으면 트랜잭션과 연결된 Connection을 반환합니다.

  • 트랜잭션이 없으면 새 커넥션을 생성합니다.

Connection connection = DataSourceUtils.getConnection(dataSource);

2. releaseConnection(Connection con, DataSource dataSource)

  • 사용이 끝난 Connection을 적절히 반환합니다.

  • 트랜잭션 경계 내에서는 커넥션을 실제로 닫지 않고 관리하고, 트랜잭션 외부에서는 풀로 반환하거나 닫습니다.

DataSourceUtils.releaseConnection(connection, dataSource);

3. isConnectionTransactional(Connection con, DataSource dataSource)

  • 지정된 Connection이 현재 트랜잭션에 속해 있는지 확인합니다.

boolean isTransactional = DataSourceUtils.isConnectionTransactional(connection, dataSource);

주요 사용 사례

  1. Spring 트랜잭션과의 통합 @Transactional을 사용하는 경우, DataSourceUtils는 트랜잭션 컨텍스트에서 적절한 Connection을 제공하고 반환합니다.

  2. Spring JDBC Template Spring의 JdbcTemplate 내부에서도 DataSourceUtils를 사용하여 데이터베이스 연결을 관리합니다.

  3. 커넥션 관리 최적화 트랜잭션 처리 중 커넥션을 안전하게 재사용하거나 반환하도록 보장합니다.


주의사항

  1. 직접 커넥션을 닫지 말 것 DataSourceUtils로 가져온 커넥션은 직접 close()를 호출하지 말고, 반드시 DataSourceUtils.releaseConnection으로 반환해야 합니다. 직접 닫으면 트랜잭션이 깨질 수 있습니다.

  2. 트랜잭션 설정 확인 트랜잭션이 올바르게 설정되지 않으면 DataSourceUtils가 예상대로 작동하지 않을 수 있습니다.


예제 코드

import org.springframework.jdbc.datasource.DataSourceUtils;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class DataSourceUtilsExample {
    private DataSource dataSource;

    public DataSourceUtilsExample(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    public void executeQuery() {
        Connection connection = null;
        try {
            // 트랜잭션 경계를 유지하며 커넥션 가져오기
            connection = DataSourceUtils.getConnection(dataSource);

            String sql = "SELECT * FROM users WHERE id = ?";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1, 1);
            
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                System.out.println("User Name: " + resultSet.getString("name"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 커넥션 반환
            DataSourceUtils.releaseConnection(connection, dataSource);
        }
    }
}
Previous17 트랜잭션Next18 JDBC 템플릿 활용

Last updated 4 months ago