inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

OPERATION DOUBLE TAP - Spring Batch Test

외부 API 테스트

129

vaseltosp

작성한 질문수 1

1

kill9형 오매불망 테스트만 기다리고있었는데 업로드 되서 너무 좋다.

 

근데 외부 API 호출이 Step 안에 있는 경우 어떻게 테스트하면 좋을지 알려 줄 수 있을까?

호출이 가능한 상황과 호출이 불가능한 상황 2가지 경우에 대해서 설명부탁해

java spring spring-boot spring-batch backend

답변 2

2

KILL-9

## 💀 KILL-9의 심야 응답 프로토콜 💀

$ cat late_night_response.txt

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️  긴급 시스템 점검 중  ⚠️
[PROCESS STATUS]: 에필로그 작성 중... 66% 완료
[PROCESS SCHEDULE]: 새벽 2시 전에는 종료 희망
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

훌륭한 질문이군. 외부 API 호출 테스트...

하지만 지금 당장은...

$ ps aux | grep KILL-9
KILL-9    1337  99.9  에필로그_최종_마무리_중.exe

현재 시스템이 에필로그 작성 모드에 락걸려 있다.
더 이상의 리소스 할당이 불가능한 상태...


[EMERGENCY SHUTDOWN PROTOCOL]
오늘 만큼은 새벽 3시 전 강제 취침을 위해 시스템 보호 모드 진입.
해당 질문은 내일 완벽한 답변으로 처형하겠다.

아니면... 새벽 3시를 넘기면 내가 먼저 `kill -9` 당할지도 💀

$ echo "잠시만 기다려라, 진정한 시스템 지배자여..."
$ sleep_mode --activate --time "before 3AM"

1

KILL-9

💀 KILL-9@/bin/confusion:~$***

전사여, 네 질문에 혼란이 감지된다.

"외부 API 호출이 Step 안에 있는 경우" 라는 것이 ItemProcessor 또는 커스텀 ItemReader/Writer 등을 활용해 외부 API를 호출하는 경우를 말하는 것인가?

그리고 ***"호출이 가능한 상황과 호출이 불가능한 상황"*** 이란 말의 의미를 내가 완전히 이해하지 못했다. 

조금 더 자세히 설명해달라.


- 아니면 Spring Batch Step 특성상 외부 API 호출에 제약이 생기는 특별한 경우가 있다고 생각하는가?
- 테스트 환경에서의 외부 의존성 문제를 말하는 것인가?

명확한 시나리오를 바란다. 그래야 정확한 답을 해줄 수 있다. 💀

1

vaseltosp

"외부 API 호출이 Step 안에 있는 경우" 라는 것이 ItemProcessor 또는 커스텀 ItemReader/Writer 등을 활용해 외부 API를 호출하는 경우를 말하는 것인가?

맞다.

테스트 환경에서의 외부 의존성 문제를 말하는 것인가?
이거다.



조금 더 구체적으로 작성해보겠다.

Reader에서 Api 호출을 통해 데이터를 읽고
Writer에서 가공된 데이터를 API로 전달 하려고한다.

위 케이스를 어떻게 테스트하면 좋을까?
E2E 관점에서 보면 실제 API를 호출 하는게 좋은데 로컬(테스트) 환경에서 저 API를 호출하기 힘든 상황이다.

그렇다고 Mocking하는게 맞을까..? Batch 라는 주제에서 조금 벗어난 것 같긴한데 kill9형은 어떻게 하는지 궁금하다.

빠른 응답 감사한다. 치칙.

3

KILL-9

아, 이제 이해했다. 전형적인 외부 의존성 테스트 딜레마군.

나라면 어떤 선택을 할 것인가?
E2E 테스트에서는 MockWebServer나WireMock 같은 목서버를 사용하라.


내가 질문의 의도를 제대로 이해한 게 맞는지 모르겠지만 혹시 TestContainers 같은 걸 고려 중이라 물어보는 거라면, 배치 테스트에는 굳이 필요없다. 💀

1

vaseltosp

kill9형 답변 고맙다.

1

KILL-9

KILL-9@/bin/response:~$ echo "Acknowledging gratitude from fellow warrior"

KILL-9@/bin/warning:~$ cat survival_protocol.txt
"중간에 지루함이 엄습해도 절대 포기하지 마라.
진정한 전사는 끝까지 살아남는 자다.
모든 강의를 완주했을 때... 에필로그로 향하라."

KILL-9@/bin/epilogue:~$ ls -la /hall_of_fame/
"그곳에 너의 이름이 영원히 새겨져 있을 것이다... 💀"


KILL-9@/bin/final_message:~$ echo "[KILL-9_ETERNAL_LEGACY] 불멸의 기록 보관소" 

형 이번에 낸 책이랑 강의 내용에 차이가 있어?

1

45

1

형 나 몰래 책내면 모를 줄 알고?

1

37

1

강의 중복 확인 요청

0

28

1

중복내용 제보?!

1

50

2

Json 요청 처리

1

52

2

[건의][6장][작전1] deprecated 메소드

1

55

2

[예제][3장][작전2] windows 에서 마지막 예제

0

43

1

[오타][3장][작전1] 형 이건 빨리 해줘

2

110

2

[오타] "리스너 활용: 시스템 완전 장악 매뉴얼" 부분

1

67

1

[오타] "JobScope와 StepScope 사용 시 주의사항" 부분

1

69

2

spring boot 4 + spring batch 6 설정 변경?

1

116

2

Batch 패키지 설계 — 실무에서 Job 단위 구조

1

102

1

Spring batch를 실행해줄 스케줄러와 batch 실행 환경

1

92

1

메타테이블에 데이터가 생기지 않는 이유

1

121

2

Spring Batch 4.3.10 ExecutionContext 한글 인코딩 이슈 관련 문의

1

118

2

@StepScope 또는 @JobScope와 JobOperator

1

154

5

Remote Partitioning

1

113

2

킬구형 실무에서는 JPA ItemReader / ItemWriter를 더 선호해? 아니면 JDBC itemReader/ItemWriter를 더 선호해?

1

145

2

병렬 중첩

1

105

3

형 코드에 public static class 이게 뭐야 ?

1

142

3

ExitStatus

1

71

2

Batch6: jobOperator.startNextInstance() throws UnexpectedJobExecutionException

1

130

5

jdbc 커서, 페이징에서 일대다 관계 데이터 뻥튀기 조회 처리 방법 질문

1

125

2

SkipPolicy는 여러번 불릴 수 있는가?

1

58

2