묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결죽음의 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에서 똑같은 액수의 포인트 적립/사용이 두 번 들어왔을 때,이 두 요청이 각자 다른 요청인지? 클라이언트 단의 문제로 인해 같은 요청을 두 번 보낸 것인지? 정확하게 판단할 수 있는 걸까요?두 요청의 도착 시간 간격이 매우 짧을 때-> 일반적인 상황에서 같은 동작이라고 판단할 수야 있겠지만.. 매우 빠르게 요청을 계속해서 받아야 하는 상황이라면?도메인 특성에 따라 같은 요청임을 판단할 수 있는 기준이나 상황이 달라지기야 하겠지만 정확하게 보장 받을 수 있는 기준은 존재하기 어렵지 않나 하는 생각이 듭니다.실제 사례를 통해 예시를 들어주실 수 있는 게 있을까요?
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
FaultTolerant의 retryLimit() 횟수 질문
킬구형 안녕, Fault Tolerant 쪽에서,retryLimit()을 설명해줄 때만약 retryLimit 값이 3일경우, "첫번째 호출시도 1번, 재시도 호출 2번"으로 총 3번이 호출된다고 했잖아.재시도 횟수는 항상 retryLimit - 1 이라 그랬고. 근데 왜 "ItemProcessor의 예외 발생 시 재시도 - 아이템 단위로 재시도 관리"의 마지막 호출 결과 찍어준 부분에서, retryLimit()은 3인데 왜 ItemProcessor는 4번이 호출되는거야?위에 설명한대로라면 3번만 호출되어야 하는거 아냐?
-
미해결견고한 결제 시스템 구축
테스트 코드 중 isPaymentDone 변환
안녕하세요.테스트코드 작성 중 아래 파싱하는 부분 관련하여,as Byte -> toInt 변환 도중 에러가 발생합니다..DB스키마 DDL의 경우, boolean -> tinyint(1) 로 생성된것으로 보이는데, 어떻게 해결할 수 있을까요?```class java.lang.Boolean cannot be cast to class java.lang.Byte (java.lang.Boolean and java.lang.Byte are in module java.base of loader 'bootstrap')java.lang.ClassCastException: class java.lang.Boolean cannot be cast to class java.lang.Byte (java.lang.Boolean and java.lang.Byte are in module java.base of loader 'bootstrap')```isPaymentDone = ((results.first()["is_payment_done"] as Byte).toInt()== 1),
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
결과 값의 정렬
멀티 스레딩에서 파일에 write할 때 질문이 있습니다.thread가 chunk 단위로 파일에 입력되는것은 확인했습니다.그런데 결과 값의 정렬은 불가능한가요????예를 들어 db에 1, 2, 3, 4, 5 ... 라는 데이터가 있고 FlatFileItemWriter로 파일에 쓸 경우 1,2,3,4,5 이런식으로 정렬된 값이 저장 가능한지
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
JpaPagingItemReader
humanThreatDataReader는 스레드 안전한 JpaPagingItemReader를 사용했다.라는 구문에서 헷갈리는게 있는데 JpaPagingItemReader의 경우는 lock을 걸지 않는데 SynchronizedItemStreamReader 데코레이터를 적용해야하지 않나요???
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
상태 질문
상태(State): 작전 수행 지점들상태(State)란 Flow 내에서 현재 실행이 머무르거나 도달할 수 있는 모든 논리적 지점을 의미한다. 자동문의 "문 닫힘/문 열림"에 해당한다.Flow를 구성하는 상태(State)는 크게 두 가지 주요 유형으로 분류할 수 있다.실행 상태 (StepState 등):실행 상태는 Flow 내에서 실제 특정 작업(로직)을 수행하는 지점을 나타낸다. 우리 강의의 예제 코드에서 사용된 analyzeContentStep, publishLectureStep, summarizeFailureStep과 같은 Step이 대표적인 실행 상태(StepState)에 해당한다. 종료 상태 (EndState): 종료 상태는 Flow 실행의 최종 도착점을 나타내는 상태이다. Flow가 이 상태에 도달하면 더 이상 진행되지 않고 실행이 종료된다. Job의 최종 결과는 Flow가 어떤 EndState로 끝났는지에 따라 결정된다. 다이어그램의 [작업 종료]가 바로 이 종료 상태(EndState)를 가리킨다. 종료 상태(EndState): Flow 실행의 최종 도착점이다. 이 상태에 도달하면 실행 흐름이 더 이상 진행되지 않고 Flow가 종료된다. Job의 최종 결과는 어떤 EndState로 끝났는지에 따라 결정되며, 앞선 다이어그램의 [작업 종료]가 바로 이 종료 상태(EndState)에 해당한다. 여기서 종료 상태가 두개인데 다른 내용인가요???
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
JpaCursorItemReader 질문
이 기본 구현에서 호출하는 getResultList() 는 전체 데이터를 메모리에 한 번에 로딩하므로 실제 스트리밍이 아니며 따라서 타 JPA 구현체 사용 시 주의가 필요하다.라고 하셨는데 JpaCursorItemReader를 이용하면 모든 데이터를 메모리로 가져오기 때문에 OutOfMemoryError가 날 수 있나요??추가로 실무에서는 쿼리가 복잡할텐데 JPA 보단 JDBC를 사용하는 편인가요???
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
잘못된 csv 파일
csv 파일 중 프로세스 아이디 정보가 잘못되어있습니다.실제 SystemFailure의 processId는 Integer인데 csv 파일은 String입니다.
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
배치 애플리케이션 패키지 구조
현재 배치 강의를 20퍼 정도 수강 했는데, 배치 애플리케이션을 만들 때 step, job 등 여러 클래스가 있을 텐데 어떤 패키지 구조로 만드는지 궁금합니다.
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
@StepScope 질문
@Bean public Step systemDestructionStep( SystemInfiltrationTasklet tasklet // Tasklet을 주입받는다 ) { return new StepBuilder("systemDestructionStep", jobRepository) .tasklet(tasklet, transactionManager) .build(); } @Slf4j @Component @StepScope // Tasklet에 StepScope를 달았다 public class SystemInfiltrationTasklet implements Tasklet { private final String targetSystem; public SystemInfiltrationTasklet( @Value("#{jobParameters['targetSystem']}") String targetSystem ) { this.targetSystem = targetSystem; } @Override public RepeatStatus execute(StepContribution contribution, ChunkContext context) { log.info("{} 시스템 침투 시작", targetSystem); return RepeatStatus.FINISHED; } }여기서 @StepScope를 tasklet에 작성하는 이유가 있나요?아래 방식처럼 Step에 @StepScope를 작성하면 안되나요?@Bean @StepScope public Step systemDestructionStep( SystemInfiltrationTasklet tasklet // Tasklet을 주입받는다 ) { return new StepBuilder("systemDestructionStep", jobRepository) .tasklet(tasklet, transactionManager) .build(); }
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
"흔히 사용되는 메서드" 강의 관련 질문입니다~
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Typeorm 관련 메서드 설명해주시는 과정에서,위와같이,async 메서드 내부에서 create 메서드를 호출할 땐 await를 붙이지 않고,save 메서드를 호출할 땐 await를 붙이는 이유가 있을까요? 일단, async가 비동기로 메서드를 호출한다는 개념으로 알고 있고,await는 쓰레드가 값을 반환받게 하기위해 비동기 메서드 내부에서 계속 해당 코드에 머무르게끔, 점유하게끔 한다고 생각해서 create 메서드든 save 메서드든 둘다 await가 붙는다고 생각했었습니다. 제가 잘못 이해하고 있는 걸까요?
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
예시코드 오타 제보
킬구형 일부러 그런건진 모르겠는데, 우선은 Batch Listener 섹션에서 실행명령에 전부--job.name=~~ 형식으로 되어있어. 잡이름을 인식 못해서 Job Bean이 여러개 명시되어있으면 실행할때 오류나는 것 같아.--spring.batch.job.name= 처럼 안하면 안될 것 같은데, 이건 의도적으로 줄인걸까?