inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[백엔드/예외처리 시나리오/집계 최적화] 백엔드 포트폴리오와 실무 이력 강화 전략. 올인원 PART1

대량의 쿼리가 중간에 실패한다면?

bulkInsert 부분에서 마지막에 이상한? 부분이 있는것 같아서 문의드립니다.

79

dlsrksrhk

작성한 질문수 11

1

마지막 부분에 getBatchSize()1000정도 권장해주셨는데요.

jdbcTemplate.batchUpdate()는 내부적으로 배치사이즈만큼 for문을 통해 반복하는것 같습니다. 즉 실제 처리해야할 대상 데이터가 1000개가 넘는다면 1000번째 이후 데이터부터는 INSERT가 안될거고요.

만약 1000개 미만이라면 예를 들어 500개밖에 없다면 501번째 반복때 java.lang.ArrayIndexOutOfBoundsException발생할것 같습니다.

만약 chunk가 최대 1000개정도가 적당하다라는 말씀이신거면 모르겠지만 1000으로 하드코딩해서 쓴다 라고 하신것처럼 와닿아서.. 오해의 소지가 있는것 같아 남깁니다~

    private void bulkProcessSettlements(Map<Long, BigDecimal> settlementMap, LocalDate paymentDate) {
        String sql = "INSERT INTO settlements (partner_id, total_amount, payment_date) VALUES (?, ?, ?)";

        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
//
            }

            @Override
            public int getBatchSize() {
                return 1000;
            }
        });
    }

java spring-boot 포트폴리오 기술면접 bulkinsert

답변 2

0

인큐(INCU)

안녕하세요.

의견 감사합니다! 오해의 소지가 없도록 수정하여 개선하도록 하겠습니다!

 

감사합니다!

0

인프런 AI 인턴

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

dlsrksrhk님, jdbcTemplate.batchUpdate()getBatchSize()에 대한 질문에 답변드리겠습니다.

getBatchSize() 메서드는 배치 처리를 위한 사이즈를 지정하는 부분입니다. 이 값은 처리할 객체의 수에 따라 유동적으로 설정될 필요가 있습니다. 언급하신 것처럼 실제 데이터의 수가 1000개 미만일 경우나 초과할 경우, 이 함수의 반환 값은 상황에 따라 조정되어야 합니다.

특히, 실제 settlementMap의 사이즈를 고려하여 동적으로 getBatchSize()를 설정하시길 권장합니다. 예를 들어:

@Override
public int getBatchSize() {
    return settlementMap.size();
}

또한, 대량의 데이터를 처리할 때 적정한 배치크기를 정하는 것은 매우 중요합니다. 일반적으로 데이터베이스와의 연결 수, 메모리 사용 등을 고려하여 적절히 조정하여 성능을 최적화하는 것이 좋습니다. 이렇게 함으로써 ArrayIndexOutOfBoundsException 같은 예외가 발생하지 않도록 예방할 수 있습니다.

해당 설정을 상황에 맞게 조정하여 사용하시면 더 나은 성능과 안정성을 제공할 수 있을 것입니다. 도움이 되셨길 바랍니다!

자세한 내용은 관련 문서를 참고하실 수 있습니다:
Spring Boot JDBC Template

vim /etc/environment 자바 환경변수 문의

0

4

0

ssh-keygen -t rsa -P "" 등 ssh 암호화? 는 하둡에서 필수인가요?

0

7

1

강의 중복 확인 요청

0

11

1

volatile에 대해 질문 있습니다.

1

19

2

SP를 아직도 사용하나요?

0

13

1

실무에서 진행한 쿼리 개선 사례 공유 관련 질문드립니다

0

19

1

Mark and Sweep

1

23

1

20년 4,5회 13번

0

18

1

GC 알고리즘

1

19

2

용어 질문

1

17

1

호출횟수 질문입니다.

1

26

2

실행과정 질문입니다.

2

26

1

코딩 테스트 All-in-One(Java)' 강의 노션 교재 권한문의

0

19

1

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

22

2

중복내용 제보?!

1

27

2

태어난김에 세계일주 시간 초과

0

21

1

커리큘럼 중 정렬 관련 질문

0

18

1

궁금한점이 여러개 생겼습니다.

1

36

1

섹션3 강의 누락?

0

63

1

팰월드 스트림..?

1

244

1

질문 답변 부탁드립니다

0

164

1

해상도가 720p 까지 가능해서 화면이 흐리네요.

0

157

1

pg 파라미터가 이제는 없어진다고 하는데 업데이트 해주시나요?

0

214

1

paymentProcess() 결제내역 남기기

0

172

0