-
스프링 DB - 트랜잭션 DB 예제(트랜잭션 실습)Data Base/스프링 DB 2023. 11. 24. 13:00
트랜잭션 - DB 예제(트랜잭션 실습)
1. 기본 데이터 입력
지금까지 설명한 예시를 직접 확인해보자.
먼저 H2 데이터베이스 웹 콘솔 창을 2개 열러두자.
❗주의
H2 데이터베이스 앱 콘솔 창을 2개 열때는 기존 URL을 복사하면 안된다. http://localhost:8002를 직접 입력해서 완전히 새로운 세션에서 연결하도록 하자. URL을 복사하면 같은 세션(jsessionId)에서 실행되어서 원하는 결과가 나오지 않을 수 있다.예: http://localhost:8082 에 접근했을 때 다음과 같이 jessionid 값이 서로 달라야 한다. jsession값이 같으면 같은 세션에 접근하게 된다.
먼저 기본 데이터를 다음과 같이 맞추어 둔다.
데이터 초기화 SQL
-- 데이터 초기화 set autocommit true; delete from member; insert into member(member_id, money) values('oldId',10000);
- 자동 커밋 모드를 사용했기 대문에 별도로 커밋을 호출하지 않아도 된다.
이렇게 데이터를 초기화하고, 세션1, 세션2네서 다음 퉈리를 실행해서 결과를 확인하자
select * from member;
- 결과를 이미지와 비교하자. name필드를 이해를 돕기위해 그린
2.신규 데이터 추가 - 커밋 전
세션 1에서 신규 데이터를 추가해보자. 아직 커밋은 하지 않을 것이다.
세션1 신규 데이터 추가
세션1 신규 데이터 추가 SQL
--트랜잭션 시작 set autocommit false; //수동 커밋 모드 insert into member(member_id, money) values ('newId1',10000); insert into member(member_id, money) values ('newId2',10000);
세션1,세션2에서 다음 쿼리를 실행해서 결과를 확인하자
select * from member
결과를 이미지와 비교해보자. 아직 세션1이 커밋을 하지 않은 상태이기 대문에 셋션1에서 입력한 데이터가 보이지만, 세션2에서는 입력한 데이터가 보이지 않는 것을 확인 할 수 있다.
3. 커밋 - commit
세션1에서 신규 데이터를 입력했는데, 아직 커밋은 하지 않았다. 이제 커밋을해서 데이터베이스에 결과를 반영해보자
세션1 신규 데이터 추가 후 commit
세션1에서 커밋을 호출해보자
commit; --데이터베이스에 반영
세션1, 세션2에서 다음 쿼리를 실행해서 결과를 확인하자
select * from member;
결과를 이미지와 비교해보자. 세션1이 트랜잭션을 커밋했기 때문에 데이터베이스에 실제 데이터가 만영 된다. 커밋 이후에는 모든 세션이 데이터를 조회할 수 있다.
4. 롤백 - rollback
이번에는 롤백에 대해서 알아보자
예제를 처음으로 돌리기 위해 데이터를 초기화하자
-- 데이터 초기화 set autocommit true; delete from member; insert into member(member_id, money) values ('oldId',10000);
세션1 신규 데이터 추가
세션1 신규 데이터 추가 SQL
--트랜잭션 시작 set autocommit false; //수동 커밋 모드 insert into member(member_id, money) values ('newId1',10000); insert into member(member_id, money) values ('newId2',10000);
세션1,세션2에서 다음 쿼리를 실행해서 결과를 확인하자
select * from member
결과를 이미지와 비교해보자. 아직 세션1이 커밋을 하지 않은 상태이기 대문에 셋션1에서 입력한 데이터가 보이지만, 세션2에서는 입력한 데이터가 보이지 않는 것을 확인 할 수 있다.
세션1 신규 데이터 추가 후 rollback
세션1에서 롤백을 호출해보자
rollback; -- 롤백으로 데이터베디스에 변경 사항을 반영하지 않는다.
세션1, 세션1네서 다음의 쿼리를 싱행해서 결과를 확인하자
select * from member;
결과를 이미지와 비교해보자 롤맥으로 데이터가 DB에 빈영되지 않은 것을 확인할 수 있다.
[출저 - 스프링 DB 1편 - 데이터 접긎 핵심 원리, 김영한]
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1
'Data Base > 스프링 DB' 카테고리의 다른 글
스프링 DB - DB락 조회 (1) 2023.11.24 스프링 DB - DB락 개념 이해&실습 (0) 2023.11.24 스프링 DB - 트랜잭션 DB 예제2(자동커밋, 수동커밋) (0) 2023.11.23 스프링 DB - 데이터 페이스 연결 구조와 DB세션 (0) 2023.11.23 스프링 DB - 트랜잭션 이해 (1) 2023.11.23