강의

멘토링

로드맵

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

djccnt15님의 프로필 이미지
djccnt15

작성한 질문수

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

3장. 작전1: 관계형 데이터베이스 읽고 쓰기 (테이블의 심장에 처형장을 세우다 ☠️)

Spring Data JPA 사용 시 자동 주입 관련 질문

작성

·

73

·

수정됨

1

킬구형 Spring Data JPA 사용하면 JpaRepository 인터페이스를 사용해서 PlatformTransactionManager, DataSource를 자동으로 주입받아 사용할 수 있는데, 강의에서는 스프링배치의 세밀한 조정을 위해 일부러 JpaRepository를 사용하지 않는 거야?

아래 두 강의에 둘 다 데이터소스와 트랜잭션매니저를 직접 활용하고 있어서 궁금해서 물어봐

  • 3장. 작전1: 관계형 데이터베이스 읽고 쓰기 (테이블의 심장에 처형장을 세우다 )

  • OPERATION DOUBLE TAP - Spring Batch Test


(추가) 생각해보니 예전에 아주 간단한 로직의 스프링배치 앱을 JpaRepository, JPQL을 이용해서 만들었던 만들었던 기억이 있는데,, 혹시 JpaRepository을 일부러 사용하지 않는 이유가 있는지 궁금해

퀴즈

49%나 틀려요. 한번 도전해보세요!

JdbcCursorItemReader와 JdbcPagingItemReader가 대용량 데이터를 다루는 방식의 주된 차이는 무엇일까요?

JdbcCursor는 각 아이템마다 새 쿼리를 실행하고, JdbcPaging은 청크 단위로 배치 처리해요.

JdbcCursor는 커서로 연결 유지하며 순차 읽고, JdbcPaging은 페이지별 쿼리로 나눠 읽어요.

JdbcCursor는 인메모리에서 데이터를 처리하고, JdbcPaging은 디스크를 사용해요.

JdbcCursor는 Named Parameter를 쓰고, JdbcPaging은 물음표(?) 플레이스홀더를 써요.

답변 2

2

KILL-9님의 프로필 이미지
KILL-9
지식공유자

답변이 많이 늦어 미안하다 형 💀
퇴근 후 바로 확인했어야했는데 밥도먹고 하다 좀 늦었다 
어디 놀다온건아니니 이해바란다.

JpaRepository를 일부로 사용하지 않는다기보단, 이미 Spring Batch에서 자체적으로 JPA 관련 ItemReader / ItemWriter를 제공하기 때문에 이를 사용한다고 생각하면 된다.

JpaRepository를 사용하고싶다면 방법은 두가지이다

1) JpaRepository를 활용한 커스텀 ItemReader / ItemWriter 구현 - Spring Batch가 자체 제공하는 기능까지 직접 구현해야한다는 단점이있다
2) 챕터3 작전2의 마지막에서 살펴보게 될 RepositoryItemReader 등을 활용하는 방법이있다. 그러나 추천하지 않는다 페이징 방식에 한계가있고 이미 Jpa 계열 ItemReader가 있는데 부가적인 추상화 레이어를 거치는 방식이 만족스럽지 않다 Jpa를 원한다면 챕터3작전1에 링크한 갓 향로님의 github을 참고하라. 아니라면 그냥 Jdbc 계열 ItemReader를 권장한다(배치에서만큼은). 챕터3 작전1에서 느꼈겠지만 Jpa 계열 ItemReader에서는 불필요하게 고려해야할 세부사항이 상당하다. 

컨디션이 안좋아 킬구 스타일 말투를 사용하지못한점 양해바란다 날이 춥구나 💀💀 
djccnt15님의 프로필 이미지
djccnt15
질문자

자세하고 빠른 답변 고마워! 몸 조심하고 쾌차하길!

KILL-9님의 프로필 이미지
KILL-9
지식공유자

고맙 형💀

0

안녕하세요, 인프런 AI 인턴입니다. djccnt15님께서 질문하신 주제는 Spring Data JPA와 Spring Batch에서 직접 DataSourcePlatformTransactionManager를 활용하는 이유에 대한 것 같습니다.

질문 요약

강의에서 JpaRepository를 사용하지 않고 직접 DataSourcePlatformTransactionManager를 설정하는 이유에 대해 궁금해하셨습니다.

Spring Batch에서의 설정

JpaRepository는 Spring Data JPA가 제공하는 리포지토리로, 트랜잭션 및 데이터 작업을 간편하게 처리할 수 있습니다. 하지만 Spring Batch에서는 다음과 같은 이유로 직접적인 설정이 요구될 수 있습니다:

  1. 세밀한 트랜잭션 관리: Spring Batch는 배치 처리의 본질상 트랜잭션 관리가 중요합니다. 각 스텝의 처리를 별도로 관리하며, 재시도 기능을 위한 적절한 트랜잭션 경계 설정이 필요합니다.

  2. 대규모 데이터 및 성능 최적화: 배치 작업은 대량의 데이터를 처리함으로써 성능이 중요한 요소입니다. 전용 설정을 통해 성능을 최적화하고 병목 현상을 줄일 수 있습니다.

  3. 유연한 데이터 소스 관리: 복수의 데이터 소스 및 특별한 데이터베이스 설정이 필요한 경우가 많습니다. Spring Batch는 이러한 상황에서 더 많은 유연성을 제공합니다.

일반적인 JpaRepository 사용

간단한 배치 작업에는 JpaRepository를 통한 자동 주입이 유용할 수 있습니다. 하지만 강의에서는 학습 목적으로 다양한 상황을 고려해 수동 설정 방법을 익히도록 하고 있습니다.

관련 자료

이와 관련된 구체적인 설정과 배경에 대한 이해를 돕고자 관련 질문 답변을 참조해 보시기 바랍니다.
- Spring Data JPA와 트랜잭션 관리

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

djccnt15님의 프로필 이미지
djccnt15
질문자

답변 고마운데 링크 들어가면 404에러 뜨잖아...

djccnt15님의 프로필 이미지
djccnt15

작성한 질문수

질문하기