묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
예제 실행 명령어 오류
SystemDeathJobConfig 예제 실행 명령어가> ./gradlew bootRun --args='--spring.batch.job.name=recordSystemKillJob inputFile=/path-to-kill-batch-system/system_death.jsonl' ... SystemDeath[command=destroy, cpu=99, status=memory overflow] SystemDeath[command=explode, cpu=100, status=cpu meltdown] SystemDeath[command=collapse, cpu=95, status=disk burnout] ...로 되어 있는데job.name이 recordSystemKillJob -> systemDeathJob으로 바껴야 할 것 같습니다🫡JsonRecordSeparatorPolicy 예제도 함께 바꿔야 할 것 같아요🫡
-
해결됨Real MySQL 시즌 1 - Part 1
강의
안녕하세요, ppt 자료제공이 안되는 건가요?일년 전 문의 글이 있어보니, 문제가 있어 당장에 공개를 안하고 있다고 하신글을 봤늗네 아직도 해결 되지 않으신걸까요?구매하였는데, 당황스럽네요...
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
[분산 서버 로그 처형 작전] 중 scp 오류
[작전명: 분산 서버 로그 처형 작전] [상황설명]: 코드 작성 후 최종 실행시, 비밀번호 입력 프롬프트 없이 아래 에러 발생org.springframework.batch.core.step.tasklet.SystemCommandException: Execution of system command failed with exit code 255 at org.springframework.batch.core.step.tasklet.SystemCommandTasklet.execute(SystemCommandTasklet.java:129) ~[spring-batch-core-5.2.2.jar:5.2.2][환경]: mac, intellij [분석]: 터미널에서는 scp localhost 하면 비밀번호 프롬프트가 잘 떴으나, 배치실행시에만 에러가 발생[추가시도]ssh-keygen -t rsa -b 4096 으로 키쌍 생성 후ssh-copy-id -i ~/.ssh/id_rsa.pub localhost 공개키를 등록 후ssh localhost 하여 비밀번호 없이 접근 확인 이후 정상 처형 확인 완료
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
jobConfiguration 구성 질문
안녕하세요, 강의를 보던 중 문득 궁금한 점이 생겨 문의드립니다. Spring Batch에서 Job 설정 클래스를 구성할 때, 아래와 같이 두 가지 스타일이 혼용되는 것을 자주 보게 되는데요.🥔 PotatoJobConfiguration (생성자 주입 방식)@RequiredArgsConstructor public class PotatoJobConfiguration { private final JobRepository jobRepository; private final PlatformTransactionManager transactionManager; @Bean public Job potatoJob() { return new JobBuilder("potatoJob", jobRepository) .start(potatoStep()) .build(); } @Bean public Step potatoStep() { return new StepBuilder("potatoStep", jobRepository) .tasklet((contribution, chunkContext) -> RepeatStatus.FINISHED, transactionManager) .build(); } }🥬 KimchiJobConfiguration (메서드 파라미터 주입 방식)@RequiredArgsConstructor public class KimchiJobConfiguration { @Bean public Job kimchiJob( final JobRepository jobRepository, final Step kimchiStep ) { return new JobBuilder("kimchiJob", jobRepository) .start(kimchiStep) .build(); } @Bean public Step kimchiStep( final JobRepository jobRepository, final PlatformTransactionManager transactionManager ) { return new StepBuilder("kimchiStep", jobRepository) .tasklet((contribution, chunkContext) -> RepeatStatus.FINISHED, transactionManager) .build(); } }강의를 보다 보면 예시마다 사용되는 경우가 다르던데,어떤 기준에 따라 생성자 주입 방식과 메서드 파라미터 주입 방식을 구분해서 사용하시는지 궁금합니다. 실무에서도 보통 이 둘을 혼용하는 편인지,아니면 상황에 따라 선호되는 방식이 명확히 나뉘는지 조언 부탁드립니다. 감사합니다.
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
jobExecutionContext 에 접근하는 방법
치치직...1장 작전 3에서,키보드는 꽉 잘 잡았는데 궁금한게 발생했다. jobExecutionContext 에 접근/수정할 때chunkContext 를 통해서 접근하는 방법과 contribution 을 통해서 접근하는 방법 두가지를 알게 되었다. 일부러 두가지 침투 방식 을 알려준 것 같으나 두 방식의 차이가 있는지, 무엇이 더 선호되는지 아니면 취향의 문제인지 궁금하다.
-
미해결하루만에 배우는 AWS OpenSearch
Semantic Search 관련 문의
다음과 같은 양식으로 남겨주세요.질문을 한 배경 : Semantic Search는 어떻게 가능한가요?질문내용 : Semantic Search는 어떻게 가능한가요? 허깅페이스에서 외부 모델을 가져와서 한국어 시멘틱 검색이 가능하도록 만들려 하는데 한국어 형태소 분석만 존재해서 이 부분을 물어보고 싶습니다.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
yarn으로 express 다운 후 node 2_server.js 실행 안되는 경우
저는 yarn node 2_server.js 로 실행하니 되네요![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
강의 자료를 PDF로 받아볼 수 없나요?
강의 자료를 PDF로 받아볼 수 없나요?? 제목이 곧 질문입니다!
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
오타 확인
☠ 질문 가이드 ☠ " 시스템 종결자의 지령이다. 질문하기 전에 이 규칙들을 숙지하도록. " 1. 코드 실행에 문제가 있다고?전체 코드를 보여줘라. 단편적인 에러 메시지만으로는 아무것도 알 수 없다.실행 환경도 알려달라. JDK 버전, 스프링 버전 등을 함께. 2. 오타를 발견했나?즉시 제보하도록. 자네같은 날카로운 눈을 가진 동료가 필요하다.StepExecution stepExecution = contribution.getStepExecution(); ExecutionContext stepExecutionContext = stepExecution.getExecutionContext(); Integer infiltrationCount = (Integer) stepContext.get("infiltrationCount"); JobExecution jobExecution = stepExecution.getJobExecution(); jobExecution.getExecutionContext().put("totalInfiltrations", infiltrationCount);혹시 stepExecutionContext가 stepContext인데 이름이 오타가 난게 맞는지??7강 자료에서 찾은것이다. 3. 질문은 자유롭게"이런 걸 물어봐도 될까요?" 같은 소심한 멘트는 불필요하다. 궁금한 건 바로 물어봐라. 배치 시스템에 소심한 건 없다. 4. 검색은 기본비슷한 질문이 있는지 먼저 확인하도록.하지만 이해가 안 된다면? 주저하지 말고 추가 질문해라.GPT가 거짓말친다고? 나에게로 오라. 💀 5. 서로 존중하라여기는 모두가 시스템을 지배하고자 하는 동료들이다.서로를 이해하고 돕는 문화를 만들어가자. ⛔ 인프런 서비스 자체에 대한 문의는 1:1 문의하기로.💀그쪽 서버는 막강한 CTO가 있어 건드리지 않는 게 좋을 거다 💀- KILL-9 올림 P.S.존댓말로 질문하면 rm -rf를 시전한다. 편하게 물어보도록.강의에서 놓친 부분이나 더 보충하면 좋을 내용도 자유롭게 제보하라. 너희의 피드백이 이 강의를 더 강력하게 만든다. 🔥 시스템을 함께 진화시켜 나가자.🔥
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
JobParameter의 JSON 표기법 명령어 오류
JSON 표기법 실습을 진행중이다. 아래 명령어를 실행하는데, 에러가 난다. json 문자열 속 쌍따옴표를 백슬래시로 이스케이프 하는게 안 먹혀서 그런 것 같다. 견문이 부족하여 스스로 해결 못 하였다. GPT가 알려주는 대로도 해봤지만 따옴표가 문자열에 들어가지 않는다. 문자열이 어떻게 입력되는지는 아래에 있는 에러코드에서 확인 가능하다. 혹시나 답을 알 수 있을까 질문한다. window 환경, 스프링부트 3.5.2, jdk 17이고, 인텔리제이에서 실습중이다.intellij 로컬 터미널과, git bash등에서 아래 명령어를 실행했으나 실패하였다. ./gradlew bootRun --args="--spring.batch.job.name=terminatorJob infiltrationTargets='{\"value\":\"판교서버실,안산데이터센터\",\"type\":\"java.lang.String\"}'" ./gradlew bootRun --args="--spring.batch.job.name=terminatorJob infiltrationTargets={\"value\":\"판교_서버실,안산_데이터센터\",\"type\":\"java.lang.String\"}" package com.system.batch.killbatchsystem.JobParameter; import lombok.extern.slf4j.Slf4j; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.StepScope; import org.springframework.batch.core.converter.JobParametersConverter; import org.springframework.batch.core.converter.JsonJobParametersConverter; import org.springframework.batch.core.job.builder.JobBuilder; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.step.builder.StepBuilder; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.transaction.PlatformTransactionManager; @Configuration @Slf4j public class SystemTerminatorConfig { @Bean public Job processTerminatorJob(JobRepository jobRepository, Step terminationStep){ return new JobBuilder("terminatorJob", jobRepository) .start(terminationStep) .build(); } @Bean public Step terminationStep(JobRepository jobRepository, PlatformTransactionManager transactionManager, Tasklet terminatorTasklet ){ return new StepBuilder("terminationStep", jobRepository) .tasklet(terminatorTasklet, transactionManager) .build(); } // @Bean // @StepScope // public Tasklet terminatorTasklet(@Value("#{jobParameters['terminatorId']}")String terminatorId, // @Value("#{jobParameters['targetCount']}") Integer targetCount){ // return (contribution, chunkContext) -> { // log.info("시스템 종결자 정보:"); // log.info("ID: {}", terminatorId); // log.info("제거 대상 수: {}", targetCount); // log.info("🎇 SYSTEM TERMINATOR {} 작전을 개시합니다", terminatorId); // log.info("👻 {}개의 프로세스를 종료합니다.", targetCount); // // for(int i =1; i<=targetCount; i++){ // log.info("👻 프로세스 {} 종료 완료!", i); // } // // log.info("🎯 임무 완료: 모든 대상 프로세스가 종료되었습니다."); // return RepeatStatus.FINISHED; // }; // } @Bean @StepScope public Tasklet terminatorTasklet( @Value("#{jobParameters['infiltrationTargets']}") String infiltrationTargets ) { return (contribution, chunkContext) -> { String[] targets = infiltrationTargets.split(","); log.info("⚡ 침투 작전 개시"); log.info("첫 번째 타겟: {} 침투 시작", targets[0]); log.info("마지막 타겟: {} 에서 집결", targets[1]); log.info("🎯 임무 전달 완료"); return RepeatStatus.FINISHED; }; } @Bean public JobParametersConverter jobParameterConverter() { return new JsonJobParametersConverter(); } } 오류 내용(명령어를 intellij 로컬 터미널에서 실행)PS C:\Users\Desktop\study\스프링배치\kill-batch-system> ./gradlew bootRun --args="--spring.batch.job.name=terminatorJob infiltrationTargets={\"value\":\"판교서버실,안산데이터센터\",\"type\":\"java.lang.String\"}" . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.5.2) 2025-06-23T10:10:06.623+09:00 INFO 36520 --- [kill-batch-system] [ main] c.s.b.k.KillBatchSystemApplication : Starting KillBatchSystemApplication using Java 17.0.15 with PID 36520 (C:\Users\Bistelligence\Desktop\study\스프링배치\kill-batch-system\build\classes\java\main started by Bistelligence in C:\Users\Bistelligence\Desktop\study\스프링배치\kill-batch-system) 2025-06-23T10:10:06.625+09:00 INFO 36520 --- [kill-batch-system] [ main] c.s.b.k.KillBatchSystemApplication : No active profile set, falling back to 1 default profile: "default" 2025-06-23T10:10:07.436+09:00 INFO 36520 --- [kill-batch-system] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2025-06-23T10:10:07.577+09:00 INFO 36520 --- [kill-batch-system] [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:bc0bd0fe-d717-4e43-908b-4ee615d3746b user=SA 2025-06-23T10:10:07.579+09:00 INFO 36520 --- [kill-batch-system] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2025-06-23T10:10:07.834+09:00 INFO 36520 --- [kill-batch-system] [ main] c.s.b.k.KillBatchSystemApplication : Started KillBatchSystemApplication in 1.634 seconds (process running for 1.953) 2025-06-23T10:10:07.836+09:00 INFO 36520 --- [kill-batch-system] [ main] o.s.b.a.b.JobLauncherApplicationRunner : Running default command line with: [infiltrationTargets={\value\:\판교서버실,안산데이터센터\,\type\:\java.lang.String\}] 2025-06-23T10:10:07.884+09:00 INFO 36520 --- [kill-batch-system] [ main] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2025-06-23T10:10:07.898+09:00 ERROR 36520 --- [kill-batch-system] [ main] o.s.boot.SpringApplication : Application run failed org.springframework.batch.core.converter.JobParametersConversionException: Unable to decode job parameter {\value\:\판교서버실,안산데이터센터\,\type\:\java.lang.String\} at org.springframework.batch.core.converter.JsonJobParametersConverter.decode(JsonJobParametersConverter.java:121) ~[spring-batch-core-5.2.2.jar:5.2.2] at org.springframework.batch.core.converter.DefaultJobParametersConverter.getJob ~~~~ ~~~~ Git Bash에서 명령어를 실행할 경우 데이터는 아래처럼 입력되었다. org.springframework.batch.core.converter.JobParametersConversionException: Unable to decode job parameter {value:판교_서버실,안산_데이터센터,type:java.lang.String} ~~~~ > Task :bootRun FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':bootRun'. > Process 'command 'C:\Program Files\Eclipse Adoptium\jdk-17.0.15.6-hotspot\bin\java.exe'' finished with non-zero exit value 1 * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. BUILD FAILED in 3s
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
외부 API 호출 적재 방법
외부 API를 호출해서 DB에 적재하는 배치를 구성을 하려고한다. 이때까지 문서 내용을 바탕으로는 Chunk가 아닌 Tasklet으로 해도 문제가 없다고 판단이든다. 하지만 공공 데이터 API를 1번 호출 할 때 10건씩만 데이터를 조회해야한다는 단점이있다. 평소에 하루에 1번 호출하겠지만 지난 3달의 데이터를 일단 적재를 해야한다. 이런 상황에서도 RepeatStatus.CONTINUABLE이 아닌 while문으로 계속 호출하고 끝나면 RepeatStatus.FINISHED로 반환해도 되는 지 궁금하다. 또한 외부API를 호출 할 때 PageNo도 명시를해줘야하는데 pageNo을 1씩 증가시키다가 특정 pageNo일때 오류가나면 해당 pageNo일때 부터 동작하도록 하려면 Jenkins의 매개변수 값을 설정해서 다시 batch를 돌리려고한다.하지만 아래처럼 PAGE_NO을 정수로하고싶었는데 String으로 해야한다는 점이있어, 리스너에서 해당 매개변수를 Integer 또는 Long 타입으로 변경을 해야하는 과정을 추가해야 할 지 아니면 더 수월한 방법이 있는 지 궁금하다. 💀 [시스템 인텔리전스]일반적으로 Tasklet에서 DB 트랜잭션 관리가 필요한 않은 경우가 많지는 않다. 모든 Tasklet이 데이터베이스 작업을 포함하는 것은 아니기 때문이다. 예를 들어, 파일을 정리하거나, 외부 API를 호출하거나, 단순한 알림을 보내는 작업이라면 DB트랜잭션을 고려할 필요가 없다. 그러므로 반복이 필요할 경우 작업의 성격을 잘 판단해서 while문으로 처리할지, RepeatStatus로 처리할지 현명하게 선택하라. 모든 반복을 RepeatStatus로 처리하는 것이 능사는 아니다.
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
문제상황에 대해서 이해가 안간다.
이전 청크의 ItemProcessor에서 엔티티를 수정한게 왜 문제인지 이해가 안간다. ItemProcessor에서 데이터를 수정하고 ItemWriter에서 DB에 flush를 할것 같은데 왜 다음 chunk에서 ItemReader에서 doReadPage()로 데이터를 읽는 시점에 의도치 않게 DB에 변경사항이 발생하는가?? 이미 앞선 데이터는 DB에 모두 반영되지 않았는가?? 이전 청크라는 상황이 이해 안된다. 이것이 왜 위험한가? 만약 이전 청크의 ItemProcessor에서 엔티티를 수정했다면? doReadPage()에서 데이터를 읽으려는 시점에 의도치 않게 DB에 변경사항이 반영될 수 있다. 이는 ItemReader의 책임 범위를 완전히 벗어난 동작이다. ItemReader는 데이터를 읽기만 해야 하는데, 실제로는 데이터 변경까지 일으킬 수 있는 것이다. 더 큰 문제는 이런 동작을 코드를 자세히 들여다보지 않으면 전혀 예상할 수 없다는 점이다.
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
중복 문장 발견 후 보고
배치 처리, 시스템 종결의 서막💀 장에서 중복된 문장 발견. 두 세계의 공존웹은 실시간 상호작용의 최전선에서 사용자와 연결을 담당한다. 배치는 시스템의 후방에서 대규모 데이터 처리를 책임진다. 둘은 역할이 다르지만,함께 작동할 때 시스템은 완벽해진다. 함께 작동할 때 시스템은 완벽해진다. 배치가 없다면 시스템의 무게를 견딜 수 없고, 웹이 없다면 사용자와의 연결이 끊어진다. 네가 이 두 세계를 모두 이해하고 다룰 수 있다면, 시스템의 모든 것을 지배할 수 있다.
-
미해결
취업 포트폴리오 예약 시스템 관련 고민
안녕하세요! 현재 자연어 기반 AI 장소 추천 & 실시간 예약 시스템을 취업 포트폴리오 프로젝트로 개발 중입니다.네이버 지도 API를 활용해 평점과 리뷰, 예약 가능 여부 등을 기준으로 장소를 추천하려고 합니다.문제는 실제 예약과 리뷰는 네이버 외부에서 이루어지다 보니, 실제 예약 가능 시간대와 사용자가 정말 예약했는지 여부를 알 수 없고, 그에 따라 내부 DB에 히스토리를 남기기도 어려운 상황입니다.그래서 고민 중인 부분은 실제 장소는 보여주되, 임의로 예약 가능시간대를 만들어 사용자가, 내부 DB에 예약 및 작성한 리뷰 히스토리를 저장하는 방식으로 가짜 히스토리를 남기는 것이 현실적인지에 대한 것입니다.임의로 가짜 예약 시스템을 만들자니 포트폴리오 질이 조금 떨어지지 않나 하는 고민이 커서 현재 막힌 상태입니다..혹시 저처럼 네이버 API 기반으로 구현하셨던 분들 중에 이런 상황에서 예약/리뷰 기록을 어떻게 처리하셨는지, 또는 위 방식이 괜찮은 설계인지 조언을 부탁드립니다!읽어주셔서 감사합니다!
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
실시간 데이터셋에 배치를 돌리는 예시가 궁금하다.
아래 설명에서 실무에서 어쩔 수 없이 실시간으로 변경된 데이터셋에 배치 처리를 한 사례를 알고싶다. "잠깐! 킬구형, JpaPagingItemReader의 문제가 아니라 실시간 데이터셋에 배치를 돌리는게 잘못된거 아냐?” 이상적으로는 맞는 말이다. 배치는 보통고정된 입력 데이터셋을 대상으로 사용하는 것이 맞다. 하지만 실무에서는 어쩔 수 없이 실시간으로 변경되는 데이터셋에 대해서도 배치 처리를 해줘야 할 때가 있다. 이럴 때는 offset 기반 페이징은 사용하지 않도록 하자.
-
해결됨강의 하나로 끝내는 백엔드 모든 지식!
강의 자료 어디서 받을 수 있나요?
강의 자료 어디서 받을 수 있나요?
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
외부 API 테스트
kill9형 오매불망 테스트만 기다리고있었는데 업로드 되서 너무 좋다. 근데 외부 API 호출이 Step 안에 있는 경우 어떻게 테스트하면 좋을지 알려 줄 수 있을까?호출이 가능한 상황과 호출이 불가능한 상황 2가지 경우에 대해서 설명부탁해
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
테스트 챕터는 언제 올라오는것인가
6월 8일부터 기다리고 있어 형 얼른 마지막 섹션을 줘..현기증..나..
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
강의보다 낫네
무지성 강의 시청하다보면, 그냥 음음 하다가 끝나는 경우도 종종 있는데, 이건 읽으면서 무조건 쳐보니까 좋네 ㅇㅇ;notebooklm 에 넣어넣고 쓰고싶음
-
해결됨시스템 디자인 첫걸음: 면접에서 돋보이는 백엔드 아키텍처 설계하기
멱등성. '같은 요청'의 기준?
같은 요청이 여러 번 들어와도 한 번만 처리하는 것. 여러 번의 요청이 들어왔을 때 이 요청이 '같은 요청' 이라는 것을 정확하게 판단할 수가 있을까요?예를 들어 똑같은 점포의 똑같은 POS에서 똑같은 액수의 포인트 적립/사용이 두 번 들어왔을 때,이 두 요청이 각자 다른 요청인지? 클라이언트 단의 문제로 인해 같은 요청을 두 번 보낸 것인지? 정확하게 판단할 수 있는 걸까요?두 요청의 도착 시간 간격이 매우 짧을 때-> 일반적인 상황에서 같은 동작이라고 판단할 수야 있겠지만.. 매우 빠르게 요청을 계속해서 받아야 하는 상황이라면?도메인 특성에 따라 같은 요청임을 판단할 수 있는 기준이나 상황이 달라지기야 하겠지만 정확하게 보장 받을 수 있는 기준은 존재하기 어렵지 않나 하는 생각이 듭니다.실제 사례를 통해 예시를 들어주실 수 있는 게 있을까요?