@Transactional ?
@Transactional 어노테이션은 스프링에서 AOP를 통해 트랜잭션을 관리하기 위한 어노테이션이다. 트랜잭션이란 데이터를 변경하기 위한 작업의 단위인데 왜 해당 어노테이션에 readOnly 속성을 사용하는 걸까? 몇 가지 이유에 대해서 알아보자.
1. JPA에서 조회 성능 향상
JPA에서는 데이터를 조회할 때 영속성 컨텍스트 내 1차 캐시 영역을 이용하여 검색 성능을 향상시킬 수 있는데 영속성 컨텍스트를 이용하기 위해서는 트랜잭션이 필요하다. 즉 JPA의 1차 캐시 기능을 이용하여 검색 속도를 개선하기 위해 @Transactional 어노테이션을 사용할 수 있다.
하지만 트랜잭션 내에서 엔티티를 조회한 후 엔티티를 update 한다면 JPA의 변경감지 기능에 의해 의도하지 않은 UPDATE 쿼리가 실행될 수 있다. 이와 같은 실수를 방지하기 위해 readOnly 속성은 변경감지 기능을 메뉴얼로(=flush 직접 호출) 처리하도록 하고 있다.
2. 코드 가독성
두 번째 이유는 "읽기 전용" 메서드를 효과적으로 표현하는 방법과 연관이 있다. 개발자가 읽기전용 메소드를 개발했는데 때 메소드 명으로 읽기 전용인지 표시하는 방법과 어노테이션을 통해 명시하는 방법 중 어느 것이 더 다른 개발자들에게 "읽기 전용" 메서드 임을 어필할 수 있는지 고민해보면 당연히 어노테이션을 선택할 것이다.
'TIL(Today I Learned)' 카테고리의 다른 글
[Today I Learned - 7] Git의 파일 버전관리 메커니즘과 Reset 명령어 (0) | 2024.01.11 |
---|---|
[Today I Learned - 6] Springboot에서 Logback 설정하기 (0) | 2024.01.09 |
[Today I Learned - 4] Mockito의 ArgumentMatchers 와InvalidUseOfMatchersException (1) | 2024.01.08 |
[Today I Learned - 3] @Nonnull(jakarta.annotation) 과 @NotNull(jakarta.validation.constraints) (0) | 2023.12.22 |
[Today I Learned - 2] MySQL 서버 연결 차이점 (0) | 2023.12.14 |