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

듀크님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

주문 서비스 개발

batch insert 질문있습니다!

21.02.12 00:41 작성

·

312

1

안녕하세요 주니어입니다!

이 강의랑은 동떨어진 질문이긴한데요 ㅎㅎ;

강의보면서 계속 이거저거 생각하다보니 영한님은 혹시 batch insert하실때 어떻게 하시는지 궁금합니다 !

회사에서는 JPA를 쓸때 기본키 전략이 IDENTITY이면 JPA로 batch insert하기가 어려워서 jdbcTemplate으로 한다고 하거든요.

수량은 대략 5,000~10,000건 단위이고요.

JPA초고수께서는 어떤방식으로 batch insert를 하시는지 갑자기 너무너무너무 궁금해져서 동떨어진 질문을 달게됐습니다..

아 그리고 강의보면서 항상 감사드리고있어요. 제 마음속의 스승님이십니다 !

답변 2

1

듀크님의 프로필 이미지
듀크
질문자

2021. 02. 12. 16:48

답변 감사합니다 ! 명절잘보내십셔 ~!

1

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

2021. 02. 12. 14:55

안녕하세요. 창훈님^^

IDENTITY일 때가 좀 애매하지요. 이 경우 더 나은 성능 최적화를 하려면 jdbcTemplate를 사용하는 것이 좋습니다.

그런데, 이런 고민은 필요합니다. 5,000 ~ 10,000건 정도면 사실 배치처리에서는 매우 작은 분량입니다.

제가 선택하는 방법은 다음과 같습니다.

1. 가장 단순한 방법을 선택합니다. 그러니까 트랜잭션만 잘 묶어서 JPA만으로 처리합니다.

2. 여기서 기대하는 데이터와 성능에 따라서 적절한 방식을 찾습니다. 만약 1분안에 해당 배치처리가 끝나야 하는데, JPA만으로 했더니 10초 안에 끝이나더라, 하면 여기서 끝을 냅니다. 그런데 기대하는 데이터가 수십~ 수백만 건이고, 수분안에 끝나야 한다면 JPA 등록 전략을 변경하거나, JdbcTemplate 이나 각 데이터베이스가 제공하는 최적화 방법을 찾아서 사용합니다.

추가로 배치 성능과 관련해서는 JPA 책 15.4.3 배치 처리 ~ 15.4.5 트랜잭션을 지원하는 쓰기 지연과 성능 최적화 부분까지 읽어보시면 도움이 되실거에요.

감사합니다.

듀크님의 프로필 이미지

작성한 질문수

질문하기