테스트 메서드 save()와 쓰기 지연 관련해서
130
작성한 질문수 147
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
ItemRepositoryTest를 실행하면 updateItem()는 update 쿼리가 실행되지 않지만 save()는 insert 쿼리가 로그로 보이더라고요.
JPA PPT에 나와 있는 트랜잭션을 지원하는 쓰기 지연 - INSERT
이 내용대로라면 save()를 해도 insert 쿼리가 안 보여야 할 것 같은데, 이건 관련 옵션을 켜야만 적용되는 건가요?
쓰기 지연이 안 되는 것이 디폴트이고, 옵션을 켜면 save()도 updateItem()과 마찬가지로 insert 쿼리가 안 보이게 되는 건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 11 1님!
JPA에서의 “쓰기 지연”은 트랜잭션이 커밋될 때까지 INSERT나 UPDATE 같은 쿼리가 실제로 데이터베이스에 전달되지 않고, 영속성 컨텍스트에 저장되었다가 커밋 시점에 한꺼번에 처리되는 기능을 의미합니다.
하지만 여기서 헷갈리실 수 있는 부분은, JPA에서 엔티티의 ID 생성 전략에 따라 INSERT 쿼리가 실행되는 시점이 달라질 수 있다는 점입니다. 예를 들어:
IDENTITY전략: 데이터베이스에 INSERT해야 자동 생성된 ID 값을 알 수 있으므로, 영속성 컨텍스트에 엔티티를 추가할 때 바로 INSERT 쿼리가 실행됩니다.
SEQUENCE나TABLE전략: 영속성 컨텍스트에만 엔티티가 추가되고, 실제 INSERT 쿼리는 커밋 시점에 실행됩니다.
따라서 save()에서 INSERT 쿼리가 로그에 보이는 이유는 주로 IDENTITY 전략 때문입니다. 관련 옵션 없이도 기본적으로 이러한 동작을 가집니다. 반면 updateItem()의 경우, 변경 내역을 유지하고 있는 상태에서 트랜잭션 커밋 시점에 반영될 수 있습니다.
더 이해를 돕기 위해 유사한 질문을 찾았습니다:
- 쓰기 지연 질문입니다
- 안녕하세요 쓰기지연 -insert 장표의 설명에 관해 질문이 있습니다.
위 질문에 대한 답변과 게시물들도 참고하면 JPA의 쓰기 지연 메커니즘에 대한 이해에 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
RepositoryTest의 패키지 위치가 domain인 이유
0
29
2
REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!
0
29
1
update()에 사용하는 setter 질문드립니다.
0
47
1
SQL 중심적 개발의 문제점에 대한 질문
0
72
1
혹시 Containing 을 안쓰신 이유가 있을까요?
0
83
2
[공유] 스프링부트 4.x 버전 mybatis 연동
0
173
1
@repository 어노테이션
0
89
3
ItemService
0
58
1
논리 커밋, 물리 커밋 질문드립니다.
0
54
1
내부 트랜잭션 커밋은 필수인가요?
0
57
1
프록시 커넥션 객체를 반환할 때 생성하는건가요?
0
54
1
Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)
2
178
2
JPQL 대신 네이티브 쿼리를 사용해야 하는 경우
0
77
1
@EventListener(ApplicationReadyEvent.class) 관련
0
88
1
트랜잭션 동기화 매니저와 데이터 소스
0
76
1
DB 관련 강의 개설 계획은 없으신건가요?
0
133
2
물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요
0
94
1
스프링 3 버전 이상 rollbackFor 변경된듯요
1
112
1
트랜잭션 전파 질문.
0
87
1
프로젝트 오픈 에러
0
126
1
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
0
83
2
같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환
0
72
1
h2 인메모리 테스트중 예약어 충돌날 경우 대처방법
0
102
1
커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문
0
98
2





