Service : transaction, 영속성 컨텍스트

지원·2026년 2월 26일

SpringBoot

목록 보기
9/17
post-thumbnail

트랜잭션

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

  • 시작
start transaction;
  • 종료 : 모두 성공
commit;
  • 실패 : 모두 실패
rollback;
  • 스프링에서 트랜잭션을 적용하는 법 (생성자 위)
    @Transactional (*org.springframework.~에 있는 걸로 선택해야함)
    SELECT 쿼리만 사용한다면,readOnly 옵션을 쓸 수 있다.
//ex
@Transactional(readOnly = true)
조회만 하는 곳에 쓴다면, 성능적 이점이 있다.
  • IOException과 같은 checked Exception은 롤백이 일어나지 않는다.

영속성 컨텍스트

  • 엔티티를 영구 저장하는 환경
  • 테이블과 매핑된 Entity 객체를 관리/보관하는 역할
  • 스프링에서 트랜잭션을 사용하면 영속성 컨텍스트가 시작되고, 트랜잭션이 종료되면 영속성 컨텍스트가 종료된다.
  • 영속성 컨텍스트 특징
  1. 변경 감지 : 영속성 컨텍스트 안에서 불러와진 Entity는 명시적으로 save하지 않더라도, 변경을 감지해 자동으로 저장된다.
@Transactional
public void updateUser(UserUpdateRequest request) {
	User user = userRepository.findById(request.getId())
    			.orElseThrow(IllegalArgumentException::new);
                
    user.updateName(request.getName());
  1. 쓰기 지연 : DB의 INSERT/UPDATE/ DELETE SQL을 바로 날리는 것이 아니라, 트랜잭션이 commit될 때 모아서 한 번만 날린다.
  2. 1차 캐싱 : ID를 기준으로 Entity를 기억한다. 이렇게 캐싱된 객체는 완전하게 동일하다.
profile
개발 공부하는 김지원

0개의 댓글