일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스프링 핵심 원리
- Thymeleaf
- 스프링 핵심 기능
- java
- Exception
- AOP
- springdatajpa
- Spring Boot
- 스프링
- Android
- jpa
- JDBC
- Servlet
- 자바
- Proxy
- Greedy
- 백준
- 인프런
- 알고리즘
- http
- transaction
- QueryDSL
- 그리디
- pointcut
- JPQL
- SpringBoot
- kotlin
- spring
- db
- 김영한
- Today
- Total
목록rollback (3)
개발자되기 프로젝트
애플리케이션에서 트랜잭션을 어떤 계층에 걸어야 할까? 쉽게 이야기해서 트랜잭션을 어디에서 시작하고, 어디에서 커밋해야할까? 비즈니스 로직과 transaction 트랜잭션은 비즈니스 로직이 있는 서비스 계층에서 시작해야 한다. 비즈니스 로직이 잘못되면 해당 비즈니스 로직으로 인해 문제가 되는 부분을 함께 롤백해야 하기 때문이다. 그런데 트랜잭션을 시작하려면 커넥션이 필요하다. 결국 서비스 계층에서 커넥션을 만들고, 트랜잭션 커밋 이후에 커넥션을 종료해야 한다. 애플리케이션에서 DB 트랜잭션을 사용하려면 트랜잭션을 사용하는 동안 같은 커넥션을 유지해야한다. 그래야 같은 세션을 사용할 수 있다. 커넥션과 세션 애플리케이션에서 같은 커넥션을 유지하려면 어떻게 해야할까? 가장 단순한 방법은 커넥션을 파라미터로 전..
세 가지 상황을 가정해보자. 계좌이체 정상 계좌이체 문제 상황 - 커밋 계좌이체 문제 상황 - 롤백 1. 계좌이체 정상 기본 데이터 입력 - SQL set autocommit true; delete from member; insert into member(member_id, money) values ('memberA',10000); insert into member(member_id, money) values ('memberB',10000); memberA 10000원 memberB 10000원 계좌이체 실행 memberA 의 돈을 memberB 에게 2000원 계좌이체하는 트랜잭션을 실행해보자. 다음과 같은 2번의 update 쿼리가 수행되어야 한다. set autocommit false 로 설정한다...
1. 기본 데이터 입력 먼저 H2 데이터베이스 웹 콘솔 창을 2개 열어두자. 주의! H2 데이터베이스 웹 콘솔 창을 2개 열때 기존 URL을 복사하면 안된다. 꼭 http://localhost:8082 를 직접 입력해서 완전히 새로운 세션에서 연결하도록 하자. URL을 복사하면 같은 세션( jsessionId )에서 실행되어서 원하는 결과가 나오지 않을 수 있다 기본 데이터 데이터 초기화 SQL //데이터 초기화 set autocommit true; delete from member; insert into member(member_id, money) values ('oldId',10000); 2. 신규 데이터 추가 - commit 전 세션1에서 신규 데이터를 추가해보자. 아직 커밋은 하지 않을 것이다. ..