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

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

작성자 없음

작성자 정보가 삭제된 글입니다.

스프링 배치

Batch 성능 질문

작성

·

35

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.이 강의를 들으면서 프로젝트에 Batch를 도입하려고합니다.

Jenkins에서 파라미터로 Spring Batch에 pageNo이라는 인자에 주입하고 Tasklet 인터페이스를 implements한 커스텀 tasklet에서 공공데이터 포털 api를 호출하여 데이터를 가져오고 이를 db에 적재를 하려고 합니다.

 

Job을 1번 실행하면 Step도 1번 실행하는 방식인데 1번 배치 사이클이 끝나면 pageNo을 1 증가해서 다시 배치를 돌리는 방식입니다. 그래서 아래와 같이 2가지 구현을 생각했습니다.

 

Job은 1번 호출하지만 Step을 반복 실행 VS Job을 반복 호출

=======================================

전자 방식
-장점: 메타 테이블에 JobExecution 등 db에 삽입 및 조회가 많이 일어나지 않는다.

-단점: 특정 pageNo이 오류가 날 시 몇번째 pageNo에서 오류가 났는 지 확인을 해야하는데 이를 StepExecutionContext에서 디코딩 후 자바 역직렬화를 해야한다.(DB에서 조회만으로 확인하기 힘듦)

=======================================

후자 방식

-장점: DB에서 조회만으로 pageNo이 몇번째에서 오류가 발생했는 지 쉽게 확인 할 수 있다.

-단점: DB에 접근이 많다.

=======================================

제가 직접 느낀바로는 위와 같습니다. 저도 아직 공부한지 얼마 안되어서 잘 모르기에 Chat GPT에게 물어봤습니다. 아래와 같이 Job을 반복 호출하는건 성능상 좋지 않다고 합니다. GPT의 답변이 정답이 아닐 수 있기에 확인도 받고싶고 만약 Step을 반복적으로 호출하는게 더 낫다면 API용 Spring 서버에서 관리자가 로그인하면 이를 StepExecutionContext에서 가져와서 역직렬화 후 브라우저에 보여주는게 더 나은가싶습니다. 선생님께 자문을 구하고싶습니다.

image.png

 

답변 1

0

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

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

ehddbs452100님이 질문하신 내용은 Spring Batch 작업의 성능 최적화 관련 문제로, 두 가지 방법을 비교하고 어느 쪽이 성능상 더 유리한지에 대한 것입니다. 제시된 두 방법, 즉 Job을 반복 호출하는 방식과 Step을 반복 실행하는 방식은 각각의 장단점이 있습니다.

  1. 전자 방식 (Step 반복 실행):

    • 장점: 데이터를 처리하는 동안 메타 테이블에 대해 읽기/쓰기 작업이 감소하며, 이는 DB 부하를 줄입니다. 트랜잭션 수와 컨텍스트 스위칭이 줄어들어 성능이 향상됩니다.
    • 단점: 각 단계에서 문제가 발생했을 때, 문제의 원인을 추적하기 어려울 수 있습니다. 메타 정보는 직렬화된 형태로 저장되기 때문에, 데이터를 역직렬화하여 문제가 발생한 페이지 번호를 파악해야 합니다.
  2. 후자 방식 (Job 반복 호출):

    • 장점: 각 작업의 실행 기록이 메타 테이블에 저장되므로, 어떤 페이지에서 문제가 발생했는지 쉽게 파악할 수 있습니다.
    • 단점: 각 Job 실행 시 마다 새로운 트랜잭션을 생성하고, DB에 많은 양의 INSERT/UPDATE 작업이 발생하므로, 성능 부하가 커질 수 있습니다.

추천 사항:
- 성능 관점에서 보면, 동일한 Job 내에서 Step을 반복 실행하여 DB와의 상호작용을 최소화하는 것이 이상적입니다. 다만, 관리의 용이성(문제 발생 시 추적의 용이함)을 위해 Job 관리 인터페이스나 모니터링 시스템을 구축하여 정보 직렬화 및 역직렬화 시 확인할 수 있는 방식을 고려해보시는 것이 좋겠습니다.
- 자주 발생하는 오류의 원인을 파악하기 어렵다면, 시스템 로그와 메타 데이터 분석을 통해 문제의 빈도와 원인을 파악하는 시스템을 추가로 개발하는 것도 좋은 접근 방법입니다.

더 나아가, 추가적인 자료로는 다음의 답변들을 참고하실 수 있습니다:
- 스프링 배치 트랜잭션 관련 질문이 있습니다!
- 스프링 배치 Job 동적 생성 관련 문의

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

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기