이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. DataBase Lock의 개념 이해 두 개의 DB 세션이 존재한다고 가정해보자. 세션 1이 A라는 행의 데이터를 수정중이고 이를 아직 커밋하지 않은 상황이다. 이 때, 세션2가 A라는 행에 접근해서 데이터를 수정하는 상황이 있다고 가정해보자. 한 마디로 설명하면, A라는 곳을 동시에 여러 세션이 수정하려고 하는 상황이다. 이러면 문제가 없을까? 문제가 있다. 데이터의 정합성이 무너진다. 가장 큰 이유 중 하나는 트랜잭션의 원자성이 무너진다는 것이다. 위의 그림을 예로 들어보자. 세션1은 A → B → C 순으로 접근해서 각각의 데이터를 수정하는 일을 한다고 가정한다. 세션1이 A의 값을 수정하고, B의 값을 수정하는 순간 세션2가 A의 값을 ..
이 게시글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 트랜잭션과 계좌이체 앞서서 트랜잭션을 설명하며 계좌이체에 대한 이야기를 했었다. 먼저 그 내용을 간단히 한번 상기시켜본다. memberA에서 memberB에게 5000원을 이체하는 상황을 가정한다. memberA의 잔고에서 5000원을 뺀다. memberB의 잔고에서 5000원을 증가시킨다. 계좌이체를 하기 위해서는 위 두 가지 일이 진행되어야 한다고 했다. 그리고 모두 성공되어야 하나의 일로써 인정을 받는다. 하나라도 실패한다면 이 일은 실패한 일이 되고 이 일이 시작하기 전 처음으로 돌아가야한다. 트랜잭션 실습 계좌이체 정상 성공 계좌이체 문제 상황 발생 + 커밋 계좌이체 문제 상황 발생 + 롤백 이 트랜잭션 실습에서는 계좌이체와 관련된..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 트랜잭션 커밋 / 롤백 실습 이번 포스팅에서는 H2 DB를 이용해 트랜잭션의 커밋 / 롤백을 확인하려고 한다. 트랜잭션 격리성을 확인하기 위해 두 개의 세션을 만든다. 브라우저 2개를 켜서, 각각 DB에 로그인하면 된다. 이렇게 하면 DB 세션이 두 개 생성됨. 기본 올드 데이터를 만들어준다. 그리고 잘 들어갔는지 각 세션에서 SELECT 쿼리를 통해 확인한다. DB 세션 여러 개 생성의 의미 // 세션1 http://192.168.0.15:8082/login.do?jsessionid=29f1fe9c6178ae0905e3f40bf54f2375 // 세션2 http://192.168.0.15:8082/login.do?jsessionid=29f1f..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 트랜잭션의 이해 앞서 이야기했던 트랜잭션 내용을 DB에서 SQL문을 실제로 작성하며 이해를 해보고자 한다. 이 게시글에서는 하나의 테이블과 두 개의 세션을 이용해, 실제로 어떤게 동작하는지를 살펴본다. 테이블 생성 DROP TABLE MEMBER IF EXISTS; CREATE TABLE MEMBER( MEMBER_ID VARCHAR(10), MONEY INTEGER NOT NULL DEFAULT 0, PRIMARY KEY(MEMBER_ID) ) 다음 SQL 문을 작성해서 두 개의 Column(Member_id, Money)를 가지는 Member 테이블을 만들 수 있다. 초기 데이터 셋팅 INSERT INTO MEMBER(MEMBER_ID, M..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. DB 트랜잭션 동작방식 확인 이 게시글에서는 DB 트랜잭션 동작방식을 그림으로 이해를 해보려고 한다. 아래에 관련 내용을 정리했다. 트랜잭션 사용법 데이터 변경 쿼리를 실행했다. 쿼리를 실행한 것은 DB에 변경 결과를 실제로 반영하는 상태는 아니다. DB에 실제 데이터 변경을 반영하기 위해서는 Commit 명령어를 호출해야한다. 실행된 쿼리를 반영하고 싶지 않으면 RollBack 명령어를 호출한다. Commit을 호출하기 전까지 변경된 데이터는 임시로 저장되는 것이다. 따라서 해당 쿼리를 실행한 사용자에게는 변경 정보가 보이지만, 다른 사용자에게는 보이지 않는다. 위의 내용에서 가장 중요하게 여겨봐야 할 부분은 내 입장에서는 적어도 두 가지다...