Inflearn brand logo image

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của vaseltosp1522
vaseltosp1522

câu hỏi đã được viết

Spring Batch của cái chết: Nỗi kinh hoàng thảm khốc lúc 3 giờ sáng giờ đã kết thúc.

OPERATION DOUBLE TAP - Spring Batch Test

외부 API 테스트

Viết

·

96

·

Đã chỉnh sửa

1

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

 

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

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

javaspringspring-bootspring-batchbackend

Câu trả lời 2

2

kill9님의 프로필 이미지
kill9
Người chia sẻ kiến thức

## 💀 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

kill9님의 프로필 이미지
kill9
Người chia sẻ kiến thức

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

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

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

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

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


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

명확한 시나리오를 바란다. 그래야 정확한 답을 해줄 수 있다. 💀
vaseltosp1522님의 프로필 이미지
vaseltosp1522
Người đặt câu hỏi

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

맞다.

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



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

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

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

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

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

kill9님의 프로필 이미지
kill9
Người chia sẻ kiến thức

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

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


내가 질문의 의도를 제대로 이해한 게 맞는지 모르겠지만 혹시 TestContainers 같은 걸 고려 중이라 물어보는 거라면, 배치 테스트에는 굳이 필요없다. 💀
vaseltosp1522님의 프로필 이미지
vaseltosp1522
Người đặt câu hỏi

kill9형 답변 고맙다.

kill9님의 프로필 이미지
kill9
Người chia sẻ kiến thức

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] 불멸의 기록 보관소" 

Hình ảnh hồ sơ của vaseltosp1522
vaseltosp1522

câu hỏi đã được viết

Đặt câu hỏi