• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

DB 스키마 없음

24.05.07 10:37 작성 조회수 48

0

안녕하세요. 아직 학습을 많이 듣진 않았지만 당장 회사 업무에 들어간 신입이라 여쭤봅니다!

 

프로젝트 구조는 아래와 같습니다.

  • 스프링 부트 2.1

  • MyBatis

  • 티베로

  • 스프링 배치 4.1

  • XML로 빈 등록 및 Job & 스텝 등록

 

강의 초반에 DB를 사용하게 되면 DB 메타데이터를 저장하는 스키마가 꼭 있어야한다고 했는데, 테이블을 아무리 뒤져봐도 배치에 대한 스키마가 보이지 않습니다.

또한 job key(job_name, job_parameters)가 정확한진 모르겠으나 xml 잡 정의에 <job id="jobid"> 이런식으로 정의되어 있는데(job paramaeters 는 JVM 아규먼트로 받음) 같은 파라미터와 job를 id로 돌려도 잘 돌아갑니다. 제가 초반부에 수업 내용을 듣기로는 job_key가 동일하면 중복으로 안 돌아간다고 들었습니다.

 

이런 경우 DB를 사용하지 않는 것이 맞나요? 그리고 또 DB를 사용하지 않게 된다면 job_key도 영향이 없는 것이 맞을까요?

 

코드로 예시를 보여드리고 싶지만 회사 코드라 공개하기는 어려울 것 같습니다 ㅠㅠ

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.05.09

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

스프링 배치를 사용할 때 데이터베이스를 사용하는 경우, 기본적으로 스프링 배치는 메타데이터를 저장하기 위한 스키마가 필요합니다. 스프링 부트를 사용한다면, 스프링 부트는 대부분의 인기 있는 데이터베이스 플랫폼에 대한 SQL 초기화 스크립트를 포함하고 있어서, 애플리케이션 구동 시 데이터베이스 타입을 감지하고 해당 스크립트를 자동으로 실행할 수 있습니다. 예를 들어, 스프링 배치 스키마 자동 초기화를 항상 활성화하고 싶다면 아래와 같이 설정할 수 있습니다.

  • Properties 파일에 설정:
spring.batch.jdbc.initialize-schema=always
  • Yaml 파일에 설정:
spring:
  batch:
    jdbc:
      initialize-schema: "always"

스프링 배치의 메타데이터 관련 스키마가 프로젝트의 데이터베이스에서 보이지 않는다면, 위 설정이 적용되지 않았거나 데이터베이스 초기화 설정이 제대로 이루어지지 않은 것일 수 있습니다.

질문하신 job key에 대하여, 스프링 배치는 job_name과 job_parameters의 조합으로 job 인스턴스의 고유성을 보장합니다. 같은 파라미터와 job id를 가진 작업이 재실행되지 않는 것은 이 메커니즘 때문입니다. 단, 데이터베이스를 사용하지 않을 경우 이러한 상태 관리 기능이 영향을 받아 작업의 중복 실행을 방지하지 못할 수 있습니다.

실제로 데이터베이스를 사용하지 않고 스프링 배치를 구성하는 경우는 드물며, 해당 설정이나 구성을 검토할 필요가 있어 보입니다. 메타데이터를 올바르게 관리하기 위해서는 데이터베이스를 사용하는 것이 일반적이며, 스프링 배치 작업의 효과적인 실행과 관리를 위해서는 스키마 초기화를 포함한 적절한 데이터베이스 설정이 필수적입니다.

더 자세한 내용이 필요하다면 스프링 부트 레퍼런스 문서를 참고하시길 바랍니다.