본문 바로가기

Spring Boot/JPA

(3)
@Transactional(readOnly = false)일 때 얻는 이점 @Transactional의 readOnly param을 false로 설정하면 다음과 같은 이점을 얻을 수 있다. 변경감지를 위해 snapshot(객체의 초기상태)을 저장해야 하는데, 이 동작을 하지 않아 메모리가 절약된다. 이는 @QueryHint를 이용하여 readOnly로 설정했을 때와 동일한 효과이다. (Spring 5.1부터 적용된다) FlushMode가 MANUAL로 설정되어, 직접 flush하지 않으면 flush가 일어나지 않게 된다. (Transaction commit이나 JPQL 실행 전과 같이 flush가 발생해야 하는 상황에서 발생하지 않는다.) (이 기능은 Hibernate의 전용기능이다.) @Test @Transactional(readOnly = true) public void r..
@Transactional method의 Transaction 전파 공부를 하다가 @Transactional method는 어떻게 전파되는지 궁금해졌다. 그리고 결국 정말 오랜 시간을 박치기해서 내가 원하는 결론에 다다를 수 있었다. 다음 결론들은 기본 전파 전략인 Required를 사용했을 때의 동작이다. 다른 전파 전략을 원하는 사람들은 공식문서를 참고해보자!. 결론은 다음과 같다. 맨 처음에 호출된 @Transactional method의 Transaction 설정이 그대로 다른 method들에게 전파된다는 것이다. (도대체 이 결론을 얻기 위해 얼마나 많이... 시도하고 찾아봤는지 모르겠다.) @Transactional method에서 Non-@Transactional method 호출 MemberJpaRepositoryTest.java package study...
Spring Boot + JPA 설정 Spring data jpa를 Spring Boot와 함께 사용하는 법에 대해 알아보겠다! 설정 jpa만 사용하는 경우에 jpa관련 설정을 'persistence.xml'을 통해 굉장히 길고 복잡하게 해야 했다. 하지만 spring boot를 사용하게 되면 이러한 설정들이 설정파일(.yml이나 properties)을 통해 자동화된다. 다음은 application.yml을 통해 설정한 예시이다. spring: # DB 접속 설정 datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver # JPA 설정 jpa: hibernate: ddl-auto: create properti..