Spring Boot JPA에서 엔티티를 읽기 전용으로 설정하는 방법 ( @Immutable과 readOnly 트랜잭션 활용하기 )

2025. 2. 24. 09:11·개발중/Java Persistence API (JPA)
728x90
반응형

Hibernate의 @Immutable 사용

Hibernate를 사용한다면, 엔티티 클래스에 @Immutable 어노테이션을 추가할 수 있습니다.

@Immutable 어노테이션은 해당 엔티티가 수정되지 않는다는 것을 Hibernate에게 알려주며, 업데이트나 삭제 작업을 무시하거나 예외를 발생시킵니다.

 

import javax.persistence.Entity;
import org.hibernate.annotations.Immutable;

@Entity
@Immutable
public class MyEntity {
    // 필드, getter 등
}

 

 

읽기 전용 트랜잭션 사용

서비스 계층에서 @Transactional(readOnly = true)를 사용하면, 해당 트랜잭션 내에서는 엔티티 변경 사항이 flush되지 않으므로 읽기 전용으로 동작하게 됩니다. 하지만 이 방식은 엔티티 객체 자체를 수정하는 것을 막지는 않으므로, 실수로 수정된 상태가 감지되더라도 flush되지 않게 할 뿐입니다.

 

@Service
public class MyService {
    @Transactional(readOnly = true)
    public List<MyEntity> getMyEntities() {
        return myEntityRepository.findAll();
    }
}

 

 

가장 확실한 방법은 Hibernate를 사용하는 경우 엔티티에 @Immutable 어노테이션을 추가하는 것입니다. 추가로 서비스 계층에서 @Transactional(readOnly = true)를 활용하면, 전체 애플리케이션에서 읽기 전용 환경을 유지하는 데 도움이 됩니다. 이를 통해 도메인 엔티티의 변경을 방지하고, 읽기 전용으로 사용할 수 있습니다.

728x90
반응형
저작자표시 (새창열림)

'개발중 > Java Persistence API (JPA)' 카테고리의 다른 글

[JPA] 낙관적 락(Optimistic Lock)과 비관적락 (Pessimistic Lock) 이란 ?  (1) 2024.01.17
JPA Bulk Insert 로 성능 향상 시키기  (0) 2023.08.22
[JPA] Entity 가 Update 되는 과정에 대해서 아니  (0) 2023.06.27
[JPA ERROR] No qualifying bean of type 'org.springframework.transaction.TransactionManager' available  (0) 2023.03.15
[JPA] 다른 컬럼명을 참조하는 연관관계에 대한 궁굼점 (referencedColumnName)  (0) 2023.02.13
'개발중/Java Persistence API (JPA)' 카테고리의 다른 글
  • [JPA] 낙관적 락(Optimistic Lock)과 비관적락 (Pessimistic Lock) 이란 ?
  • JPA Bulk Insert 로 성능 향상 시키기
  • [JPA] Entity 가 Update 되는 과정에 대해서 아니
  • [JPA ERROR] No qualifying bean of type 'org.springframework.transaction.TransactionManager' available
Binsoo
Binsoo
내 트러블 슈팅
  • Binsoo
    정수빈 기술블로그임.
    Binsoo
  • 전체
    오늘
    어제
    • 빈수 개발자 개발 일기 (949)
      • 개발중 (635)
        • Spring Boot (95)
        • Spring Security (2)
        • Spring Batch (6)
        • Spring Boot & Redis (13)
        • Java Persistence API (JPA) (28)
        • Web (42)
        • Rest Api (7)
        • Spring Concurrency Control (3)
        • Redis (8)
        • Kubernetes (k8s) (4)
        • MYSQL (35)
        • AirFlow (15)
        • Docker (2)
        • Git (22)
        • Linux (9)
        • JSON Web Tokens (JWT) (4)
        • Troubleshooting (88)
        • Swagger (0)
        • Vue.js (52)
        • Java (74)
        • html (12)
        • C (5)
        • jQuery (15)
        • JavaServer Pages (JSP) (17)
        • Arduino (1)
        • JavaScript (35)
        • Amazon Web Services (AWS) (11)
        • Algorithm (9)
        • 참고 기능 (18)
        • mongo (2)
      • PROJECT (27)
        • 스프링부트+JPA+몽고 API 개발 (3)
        • MINI (2)
        • 게시판 (3)
        • vue 프로젝트 (1)
        • JPA 사이드 프로젝트 기록 (17)
      • TEAM STUDY (156)
        • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (8)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (12)
        • NAVER DEVELOPER (4)
        • LINUX (23)
        • PYTHON (19)
        • SERVER (8)
        • 알고리즘 코딩 테스트 스터디 (31)
        • 쿠버네티스 (40)
        • 대세는 쿠버네티스 [초급~중급] (11)
      • BOOK (0)
      • 자격증 (61)
        • 리눅스 1급 - 필기 기록 (19)
        • 네트워크 관리사 (2)
        • 네트워크 관리사 2급 - 실기 기록 (21)
        • 네트워크 관리사 2급 - 필기 기록 (16)
        • 정보처리 (2)
      • 직장인 대학원 (28)
        • 기록 (3)
        • 캐글 스터디 (3)
        • R (12)
        • MLOps (10)
      • 논문 (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    네트워크 관리사 자격증
    네트워크 관리사 실기
    네트워크 관리사
    java
    알고리즘
    리눅스 마스터 1급 요약
    네트워크 관리사 요약
    docker
    네트워크 관리사 2급
    jpa
    스프링
    리눅스 마스터 1급 정리
    파이썬
    쿠버네티스 스터디
    Spring
    리눅스 마스터
    파이썬 알고리즘
    리눅스 마스터 1급
    redis
    REST API
    BackendDevelopment
    springboot
    Git 저장소
    리눅스 마스터 요약
    네트워크 관리사 학점
    쿠버네티스
    VUE
    git
    리눅스 1급 요약
    네트워크 관리사 2급 실기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Binsoo
Spring Boot JPA에서 엔티티를 읽기 전용으로 설정하는 방법 ( @Immutable과 readOnly 트랜잭션 활용하기 )
상단으로

티스토리툴바