inblog logo
|
devleekangho
    기술정리

    [기술 정리] 15. OSIV와 Transactional

    KangHo Lee's avatar
    KangHo Lee
    Dec 02, 2024
    [기술 정리] 15. OSIV와 Transactional
    Contents
    OSIV false 설정과 @Transactional(readOnly = true) 설정을 같이 하는 이유
    // application.properties spring.jpa.open-in-view=false
    @Transactional(readOnly = true) public class BoardService

    OSIV false 설정과 @Transactional(readOnly = true) 설정을 같이 하는 이유

    1. 트랜잭션 경계 명확화
        • OSIV(false)
          • 데이터베이스 세션을 서비스 계층에서 시작하고 종료합니다.
          • 이는 트랜잭션 경계가 명확해져서 트랜잭션이 뷰 레이어까지 확장되지 않도록 합니다.
        • @Transactional(readOnly = true)
          • 데이터베이스 읽기 작업에 대한 트랜잭션을 명확히 설정하여 데이터 무결성을 보장합니다.
          • insert(create) 같은 작업은 메서드 별로 따로 @Transactional(readOnly = false)로 해줘야 합니다.
            • (readOnly = false) 생략 가능
    1. 지연 로딩 이슈 방지:
        • OSIV(false) 설정 시 지연 로딩된 엔티티에 접근할 때LazyInitializationException이 발생할 수 있습니다.
        • 이를 방지하기 위해 @Transactional(readOnly = true)를 사용하여 필요한 데이터를 서비스 계층에서 미리 로드합니다.
          • 이는 데이터베이스 세션이 서비스 계층 내에서만 유지되므로, 엔티티를 미리 로드함으로써 뷰 레이어에서의 예외 발생을 방지합니다.
    1. 성능 최적화
        • OSIV(false)
          • 트랜잭션이 길게 유지되지 않도록 하여 성능을 최적화합니다.
          • 데이터베이스 연결을 필요한 시간 동안만 유지하므로 리소스 사용 효율이 높아집니다.
        • @Transactional(readOnly = true)
          • 데이터 읽기 전용 트랜잭션을 사용하여 데이터베이스의 여러 최적화 기능을 활용합니다.
          • 읽기 전용 트랜잭션은 데이터 변경이 없기 때문에, 데이터베이스는 읽기 락만 설정하면 되며, 이는 락 경합을 줄여 성능을 향상시킵니다.
     
    Share article
    Contents
    OSIV false 설정과 @Transactional(readOnly = true) 설정을 같이 하는 이유

    devleekangho

    RSS·Powered by Inblog