GitHub

https://github.com/Choidongjun0830

트랜잭션 5

[Spring DB2] 스프링 트랜잭션 이해 - 1

데이터 베이스 접근 기술마다 트랜잭션을 처리하는 방식이 다르다. 그래서 기술을 바꾸면 트랜잭션을 사용하는 코드도 모두 바꿔야 한다. 스프링은 'PlatformTransactionManager'라는 인터페이스를 통해 트랜잭션 추상화를 제공해주고, 그러면 다른 기술도 동일한 방식으로 사용할 수 있게 된다. 게다가 각 데이터 접근 기술에 대한 트랜잭션 매니저의 구현체도 제공한다. 그래서 개발자가 구현할 일은 없이 잘 가져가다 쓰기만 하면 된다. 또, 스프링 부트는 어떤 데이터 접근 기술을 사용하는지를 자동으로 인식해서 적절한 트랜잭션 매니저를 선택하여 스프링 빈에 등록해준다. 트랜잭션 사용방식 선언적 트랜잭션 관리 @Transactional 이름 그대로 해당 로직에 트랜잭션을 적용하겠다라고 선언하기만 하면 트..

Spring 2024.03.27

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 4. 스프링과 문제 해결 - 트랜잭션 - 2

MemberRepository의 코드 수정 (V3) 파라미터로 커넥션을 넘기는 부분을 모두 지우고 private void close(Connection con, Statement stmt, ResultSet rs) { JdbcUtils.closeResultSet(rs); JdbcUtils.closeStatement(stmt); //트랜잭션 동기화를 사용하려면 DataSourceUtils를 사용해야함. DataSourceUtils.releaseConnection(con, dataSource); } private Connection getConnection() throws SQLException { Connection con = DataSourceUtils.getConnection(dataSource); l..

Spring 2024.02.29

[Spring DB 1편 듣고 복습, 토이 프로젝트 수정] 3. 트랜잭션 이해

트랜잭션 개념 데이터를 데이터베이스에 저장하는 이유는 트랜잭션 때문이다. 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해준다. 계좌 이체에서 A가 B에게 2000원을 보낸다고 했을 때, 두가지 일이 수행되어야 한다. 하나는 A의 잔고가 2000원 줄어드는 것. 또 하나는 B의 잔고가 2000원이 증가하는 것이다. 하지만, 만약 A의 잔고가 2000원 줄어들고, 오류가 나서 B의 잔고가 증가하지 않는다면 심각한 문제가 발생한다. 그래서 이때는 모든 일이 성공적으로 수행되면 커밋, 하나라도 실패하면 롤백되도록 해야한다. 트랜잭션 ACID Atomicity: 원자성. 트랜잭션 내에서 실행한 작업들은 하나의 작업인 것처럼 모두 성공하거나 모두 실패해야 한다. Consistency: 일관성. 모든 트랜잭션은 ..

Spring 2024.02.27

스프링으로 트랜잭션 문제 해결

프레젠테이션 계층(컨트롤러), 서비스 계층, 데이터베이스 접근 계층 중 가장 중요한 것은 비즈니스 로직을 담고 있는 서비스 계층이다. 서비스 계층은 가능한 순수한 자바 언어로 이루어져 변경이 자주 일어나지 않도록 해야 한다. 하지만 트랜잭션에서 배우고 실습했던 코드들은 SQLException과 같은 JDBC에 속하는 오류를 담고 있고, MemberRepositoryV1이라는 구체 클래스에 의존되어 있다. 따라서 컨트롤러나 데이터베이스 접근 계층의 변경이 일어나면 서비스 계층도 바꿔야 한다. 트랜잭션은 서비스 계층에서 구현되어야 하는데 트랜잭션 코드를 위한 try catch finally 같은 코드들의 중복도 많다. 그리고 JDBC와 JPA의 트랜잭션 구현 코드도 다르다. 기술을 변경하게 되면 서비스 계층..

Spring 2024.02.13

트랜잭션

트랜잭션 이름 그대로 번역하면 거래 -> 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것이다. 예를 들어 A가 B에게 5000원을 송금하면 A의 계좌에서 5000원이 빠지고, B의 계좌에 5000원이 추가되어야 한다. 이 두가지 작업 모두가 성공적으로 이루어져야 문제가 없다. 데이터베이스에서도 모든 작업이 정상적으로 성공하여 반영되는 것을 '커밋(Commit)'이라 하고 하나라도 실패해서 거래 이전으로 돌리는 것을 '롤백(Rollback)'이라 한다. 트랜잭션 ACID Atomicity(원자성) : 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 실패해야 한다. 일관성(Consistency) : 모든 트랜잭션은 일관성있는 데이터 베이스 상태를 유지해야..

Spring 2024.02.08
728x90