jpa에서 쿼리 보내는 시점에 대해 질문 있습니다.
수정, 삭제, 삽입 같은 경우에는 데이터 변경이라 영속성 컨텍스트의 쓰기 저장소에 보관되어 있다가 커밋 직전에 한번에 보내지는 반면 em.find()를 통해 발생하는 조회 쿼리는 find() 사용시 바로 디비에 전송이 되는건지 궁금합니다.
em.find()를 통해 발생한 조회 쿼리는 트랜잭션 커밋 종료에 상관없이 디비에 바로바로 전송이 되는건지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
감바스님의 질문은 JPA에서 데이터 변경 작업(수정, 삭제, 삽입)과 조회 작업(em.find())이 언제 데이터베이스에 쿼리를 전송하는지에 대한 궁금증을 포함하고 있습니다. 이와 관련하여 답변드립니다.
수정, 삭제, 삽입 같은 데이터 변경 작업의 경우, 이들은 영속성 컨텍스트의 쓰기 지연 저장소에 저장되었다가 트랜잭션이 커밋될 때 데이터베이스에 한 번에 전송됩니다. 이는 JPA의 성능 최적화 기능 중 하나로, 여러 데이터 변경 작업을 하나의 트랜잭션 내에서 모아서 처리함으로써 데이터베이스와의 불필요한 커뮤니케이션 비용을 줄이는 데 도움이 됩니다.
em.find()를 통한 조회 작업의 경우, 영속성 컨텍스트에 해당 엔티티가 이미 존재하는지 우선 확인합니다. 만약 영속성 컨텍스트 내에 해당 엔티티가 존재한다면, 데이터베이스로부터 조회할 필요 없이 영속성 컨텍스트에 저장된 엔티티를 반환합니다. 하지만 해당 엔티티가 영속성 컨텍스트 내에 없을 경우, 즉시 데이터베이스로부터 조회 쿼리를 전송하여 결과를 가져옵니다. 이 과정은 트랜잭션 커밋과는 독립적으로 작동합니다. 따라서em.find()를 통한 조회는 필요할 때마다 바로 데이터베이스에 접근하여 정보를 가져온다고 이해하면 됩니다.
질문자님의 관심사와 직접 관련된 상세 설명을 포함하는 다음 URL을 참고하시기 바랍니다:
- em.find() 및 쓰기 지연 - 이 링크에서는
em.find()호출 시 영속성 컨텍스트와 데이터베이스 간의 상호 작용과 쓰기 지연 SQL 저장소의 역할에 대해 설명해주고 있습니다. 특히em.find()를 통해 조회 쿼리가 어떻게 처리되는지에 대한 내용이 명시되어 있어 질문자님의 궁금증 해결에 도움이 될 것입니다.
이 정보가 감바스님의 JPA와 관련된 궁금증을 명확히 해결하는 데 도움이 되었기를 바랍니다. 추가적인 질문이나 더 자세한 설명이 필요하시면 언제든 질문해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
33
2
inheritance startegy 선택시 고려사항
0
24
1
Entity 동등성 비교
0
25
1
실무 조언 관련 질문입니다.
0
48
1
H2데이터베이스 파일 생성
0
60
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
57
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
58
1
JPQL 메소드와 락
0
56
1
Delivery @OneToOne
0
64
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
98
2
UnsupportedOperationException 발생
0
89
3
H2 Database 연결이 안됩니다.
0
98
2
연관관계 매핑 질문드립니다.
0
88
2
h2데이터베이스 실행오류
0
110
2
persistence.xml
0
112
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
83
1
영속성 컨텍스트
0
70
1
JPA 프록시
0
100
1
Native Query와 MyBatis
0
74
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
93
1
임베디드 타입 예시 코드 관련 질문
0
121
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
97
3
인텔리제이 패키지 커서 단축키 질문
0
109
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
149
1





