인프런 커뮤니티 질문&답변

감바스님의 프로필 이미지
감바스

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

준영속 상태

jpa에서 쿼리 보내는 시점에 대해 질문 있습니다.

해결된 질문

작성

·

63

0

  1. 수정, 삭제, 삽입 같은 경우에는 데이터 변경이라 영속성 컨텍스트의 쓰기 저장소에 보관되어 있다가 커밋 직전에 한번에 보내지는 반면 em.find()를 통해 발생하는 조회 쿼리는 find() 사용시 바로 디비에 전송이 되는건지 궁금합니다.

  2. em.find()를 통해 발생한 조회 쿼리는 트랜잭션 커밋 종료에 상관없이 디비에 바로바로 전송이 되는건지 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

감바스님의 질문은 JPA에서 데이터 변경 작업(수정, 삭제, 삽입)과 조회 작업(em.find())이 언제 데이터베이스에 쿼리를 전송하는지에 대한 궁금증을 포함하고 있습니다. 이와 관련하여 답변드립니다.

  1. 수정, 삭제, 삽입 같은 데이터 변경 작업의 경우, 이들은 영속성 컨텍스트의 쓰기 지연 저장소에 저장되었다가 트랜잭션이 커밋될 때 데이터베이스에 한 번에 전송됩니다. 이는 JPA의 성능 최적화 기능 중 하나로, 여러 데이터 변경 작업을 하나의 트랜잭션 내에서 모아서 처리함으로써 데이터베이스와의 불필요한 커뮤니케이션 비용을 줄이는 데 도움이 됩니다.

  2. em.find()를 통한 조회 작업의 경우, 영속성 컨텍스트에 해당 엔티티가 이미 존재하는지 우선 확인합니다. 만약 영속성 컨텍스트 내에 해당 엔티티가 존재한다면, 데이터베이스로부터 조회할 필요 없이 영속성 컨텍스트에 저장된 엔티티를 반환합니다. 하지만 해당 엔티티가 영속성 컨텍스트 내에 없을 경우, 즉시 데이터베이스로부터 조회 쿼리를 전송하여 결과를 가져옵니다. 이 과정은 트랜잭션 커밋과는 독립적으로 작동합니다. 따라서 em.find()를 통한 조회는 필요할 때마다 바로 데이터베이스에 접근하여 정보를 가져온다고 이해하면 됩니다.

질문자님의 관심사와 직접 관련된 상세 설명을 포함하는 다음 URL을 참고하시기 바랍니다:

  • em.find() 및 쓰기 지연 - 이 링크에서는 em.find() 호출 시 영속성 컨텍스트와 데이터베이스 간의 상호 작용과 쓰기 지연 SQL 저장소의 역할에 대해 설명해주고 있습니다. 특히 em.find()를 통해 조회 쿼리가 어떻게 처리되는지에 대한 내용이 명시되어 있어 질문자님의 궁금증 해결에 도움이 될 것입니다.

이 정보가 감바스님의 JPA와 관련된 궁금증을 명확히 해결하는 데 도움이 되었기를 바랍니다. 추가적인 질문이나 더 자세한 설명이 필요하시면 언제든 질문해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

감바스님의 프로필 이미지
감바스

작성한 질문수

질문하기