인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

jayjoy05님의 프로필 이미지

작성한 질문수

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

쓰기지연 vs batch_size 네트워크 전송 횟수 질문

작성

·

34

·

수정됨

0


질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]

 

영한님 안녕하세요! 비슷한 질문이 있긴했는데.. AI 인턴 및 다른 답변들과 영한님이 이전 질문글 에서 남겨주신 부분이랑 조금 맞지 않는 부분이 있는 것 같아서 한 번 더 여쭤봅니다..

application.yml에서 설정하는

spring.jpa.properties.hibernate.jdbc.batch_size 속성 값과

쓰기지연저장소의 DB 쿼리 요청 방식이 조금 헷갈리는데요..!

 

쓰기지연저장소의 경우, 트랜잭션 커밋 시까지 SQL을 모아두었다가, 트랜잭션이 커밋되는 시점에 flush()를 통해 DB에 쿼리를 하는 개념으로 알고 있습니다. 그러면 쿼리가 4개가 쓰기 지연저장소 버퍼에 있다고 할 때, 네트워크 전송은 1번만 이루어지나요? 아니면 4번 이루어지고, 네트워크 전송에서 이점을 얻는게 아닌, 커넥션을 맺는 행위를 1번만 함으로써 성능상 이점을 챙기는 걸까요?

spring.jpa.properties.hibernate.jdbc.batch_size의 경우는, 한 번의 네트워크 전송마다 해당 size의 값만큼 쿼리를 보냄으로써, 네트워크 전송 횟수를 줄이는 데 그 목적이 있는 것으로 아는데, 쓰기 지연 저장소가 네트워크 전송을 커밋 시점에 1번으로 줄인다면 굳이 batch_size라는 속성이 필요한가 싶습니다..!

각각의 경우에 네트워크 전송이 어떻게 이루어지는 지 알 수 있을까요?

 

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. jayjoy05님

같은 타입의 엔티티를 영속성 컨텍스트에 3번 저장했다고 가정하겠습니다.

해당 batch_size 설정이 없다면 flush() 시점에 3번의 네트워크 호출이 발생합니다.

batch_size를 3으로 설정하게 되면 1번의 네트워크 호출이 발생합니다.

감사합니다.

jaesungyoun님의 프로필 이미지

감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

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

jayjoy05님께서 질문하신 쓰기 지연과 hibernate.jdbc.batch_size에 대한 질문을 도와드리겠습니다. 이 두 가지 설정은 JPA의 성능 최적화에 도움을 주는 중요한 요소들입니다.

먼저 쓰기 지연에 대해 설명드리겠습니다. JPA에서 쓰기 지연은 트랜잭션이 커밋되기 전까지 SQL 쿼리들이 쓰기 지연 저장소에 저장되고, 커밋 시점에 한꺼번에 DB에 전송이 되는 방식입니다. 이와 관련된 네트워크 전송은 기본적으로 커밋 시점에 한 번만 이루어지는 것이 맞습니다. 즉, 쿼리를 여러 번 보내는 대신, 트랜잭션 커밋 시점에 한번에 모아서 보내기 때문에 네트워크 전송 횟수가 줄어듭니다.

반면 hibernate.jdbc.batch_size 설정은 배치 처리를 통해 네트워크 효율성을 추가로 높여줍니다. 이 설정은 여러 개의 쿼리를 특정 사이즈만큼 묶어서 한 번에 보냅니다. 예를 들어, 10으로 설정했다면, 최대 10개의 쿼리를 한 번에 보내는 것이 가능합니다. 이 경우, 네트워크 전송 횟수뿐 아니라, 데이터베이스의 입출력 부담도 줄여주어 성능 개선이 가능합니다.

jayjoy05님이 느끼신 의문은, 기본적인 쓰기 지연만으로도 네트워크 전송 횟수는 1회로 줄어드는데, 왜 batch_size 설정이 필요한가 하는 부분인 것 같습니다. 이 설정은 더 많은 쿼리를 한 번에 묶어서 보내는 배치 처리를 가능하게 하여, 데이터베이스와의 네트워크 연결 및 쿼리 실행 부담을 최소화하는 데 목적이 있습니다. 따라서 대규모 트랜잭션이나 빈번한 DB 작업 시, 배치 사이즈 설정은 매우 유용할 수 있습니다.

관련하여 더 자세한 설명과 예제를 다룬 게시물들을 추천드립니다:

위 질문들은 hibernate.jdbc.batch_size와 기본적인 JPA 쓰기 지연에 대한 혼란을 해소시켜 줄 것입니다.

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

jayjoy05님의 프로필 이미지

작성한 질문수

질문하기