inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Spring Batch 입문: 3시간 만에 끝내는 대용량 처리의 기초

[실습] 배치 실패시 서버 담당자에게 메일 보내주기

bootRun FAILED 에 대한 문의

해결된 질문

86

쿠카이든

작성한 질문수 16

1

image.png

강사님 안녕하세요~!

 

배치 실패시 서버 담당자에게 메일 보여주기 수업 잘들었습니다!

 

마지막에 실패시 리스너 동작을 테스트 하시기 위해서 예외를 던지신듯 합니다.

 

그런데 실습 결과가 강사님과 다르게 bootRun FAILED라고 나와서요.

(> Task :bootRun FAILED

FAILURE: Build failed with an exception.)

 

사소한 것 같기는 한데 이유가 궁금해서 글남깁니다~ 좋은 하루되세요~~!

 

mysql jenkins spring-boot spring-batch gradle buildfailed bootrunfailed

답변 2

1

JSCODE 시니

쿠카이든님 안녕하세요~ JSCODE 시니 입니다!

배치 실패 시 메일 전송 수업 들으시다가 궁금한점이 생겨 많이 답답하셨을 것 같아요!

 

캡쳐해주신 사진을 확인해보니, 결과 화면이 저와 다르게 bootRun FAILED로 나오셨네요!

이 현상의 원인은 바로 main 메서드의 설정 차이 때문입니다~!

아마 쿠카이든님 같은 경우는 실습하시면서 main 메서드를 다음과 같이 설정하셨을 거예요.

System.exit(SpringApplication.exit(SpringApplication.run(SyBatchSystemApplication.class, args)));

 

그러나 저는 해당 실습을 진행할 때 main 메서드를 변경하지 않고 기본 상태 그대로 사용 했습니다! :)

SpringApplication.run(SyBatchSystemApplication.class, args);

 

스프링 부트는 기본적으로 애플리케이션 내에서 예외가 발생해 프로그램이 죽더라도(우리의 경우죠!),

프로세스 종료 코드(Exit Code)를 0(정상 종료)으로 반환하며 끝나는 경우가 있습니다.!

 

쿠카이든님이 작성하신 System.exit(...) 코드는 스프링 애플리케이션의 종료 코드를 읽어와서 OS(운영체제)에 정확한 상태를 전달해 주는 역할을 합니다!

즉, 배치가 실패(예외 발생)했으니 비정상 종료 코드를 반환하게 되고, 그 결과 Gradle이 이를 감지해서 > Task :bootRun FAILED라고 명확하게 빌드 실패 에러를 출력한 것이죠!

반면, 제가 실습한 기본 코드에서는 이 예외에 따른 비정상 종료 코드를 시스템으로 명시적으로 전달하지 않았기 때문에, 결과 화면이 다르게 나타났던 거라고 이해해주시면 될 것 같습니다!

 

결론적으로 쿠카이든님이 작성하신 코드가 실제 운영 환경에서 배치의 성공/실패 여부를 시스템이나 스케줄러에 정확히 알리기 위해 꼭 필요한 권장 방식이니, 아주 잘 적용하신 겁니다! ㅎㅎ

 

자세한사항은 저희 노션 강의자료 섹션3 - '[실습] 스프링 배치 프로젝트 생성(Spring Boot 4.x & Gradle)' 페이지의 4번 항목인 메인 메소드 변경 파트를 참고해주시면 더 좋을 것 같습니다! ㅎㅎ

 

오늘도 좋은 하루 보내시고, 앞으로도 배치를 공부하시다가 궁금한 점이 생기면 언제든 편하게 질문 남겨주세요!

1

쿠카이든

이해되었습니다. 좋은 답변 감사드려요~!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 쿠카이든님!

bootRun FAILED 에러는 Spring Boot 애플리케이션의 실행 시 발생하는 일반적인 오류입니다. 이 오류의 원인은 다양한데, 주로 다음과 같은 이유로 발생할 수 있습니다:

  1. 코드 오류: 작성한 Java 코드에 컴파일 오류가 존재할 수 있습니다. 특히, 예외 처리가 제대로 되지 않거나, 클래스나 메서드가 잘못된 경우 등이 있습니다.

  2. 환경 설정 문제: application.properties 또는 application.yml 파일에서 잘못된 설정이 있을 수 있습니다.

  3. 의존성 문제: build.gradle 파일에 정의된 의존성 간에 충돌이 있거나 누락된 경우입니다. Gradle에서 bootRun 태스크 실행 시 이를 참조하기 때문에 문제가 발생할 수 있습니다.

해결 방법 제안

  1. 스택트레이스를 분석하기: 터미널에서 제공하는 --stacktrace 옵션을 사용하여 오류의 자세한 정보를 확인해 보세요.
   ./gradlew bootRun --stacktrace
  1. 코드 검토하기: JobReportListener.java 또는 관련 파일에서 어떤 예외가 발생했는지 확인하고, 적절히 에러 핸들링을 추가해 보세요.

  2. 의존성 확인하기: build.gradle 파일에 정의된 모든 의존성을 검토하고, 필요한 것들이 정확히 정의되어 있는지 확인하세요.

자세한 에러 메시지를 확인하여 위에 제시한 방법으로 문제를 해결하실 수 있습니다. 구체적인 내용이 없으면 정확한 해결책을 제시하기 어려운 점 양해 부탁드립니다. 추가적으로, 관련 정보 및 설치 과정에 대하여 더 많은 정보를 보고 싶으시다면 아래의 참고 링크를 확인해 보세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

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

일대일 fk 위치

0

14

1

수업에서 사용하는 툴 질문드려요

0

25

2

중복내용 제보?!

1

22

2

2강에 파일 어디있을까여,,

0

20

2

다음 강의는 언제쯤 나올까요?

0

24

2

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

1

34

1

혹시 수업자료는 다운받을 수 있는 곳이 없나요?

0

26

2

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

0

24

2

제 3 정규형 vs BCNF 정규형 차이점?

0

30

3

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

0

17

1

DESC, ASC

0

28

2

훅 내용 안뜸 오류

0

29

2

챗봇 기능 구체화 (RAG)

0

27

2

내장형 톰캣일경우

0

22

1

FOREIGN KEY 정리하기, 영상대로 SQL코드 복붙해도 안되요.

0

19

1

Docker + Spring Boot CI/CD 방법

0

30

2

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

0

25

2

스프링부트 서버 에러나요

0

26

1

코드를 첨부해야하는 이유가 있나요?

0

30

2

2026.04에 추가된 강의 시청 불가

0

41

1

소스코드 빈파일 문의

0

64

1

jobParameter를 통한 멱등성 질문

1

74

2

[참고] Tasklet 인터페이스로 단일 배치 작업 처리 수업에 나온 코드 돌리는 방법

2

85

2

batch_db 생성 관련 문의 드립니다.

1

113

1