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

xorb_1님의 프로필 이미지
xorb_1

작성한 질문수

스프링 배치

소스 코드

다음과 같은 부분에서 어떤 부분을 먼저 수강하는 게 좋을까요?

작성

·

295

0

안녕하세요. 회사에서 저한테 매일 밤 12시에 20개 사이트에서 각각 1000 ~ 6000개의 데이터를 크롤링 후 해당 데이터 목록을 조회하는 웹 사이트 제작 업무를 맡겨서 진행중입니다. 업무를 시키실 때 스프링 배치를 활용해서 만들라고 하시고, 다른 곳에 출장가셔서 사무실에서 혼자 해당 업무를 완료해야하는 상황입니다ㅠㅠ. 다소 답답한 질문일 수도 있지만 다음과 같은 상황에서 제가 잘못 생각하고 있는 게 있는지, 또 이 상황을 해결하려면 어떤 부분의 강의를 들으면 되는지 여쭙고 싶습니다.

스프링 배치 개념이 익숙치 않기 때문에 스프링 MVC로 먼저 만들어봤습니다. 대신 Insert는 배치쪽에서 해야한다고 생각하여 service단에서 DB에 insert를 하는 dao 메소드를 실행시키지 않고 해당 데이터를 담은 List<VO>를 return 후 controller에서 DB insert하는 쪽으로 생각해봤습니다.

 

그대로 스프링 배치로 가져오려고 하니 step에서 service를 그냥 실행하고 List<VO>를 받아 DB insert를 하는 dao를 실행하면 되는지 아니면 service에 해당하던 내용을 ItemReader, processor, writer과 같이 스프링 배치에서 사용하는 클래스로 바꿔야 하는건지 잘 모르겠습니다.

 

또 20개의 서비스를 호출해야 하는데,

1개의 job에서 1개의 step에서 호출하는 게 좋을지,

1개의 job에서 20개의 step을 만드는 게 좋을지

각각 20개의 job을 만드는 게 좋을지 여쭤보고 싶습니다.

 

감사합니다

답변 2

1

정수원님의 프로필 이미지
정수원
지식공유자

일단 섹션 3. 스프링 배치 도메인 이해 > JobLauncher 챕터를 참고하셔서 Controller 에서 직접 Job 을 실행하도록 합니다

그러면 크롤링해서 List<VO> 를 받아오는 부분은 Controller 에서 하는 것인가요?

ItemReader, processor, writer 를 활용하신다면 ItemReader 를 직접 구현하셔서 List<VO> 를 받아오도록 구현하고 이것을 processor, writer 에 넘겨주어도 됩니다.

아니면 Job 에서 Step 을 구성한다음 Service 를 DI 받아서 사용해도 됩니다만 Service 의 트랜잭션 처리가 스프링 배치와 별개로 처리되기 때문에 이슈가 발생할 수 있으니 트랜잭션 테스트가 필요합니다.

그리고 Job 은 하나로 운영하고 각 사이트 별로 Step 을 구성해서 처리하는 것이 좋을 것 같습니다.

근데 사이트별로 크롤링한 데이터를 하나로 합쳐야 한다면 여러 스텝간의 결과를 통합해야 하는 부분을 구현해야 하는데 그것이 까다로우면 하나의 Step 에서 처리해도 크게 무리는 없습니다.

사실 이 부분은 이렇게 저렇게 계속 구현과 테스트를 반복하시면서 더 나은 방향을 결정해야 할 것으로 보입니다.

저의 마지막 섹션인 어플리케이션 예제를 참고하셔도 도움이 될 것 같습니다.

 

1

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

xorb_1님의 상황을 고려하여 스프링 배치와 관련된 강의 순서를 추천드리면 다음과 같습니다.

먼저, 스프링 배치의 개념에 익숙하지 않으시다면 스프링 배치에 대한 기본적인 개념을 다루는 강의부터 시작해 보시는 것이 좋습니다. 기본적인 Job, Step, ItemReader, ItemProcessor, ItemWriter와 같은 컴포넌트와 그 역할에 대해 학습하고 이해하는 것이 중요합니다.

다음으로, service단에서 처리했던 로직을 스프링 배치의 컴포넌트로 어떻게 분리하고 구현할지에 대한 강의 내용을 찾아보시면 좋을 것 같습니다. 서비스 로직을 스프링 배치 아키텍처에 맞게 ItemReader, ItemProcessor, ItemWriter로 분리하여 재구성하는 방법을 배우셔야 합니다.

20개의 사이트에서 데이터를 크롤링하는 것과 관련하여서는, 강의 중에 1개의 Job 내에서 여러 Step을 관리하고, 각 Step의 병렬 처리나 순차 처리와 같은 Job 설계 방법에 대해 다루는 부분이 있다면 그 부분에 주목하시길 추천드립니다. 1개의 Job에서 여러 Step을 사용하는 것이 유지 관리 측면에서 효율적일 수 있으며, 데이터에 대한 엄격한 순서가 필요하지 않은 경우 병렬 처리로 성능을 향상시킬 수도 있습니다.

스프링 배치와 관련된 자세한 가이드는 Spring Boot Reference Documentation에서 찾아볼 수 있고, Job Repository를 구성하는 방법은 여기에서 확인하실 수 있습니다.스프링 배치를 스프링 부트 애플리케이션 내에서 사용하는 것과 관련된 자주 묻는 질문에 답하는 섹션도 살펴보시면 도움이 될 겁니다.

이 정보들을 토대로 스프링 배치에 대한 이해를 넓히시고, 실제 업무에 적용해 보시길 바랍니다.

xorb_1님의 프로필 이미지
xorb_1

작성한 질문수

질문하기