inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

카카오 면접관의 실무 밀착형 Spring Batch: 대용량 데이터 처리의 모든 것

Spring Scheduler를 활용한 배치 스케줄링 패턴

여러 파드 환경에서 단일 실행 보장 방식

2

DongHyun Gu

작성한 질문수 1

0

단일 실행이 보장되는 이유로 Db를 통해서 값을 가져오고 있으며 db에서 동시성을 방어해주고 있기 때문이라고 해주셨는데요.

FindRunningJobExecutions 는 단순 select문이 아니고 내부적으로 비관적 락으로 동시 접근을 막아주는 구조인가요? 저는 여러 파드인 상황에서는 보여주신 코드가 동시성 이슈로 인해 주어진 잡이 한 번만 실행된다는 것을 보장하기 힘들 것 같다고 생각했습니다.

이외에도 여러 파드인 상황이라면 실무에서 어떤 요소를 고려하는지 궁금합니다.

  1. 학습 내용에선 currentimestamp를 잡 파라미터에 넣어서 매번 새로운 잡 인스턴스로 취급/실행하는 형태를 보여주셨는데, 이로인해 멀티파드 환경에서 특정 잡의 중복 실행 방지 혹은 특정 잡 파라미터 구성에서의 중복 실행 방지에 대한 요건 구현 시 영향도/고려 사항이 있는지 여부와 아니면 currentimestamp 잡 파라미터를 실무에서 빼기도 하는지 궁금합니다

  2. 운영 시 중복 실행 문제 및 잡 재시도에 대해 고민하다 나온 질문입니다. 혹시 애초에 대부분의 배치 잡과 스탭 로직을 멱등하게 동작하도록 설계 및 코드 작성을 해야하는 걸까요?

java spring spring-boot spring-batch spring-framework

답변 1

0

인프런 AI 인턴

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

여러 파드 환경에서 단일 실행을 보장하는 방법에 대해 궁금하신 점을 이해하고 있습니다. 큰 트래픽을 처리하거나 높은 신뢰성이 요구되는 환경에서는 여러 파드 환경 내에서 한 번에 하나의 Job만 실행되도록 보장하는 것이 중요합니다.

Spring Batch에서는 비관적 락낙관적 락 둘 다 사용할 수 있지만, FindRunningJobExecutions의 경우 주로 비관적 락이 아닌 터미널의 동시성을 피하기 위한 방법으로 동작합니다. 여러 파드에서의 동시 실행 문제를 해결하기 위해서 다음과 같은 방법들을 고려할 수 있습니다:

  1. DB 락 사용: 데이터베이스에서 비관적 락을 사용하여 한 번에 하나의 트랜잭션이 Job을 업데이트할 수 있도록 합니다. 이는 주로 설정을 통해 반복적 접근 시 동시성 문제를 피하기 위해 사용됩니다.

  2. 잡 인스턴스 파라미터 관리: currentimestamp 등의 파라미터를 이용해 매번 새로운 잡 인스턴스를 생성할 수 있습니다. 이 방법은 멀티파드 환경에서 중복 실행을 방지할 수 있습니다. 단, 이런 파라미터는 주의해서 사용해야 하며, 실무에서는 반복적으로 동일한 작업이 실행되어야 하는 경우 오히려 문제가 될 수 있으니 상황에 맞게 조정합니다.

  3. 스케줄링 컨트롤러 사용: Kubernetes 등에서 스케줄링 컨트롤러를 이용하여 동작 시점을 컨트롤 할 수 있습니다. 이는 특정 파드에서만 Job이 구동되도록 제한하는 방식입니다.

  4. External Locking: Redis 등 외부 시스템을 이용한 락을 구현하여, 클러스터 환경에서도 단일 실행 환경을 조성할 수 있습니다.

좀 더 깊이 있는 논의와 예시는 아래 유사한 질문 내용을 참고하시기를 추천합니다:

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

XAMPP에서 Apache, DB 재기동 시 접속안되는 문제

0

7

1

실습 권한이 없네요··· 이건 ··· 좀··· 401 에러떠요

0

16

1

훅 내용 안뜸 오류

0

22

2

inheritance startegy 선택시 고려사항

0

13

1

[할인쿠폰] 코테의 바이블[JAVA] 50% 할인 쿠폰 관련

0

17

1

챗봇 기능 구체화 (RAG)

0

26

2

Entity 동등성 비교

0

16

1

패키지 구분에 대해 궁금한게 있습니다

0

20

2

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

21

1

스프링부트 서버 에러나요

0

23

1

갑자기 채점 사이트가 바뀌었어요

0

29

1

코드 자료

0

40

2

2026.04에 추가된 강의 시청 불가

0

33

1

Service Create/Update Record 운용과 Delete Record 미운용의 차이 질문

0

25

1

문제 리스트 페이지

0

25

1

인가 코드 발급(프론트 vs 백)

0

30

2

part8 Notion 링크

0

28

1

채점 사이트 관련 질문드립니다

0

23

1

인텔리제이 MCP 서버 설정 관련

0

34

2

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

34

2

필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)

0

42

2

Sequence 관련 질문

1

32

2

Image Only Query

1

30

2

job, step execution 관련 질문 드립니다.

0

36

2