ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 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

     

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

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

    www.inflearn.com

     

    댓글

Designed by Tistory.