[Spring] 트랜잭션 적용하기

jsieon97·2023년 3월 2일

[Spring] BackEnd

목록 보기
10/11

어떻게 트랜잭션을 적용할까?

@Transactional 어노테이션을 이용해 간단하게 적용할 수 있다.

@Transactional
    public void saveUser(UserCreateRequest request) {
        User u = userRepository.save(new User(request.getName(), request.getAge()));
    }

SELECT 쿼리만 사용한다면 @Transactional(readOnly = true)을 붙여 읽기 전용 처리를 할 수 있다. (약간의 성능 향상)

트랜잭션 처리시 주의사항

IOException와 같은 Checked Exception 발생시 트랜잭션 처리가 제대로 이뤄지지 않는다.

영속성 컨텍스트

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

스프링에서는 트랜잭션을 사용하면 영속성 컨텍스트가 생겨나고, 트랜잭션이 종료되면 영속성 컨텍스트가 종료된다.

영속성 컨텍스트의 역할

  • 변경 감지 : 영속성 컨텍스트 안에서 불러와진 Entity는 명시적으로 save하지 않더라도, 변경을 감지해 자동으로 저장된다.
  • 쓰기 지연 : DB의 INSERT / UPDATE / DELETE SQL을 바로 날리는 것이 아니라 트랜잭션이 commit될때 한번만 실행한다.(통신 횟수 감소, 성능 향상)
  • 1차 캐싱 : ID를 기준으로 Entity를 기억한다. 같은ID를 기억했다가 같은 요청시 캐싱한 데이터를 알려준다(통신 횟수 감소, 성능 향상) 이렇게 캐싱된 객체는 완전히 동일하다(객체인스턴스의 주소까지 동일)
  • 지연 로딩 : 꼭 필요한 순간에 데이터를 로딩한다.
profile
개발자로써 성장하는 방법

0개의 댓글