BE Study

[BE Study] Day 8 -트랜잭션

고고잉93 2024. 2. 29. 00:27
728x90

◈ 트랙잭션(Transaction)

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

     =모든 SQL을 성공시키거나 하나라도 실패하면 모두 실패시키기.

public class OrderService{
	public void completePayment(){
	orderRepository.save(new Order(..));
        pointRepository.save(new Point(..));
        billingHistoryRepository.save(new BillingHistory(..));
        } //order,point만 성공하고 billing만 실패가 될수 없다.
}

 

● 트랜잭션 시작하기

  : start transaction;

● 정상 종료하기

  : commit

● 실패처리하기

  : rollback

 

▣ @Transactional

// 아래있는 함수가 시작될때 start transaction을 해준다 (트랙잭션을 시작)
    // 함수가 예외없이 잘 끝났다면 commit
    // 문제가 있다면 rollback -> 저장 자체가 안됨
    @Transactional
    public void saveUser(UserCreateRequest request) {
        userRepository.save(new User(request.getName(), request.getAge()));
    }

 

□ 영속성 컨텍스트란?

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

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

 

영속성 컨텍스트 기능 4가지

1. 변경감지(Dirty check)

 : 영속성 컨텍스트 안에서 불러온 Entity는 명시적으로 save(userRepository.save())를 하지 않더라고, 변경을 감지해

    자동으로 저장

 

2. 쓰기지연

 : DB의 INSERT/ UPDATE/ DELETE SQL을 바로 날리는것이 아니라 트랜잭션이 commit될때 모아서 한번만 실행한다.

   (Spring과 DB의 통신을 더 간결하게 하기위해)

 

3. 1차 캐싱

  :  영속성 컨텍스트가 정보를 기억하여 중복작업 실행에 대한 효율을 증가시킨다.

 

강의: https://inf.run/Hywa

 

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인

Java와 Spring Boot, JPA, MySQL, AWS를 이용해 서버를 개발하고 배포합니다. 웹 애플리케이션을 개발하며 서버 개발에 필요한 배경지식과 이론, 다양한 기술들을 모두 학습할 뿐 아니라, 다양한 옵션들

www.inflearn.com

 

728x90