[워밍업 스터디 클럽 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());
}
댓글을 작성해보세요.