인프런 커뮤니티 질문&답변
1장에 들어가기 전에 배치 프로젝트(디렉토리) 구성 방법에 대한 질문
작성
·
56
1
☠ 질문 가이드 ☠
" 시스템 종결자의 지령이다. 질문하기 전에 이 규칙들을 숙지하도록. "
1. 코드 실행에 문제가 있다고?
전체 코드를 보여줘라. 단편적인 에러 메시지만으로는 아무것도 알 수 없다.
실행 환경도 알려달라. JDK 버전, 스프링 버전 등을 함께.
2. 오타를 발견했나?
즉시 제보하도록. 자네같은 날카로운 눈을 가진 동료가 필요하다.
3. 질문은 자유롭게
"이런 걸 물어봐도 될까요?" 같은 소심한 멘트는 불필요하다. 궁금한 건 바로 물어봐라. 배치 시스템에 소심한 건 없다.
4. 검색은 기본
비슷한 질문이 있는지 먼저 확인하도록.
하지만 이해가 안 된다면? 주저하지 말고 추가 질문해라.
GPT가 거짓말친다고? 나에게로 오라. 💀
5. 서로 존중하라
여기는 모두가 시스템을 지배하고자 하는 동료들이다.
서로를 이해하고 돕는 문화를 만들어가자.
⛔ 인프런 서비스 자체에 대한 문의는 1:1 문의하기로.
💀그쪽 서버는 막강한 CTO가 있어 건드리지 않는 게 좋을 거다 💀
- KILL-9 올림
P.S.
존댓말로 질문하면 rm -rf를 시전한다. 편하게 물어보도록.
강의에서 놓친 부분이나 더 보충하면 좋을 내용도 자유롭게 제보하라. 너희의 피드백이 이 강의를 더 강력하게 만든다.
🔥 시스템을 함께 진화시켜 나가자.🔥
킬구형님 안녕하세요!
(그래도 선생님이신데 반말하기엔 좀 그런것 같아서 존댓말로 하겠습니다..!)
먼저 좋은 강의 감사드립니다.
사실 구매한지는 좀 되었는데, 지난 1주일동안 Batch와 스케쥴러의 차이점, 왜 이런 어노테이션을 사용하는지부터, 왜 이런 환경설정을 해야하는지, Framework와 Boot의 동작차이점은 무엇인지 세세하게 먼저 이해하는데 집중하다보니 힘이 많이 들었는데 0장 만으로도 상당히 많은 기본기가 쌓인 것을 느낄 수 있었습니다(무엇을 모르고있었고 무엇을 알아야하는지 등).
배치가 막연하게 느껴졌는데, 아직 극초반이지만 자신감이 생기고 있습니다. 감사드립니다!
1장에 들어가기전에 앞서, 조금이라도 더 실무에 가까운, 가깝지 않더라도 유지보수가 간편하고 알아보기 쉽게 체계를 구성해보고자, 형님께서는 실무적으로 배치 프로젝트를 어떻게 구성하시는지 질문드리고자 합니다.
각파일들의 디렉토리 위치가 없는데 임의적으로 해야하나요? - 인프런 | 커뮤니티 질문&답변
위 질문에서 형님께서는 상관이 없다고는 하셨는데, 그래도 실무에서는 어떻게 구성하시는지 궁금해서 질문드리게 되었습니다!
그리고 0장에서도 간단한 1개의 Job도 5개의 Step으로 이루어져 있는데, 위 질문의 AI답변처럼 1개의 Config 책임으로 두기보다는, Job - Step으로 책임을 분리하여 두는 것이 편할 것 같은데, 이게 실무에서도 실제로 이런 방향으로 관리가 이루어지는지 궁금합니다!
답변내용 참고하면서 본격적으로 1장부터 프로젝트를 구성해보고자 합니다. 감사합니다!
답변 3
1
⚠️ FATAL ERROR: SORRY_MODE ON
반갑다 Hyo Kyun 형 정신이없어서 놓쳐버렸다. 사과한다 💀
1) 우선 특정 도메인(책임) 단위 또는 Job의 특성에 따라 디렉토리를 묶는것을 권한다. 다시말해 기능별로묶지말고 ‘무엇을하는지’를 기준으로 묶자는 말이다
- 보통 ItemReader / ItemWriter 등의 빈 정의도 해당 디렉토리 밖에서사용될일이 없을것이다. 안에 넣는것을권장한다
2) 여기서 공통으로사용된다거나 어디에도 넣기 애매한놈들을 / 유틸리티성 클래스들은 별도 디렉토리로빼도록하자
3) Job과 Step을 나눈다라..
: Step을 여러 Job에서 사용한다면해당 Step을 정의한 Configuration을 별도로 빼두고 필요할때 @Import해도좋다
4) 1개의 Config 책임으로 두기보다는 Job - Step으로 책임을 분리해둔다라??
: Job만 따로정의한 Configuration이있고 Step만 따로둔 Configuration을 별도로관리한다고이해했다 권장하진않는다 이유는 기본적으로 Step이 재사용성이 그렇게 높진않을뿐더러 이렇게나눠버리면 해당 Job이 무슨일을하는지가 덜 명확해지는경향이있는거같다 이를 나는 Job의 가독성이 낮아진다고한다.
1
바쁘실텐데 감사드립니다 형님!
사실 제 질문이 너무 초보적인 질문이었지 않았나 걱정했었습니다..
형님 답변 언제든지 기다리도록 하겠습니다!
무리하지 마세요 형..!
0
안녕하세요, 인프런 AI 인턴입니다.
Hyo Kyun Lee님, Spring Batch를 배우면서 실무적인 관점에서 프로젝트를 구성하는 방법에 대해 질문해 주셨군요. 먼저 배치 시스템에 대한 이해가 깊어짐을 느끼신 것에 대해 축하드립니다. 많은 학습을 통해 자신감이 생기셨다니 기쁩니다!
배치 프로젝트 구성 방법
Spring Batch에서는 프로젝트 구조를 명확히 하고 관리하기 쉽도록 하는 것이 중요합니다. 일반적으로 일관된 디렉토리 구성은 유지보수에 유리합니다.
일반적인 구성 방법
- config: 배치 관련 설정 클래스들을 모아둡니다. 여기에는 Job, Step 관련 설정이 포함될 수 있습니다.
- job: 각 배치 Job에 관련된 클래스들을 별도의 패키지에 두고 관리합니다.
- step: Step을 구성하는 클래스들로 구성된 패키지입니다. 보통 하나의 Job에 여러 Step이 포함될 수 있기 때문에 Step 패키지를 분리하여 관리하는 것이 좋습니다.
- listener: Job이나 Step의 리스너들을 별도로 관리합니다.
- tasklet 또는 processor, reader, writer: 각 Tasklet이나 ItemProcessor, ItemReader, ItemWriter를 구현해 두는 패키지를 따로 두어 관리할 수 있습니다.
실무에서의 구성
실무에서는 보통 위와 같은 패턴을 따르지만, 팀의 개발 경험과 요구 사항에 따라 잘 맞춰 조정하여 사용하는 것이 중요합니다.
Job과 Step의 책임 분리
실무에서는 Job과 Step의 역할을 명확히 분리하는 것이 일반적입니다. 이러한 분리는 다음과 같은 이유로 유리합니다:
- 유지보수성: Job과 Step 설정이 많아짐에 따라 코드를 읽고 이해하는 것이 용이해집니다.
- 확장성: 새로운 Step이나 Job을 추가할 때, 다른 코드에 영향을 최소화할 수 있습니다.
- 협업: 팀원이 역할에 따라 보다 간단히 작업 영역을 나눌 수 있습니다.
참고 URL
배치 프로젝트의 구조와 관련하여 실무적인 예시와 방향성을 잘 이해하시길 바랍니다. 프로젝트를 구성하실 때 이 답변이 도움이 되길 바라며, 본격적인 1장의 학습과 프로젝트 구성에서 좋은 결과가 있기를 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





바쁘신데 감사합니다 형님!
내용 참고해서 디렉토리 구성하겠습니다!