Data Base/스프링 DB

스프링 DB - 트랜잭션 DB 예제(트랜잭션 실습)

Surge100 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

 

스프링 DB 1편 - 데이터 접근 핵심 원리 - 인프런 | 강의

백엔드 개발에 필요한 DB 데이터 접근 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 백엔

www.inflearn.com