강의

멘토링

커뮤니티

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

쿠카이든님의 프로필 이미지
쿠카이든

작성한 질문수

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

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

bootRun FAILED 에 대한 문의

해결된 질문

작성

·

36

1

image.png

강사님 안녕하세요~!

 

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

 

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

 

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

(> Task :bootRun FAILED

FAILURE: Build failed with an exception.)

 

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

 

답변 2

1

JSCODE 시니님의 프로필 이미지
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번 항목인 메인 메소드 변경 파트를 참고해주시면 더 좋을 것 같습니다! ㅎㅎ

 

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

쿠카이든님의 프로필 이미지
쿠카이든
질문자

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

0

안녕하세요, 인프런 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 파일에 정의된 모든 의존성을 검토하고, 필요한 것들이 정확히 정의되어 있는지 확인하세요.

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

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

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

쿠카이든님의 프로필 이미지
쿠카이든

작성한 질문수

질문하기