ABOUT ME

개발 지식을 기록, 정리하는 블로그

Today
Yesterday
Total
  • SpringBoot의 JPA
    spring/스프링 입문 주차 2024. 1. 25. 09:42

    이전처럼 직접 emf와 em을 생성하지 않아도 스프링 부트가
    application.properties 를 바탕으로 자동으로 만들어준다.

    @PersistenceContext
    EntityManager em;


    - @PersistenceContext 애너테이션을 통해 자동으로 생성된 EntityManager를 주입받아 사용할 수 있다.


    Spring의 트랜잭션
    - Spring 프레임워크에서는 DB의 트랜잭션 개념을 애플리케이션에 적용할 수 있도록 트랜잭션 관리자를 제공한다.
    - @Transactional 애너테이션을 클래스나 메서드에 추가하면 쉽게 트랜잭션 개념을 적용할 수 있다.

    - 메서드가 호출되면 해당 메서드 내에서 수행되는 모든 DB 연산 내용은 하나의 트랜잭션으로 묶인다.
    - 이때, 해당 메서드가 정상적으로 수행되면 트랜잭션을 커밋하고, 예외가 발생하면 롤백한다.
    - 클래스에 선언한 @Transactional은 해당 클래스 내부의 모든 메서드에 트랜잭션 기능을 부여한다.
    - 디폴트는 readOnly = false
    readOnly = true 옵션
    - 트랜잭션에서 데이터를 읽기만 할 때 사용한다.
    - 이 속성을 사용하면 읽기 작업에 대한 최적화를 수행할 수 있다.
    - 만약, 해당 트랜잭션에서 데이터를 수정하려고 하면 예외가 발생하기 때문에 주의해야 한다.


    영속성 컨텍스트와 트랜잭션의 생명주기
    - 스프링 컨테이너 환경에서는 영속성 컨텍스트와 트랜잭션의 생명주기가 일치한다.
    - 쉽게 설명하자면 트랜잭션이 유지되는 동안은 영속성 컨텍스트도 계속 유지가 되기 때문에
     영속성 컨텍스트의 기능을 사용할 수 있다.
    - 따라서 메서드에 트랜잭션이 적용되지 않았다면 영속성 컨텍스트가 유지되지 못해 오류가 발생한다.

    Spring은 어떻게 Service 부터 Repository 지 Transaction을 유지할 수 있는 걸까?
    - Service의 트랜잭션이 적용된 메서드에서 Repository의 메서드를 호출할 때 무언가 처리되고 있는 것이 있는걸까?
    - Spring에서는 이러한 상황에서 트랜잭션을 제어할 수 있도록 트랜잭션 전파 기능을 제공하고 있다.

     


    트랜잭션 전파
    @Transactional 에서 트랜잭션 전파 옵션을 지정할 수 있다
    - 디폴트는 REQUIRED 이다.
    - REQUIRED 옵션은 부모 메서드에 트랜잭션이 존재하면 자식 메서드의 트랜잭션은 부모의 트랜잭션에
     합류하게 된다.

    - 자식 메서드가 종료될 때 update가 실행되는 것이 아니라, 부모 메서드에 트랜잭션이 합류되면서
     부모 메서드가 종료된 후 트랜재션이 커밋될 때 update가 실행된다.

    'spring > 스프링 입문 주차' 카테고리의 다른 글

    Query Methods 란 무엇일까  (0) 2024.01.25
    엔티티의 상태  (1) 2024.01.25
    영속성 컨텍스트의 기능  (0) 2024.01.25
    JPA란 무엇일까  (0) 2024.01.23
    제어의 역전, ApplicationContext  (2) 2024.01.22
Designed by Tistory.