[워밍업 스터디 클럽 0기 BE] 트랜잭션 이란?

(강의 링크 - https://inf.run/XKQg)

 

트랜잭션 이란?

쪼갤 수 없는 업무의 최소 단위

모든 SQL을 성공시키거나, 중간에 하나라도 실패하면 모두 실패시킴

=> 즉 한 번에 성공시키거나 한 번에 실패시킨다.

트랜잭션 시작하기

start transaction;

트랜잭션 정상 종료하기

commit;

트랜잭션 실패 처리(SQL 미반영)

rollback;

 

Spring에서 트랜잭션 적용하기

@Transactional

  • SELECT 쿼리만 사용한다면, readOnly 옵션을 쓸 수 있다

@Transactional(readOnly - true)

  • IOException과 같은 Checked Exception은 롤백이 일어나지 않는다.

     

     

    영속성 컨텍스트 란?

테이블과 매핑된 Entity 객체를 관리/보관하는 역할

스프링에서는 트랜잭션을 사용하면 영속성 컨텍스트가 생겨나고,

트랜잭션이 종료되면 영속성 컨텍스트가 종료된다.

영속성 컨텍스트의 특수 능력 4가지

- 변경 감지 (Dirty Check)

: 영속성 컨텍스트 안에서 불러와진 Entity는 명시적으로 save하지 않더라도, 변경을 감지해 자동으로 저장된다.

- 쓰기 지연

: DB의 INSERT / UPDATE / DELETE SQL을 바로 날리는 것이 아니라,

트랜잭션이 commit될 때 모아서 한 번만 날린다.

- 1차 캐싱

: ID를 기준으로 Entity를 기억

User user1 = userRepository.findById(1L).get();

ID가 1인 유저 조회 -> 영속성 컨텍스트가 1인 유저를 기억

 - 지연 로딩

: 꼭 필요한 순간에 데이터를 로딩한다.

 @Transactional
  public void returnBook(BookReturnRequest request) {
    User user = userRepository.findByName(request.getUserName())
            .orElseThrow(IllegalArgumentException::new);
    System.out.println("Hello");
    user.returnBook(request.getBookName());
  }

댓글을 작성해보세요.