본문으로 바로가기

https://www.inflearn.com/course/스프링-db-1/

 

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

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

www.inflearn.com

 

2. 트랙잭션의 이해

트랙잭션 - 개념 이해
  • 데이터를 DB에 저장하는 이유는 트랙잭션이라는 개념을 지원하기 때문이다.
  • 트랙잭션 : 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻함
  • 트랙잭션 ACID : 원자성, 일관성, 격리성, 지속성
    - 격리성은 동시성과 관련된 성능 이슈로 인해 트랙잭션 격리 수준을 선택할 수 있다.
  • 트랙잭션 격리 수준 - isolation level (ansi 표준)
    - READ UNCOMMITED, READ COMMITED, REPEATBLE READ, SERIALIZABLE
데이터베이스 연결 구조와 DB 세션
  • DB의 커넥션이 연결되면 세션을 만들고, 해당 세션에서 SQL을 시작한다.
  • 커넥션풀이 커넥션을 10개 만들면, 세션도 10개 만든다.
트랙잭션 - DB 예제1,2,3,4 - 개념이해 & 자동 커밋, 수동 커밋 & 트랙잭션 실습 & 계좌 이체
  • 트랙잭션 사용법
    - 커밋을 호출하기 전까지 임시로 데이터를 저장하는 것
  • 자동커밋
    - 기본적으로 자동커밋이 Default
    - 각각의 쿼리 실행 직후에 자동으로 커밋을 호출한다.
    - 우리가 원하는 트랙잭션 기능을 제대로 사용할 수 없다.
  • 수동 커밋
    - set autocmmit false;
    - 수동 커밋 모드로 설정하는 것이 트랙잭션의 시작
DB 락 - 개념 이해 & 변경 & 조회
  • 락을 획득해야 트랙잭션을 통해 데이터를 바꿀 수 있다.
    - 다른 세션이 데이터를 변경하려면 락을 기다리게 되는데, 타임아웃이 있어서 타임아웃 오류가 발생할 수도 있다
  • 데이터를 조회할때도 락을 획득하고 싶을 때가 있다.
    - select for update 구문을 사용하자
    - 필요 이유 : 트랙잭션 종료 시점까지 해당 데이터를 다른곳에서 변경하지 못하도록 강제로 막아야함
  • 트랙잭션과 락은 데이터베이스마다 실제 동작하는 방식이 조금 다르기 때문에 확인 후 사용해야한다.
트랙잭션 - 적용1 & 적용2
  • 트랙잭션 어노테이션을 쓰지 않으면 autocommit이 된다.
  • 트랙잭션을 시작하려면 커넥션이 필요하다.
  • 애플리케이션에서 DB 트랙잭션을 사용하려면 "트랙잭션을 사용하는 동안 같은 커넥션을 유지" 해야 한다.
  • 유지하기 위한 가장 간단한 방법은 커넥션을 파라미터로 전달해서 같은 커넥션이 사용되도록 유지하는 것
  • 커넥션을 close 할때 setautocommit 관한 설정이 해제하지 않으면 false 인 상태로 돌아가게 된다.