23년 6월 29일 목요일
오늘의 목표 : 트랜잭션 이해하기
오늘 공부한 내용🤓
오늘 숙련주차 과제 마무리 커밋하고 제출까지 완료!
빠른 진도 + 과제 덕에 겉핥기도 못한 Spring을 스텝바이스텝으로 천천히 이해하는 중이다.
과제 제출 기념으로 약간의 휴식을 갖고 오늘은 Spring 개인 스터디 내용 중심으로 공부했다.
트랜잭션의 기본적인 개념 : 데이터를 안전하게 처리하도록 보장해주는 것
A, B 두개의 데이터 베이스에서 트랜잭션의 역할은 커밋을 하기 전까지는 메모리에 저장만 할 뿐 데이터베이스에 저장하지 않는다.
즉, 커밋을 호출하기 전까지는 임시로 데이터를 저장하는 것이다.
커밋하지 않은 데이터를 다른 곳에서 조회할 수 있으면 여러 유저가 동시에 사용 할 경우
데이터가 롤백되면서 타 유저의 데이터도 사라지는 데이터 정합성에 문제가 발생하기 때문에 트랜잭션의 역할이 중요하다.
[자동 커밋]
자동 커밋으로 설정하면 각각의 쿼리 실행 직후에 자동으로 커밋을 호출하기 때문에
커밋이나 롤백을 직접 호출하지 않아도 되기 때문에 굉장히 편리하지만 실행 할 때마다 자동으로 커밋이 되기 때문에
트랜잭션의 기능을 제대로 사용할 수 없는 단점이 존재한다.
set autocommit true; //자동 커밋 모드 설정
[수동 커밋]
보통의 경우에는 자동 커밋 모드가 기본으로 설정되어 있다.수동 커밋 모드로 설정하는 것을 트랜잭션을 시작한다라고 표현하며, 수동 커밋 설정 후에는 꼭 커밋과 롤백을 호출해야한다.
set autocommit false; //수동 커밋 모드 설정
commit; //수동 커밋
자동/수동 커밋 모드는 한번 설정하면 해당 세션에서는 계속 유지가 되고 중간에 변경하는 것이 가능하다는 특징이 있다.
[롤백]
커밋 전의 데이터 상태로 되돌리는 것을 의미한다.
rollback;
[락]
세션1이 트랜잭션을 시작하고 데이터를 수정하는 동안 아직 커밋을 수행하지 않았는데,
세션2에서 동시에 같은 데이터를 수정하게 되면 상식적으로 생각해도 문제가 생긴다.
여기에 더해서 세션1이 중간에 롤백을 하게 되면 세션2는 잘못된 데이터를 수정하는 문제가 발생한다.
바로 트랜잭션의 원자성 특징이 깨지는 것인데, 이를 방지하려면 세션이 트랜잭션을 시작하고 데이터를 수정하는 동안에
커밋이나 롤백을 하기 전까지는 다른 세션에서 해당 데이터를 수정할 수 없도록 막아야하는데
이런 역할을 하는 것이 락이다.
락은 요청한 순서대로 획득되며, 락을 획득하지 못한 세션에서 일정 시간동안 락 타임아웃을 요청 할 수 있다.
락 타임아웃 내에 락을 얻는다면 데이터 수정이 정상적으로 이루어지지만 그렇지 못하다면 락 타임아웃 오류가 발생하면서
데이터 수정이 취소된다.
어려웠던 내용😵💫
궁금&부족한 내용❓
느낀 점💡
'📌TIL [Today I Learn]' 카테고리의 다른 글
[TIL] 23년 7월 3일 월요일 (0) | 2023.07.03 |
---|---|
[TIL] 23년 6월 30일 금요일 (0) | 2023.06.30 |
[TIL] 23년 6월 28일 수요일 (0) | 2023.06.28 |
[TIL] 23년 6월 27일 화요일 (0) | 2023.06.27 |
[TIL] 23년 6월 26일 월요일 (0) | 2023.06.26 |