AI에게 아키텍처를 질문할 때 프롬프트를 얼마나 구체적으로 작성해야 하는가? — Spring Batch EKS CronJob 사례로 보는 제약 조건의 중요성

AI에게 아키텍처를 질문할 때 프롬프트를 얼마나 구체적으로 작성해야 하는가 AI에게 시스템 아키텍처를 질문할 때 자주 발생하는 문제가 있다. 처음에는 단순히: 라는 정도의 정보만 전달한다. 그러면 AI는 대부분 다음 기준으로 답변하게 된다. 대표적으로 아래와 같은 구조를 추천하게 된다. 즉: 를 중심으로 접근한다. 그리고 대부분의 일반적인 시스템에서는 실제로 이 방향이 맞다. 그런데 더 읽기

Spring @Scheduled 동작 조건과 반복 실행 문제 해결 가이드

@Scheduled가 동작하지 않는 이유와 설정 조건 Spring의 @Scheduled는 단순히 어노테이션을 붙이는 것만으로는 동작하지 않습니다. 다음과 같은 조건이 반드시 충족되어야 합니다. ✅ 필수 설정 💥 예외 사례 아래와 같이 파라미터가 있는 메서드는 @Scheduled에서 예외가 발생합니다: ✅ 올바른 예시 cron 표현식 정리 표현식 설명 */2 * * * * ? 매 2초마다 더 읽기

Spring Batch ExecutionContext 사이즈 초과 원인과 해결 방법

1. ExecutionContext 사이즈 초과 발생 원인 Spring Batch에서 아래와 같은 방식으로 대용량 데이터를 ExecutionContext에 저장할 경우, 직렬화된 데이터가 수십 KB ~ 수 MB까지 증가하면서 DB 저장에 실패하거나 OutOfMemoryError가 발생할 수 있습니다. 2. 안전한 대체 전략 📌 2-1. Processor에서 get 후 즉시 remove 📌 2-2. StepExecutionListener로 꺼내고 바로 삭제 그리고 Processor에서 더 읽기

Spring Boot 3 구동 지연 원인 분석 및 ConditionEvaluationReport 활용

1. 배경 Spring Boot 3 기반의 배치 시스템을 운영 중, 일부 구동 시점에서 눈에 띄는 지연 현상이 발생하여 이에 대한 분석을 진행하였습니다. JPA 미사용, 보안 비활성화 등의 전제가 있는 프로젝트입니다. 2. 분석 방식 Spring Boot 3.1 이상에서 제공하는 ConditionEvaluationReport 로그를 통해 자동 설정이 어떤 조건에 따라 적용 또는 제외되는지를 확인했습니다. 더 읽기

Spring Batch Chunk Size, Skip/Retry, Listener 구성 시 주의사항 정리

1. Spring Batch에서 Chunk Size 1과 1000의 성능 차이 Chunk Size는 Spring Batch 성능에 직접적인 영향을 주며, 특히 chunk=1과 chunk=1000은 속도 차이가 큽니다. 일반적으로는 chunk size를 100 ~ 1000 사이로 설정하는 것이 적절하며, 성능과 메모리 사용량의 균형을 고려해야 합니다. 2. Skip과 Retry를 함께 설정했을 때 우선순위는? Spring Batch에서는 retry가 우선입니다. 더 읽기

Spring Batch Tasklet 트랜잭션 내 개별 항목 실패 시 커넥션 누수 방지 방법

문제 요약 Tasklet 내부에서 루프를 돌며 개별 항목을 처리할 때, 예외가 발생해도 catch 블럭 내에서 로그만 찍고 다음 항목으로 진행하는 방식은 커넥션 반환이 제대로 되지 않아 HikariCP 커넥션 풀에서 누수가 발생할 수 있음. 개선 방안 예제 코드 예외 발생 시 명시적 커넥션 반환 효과

Spring Batch Tasklet에서 slave DB를 여러 번 호출할 때 커넥션은 각각 반환되는가?

🔹 질문 시나리오 Spring Batch Tasklet 안에서 slaveMapper를 사용하는 다음 코드처럼: slaveTxSupport.read(() -> slaveMapper.selectSomething());slaveTxSupport.read(() -> slaveMapper.selectAnotherThing()); 이 경우: 이 궁금증에 대한 답을 정리합니다. 🔍 결론 요약 항목 설명 TransactionTemplate.read(…) 호출마다 트랜잭션 생성됨 ✅ 맞습니다 각 트랜잭션은 독립적인 커넥션 사용 ✅ 맞습니다 첫 번째 호출이 끝난 시점에 커넥션 반환되는가 ✅ 반환됨 더 읽기

Spring Batch에서 slave DB 커넥션 반환 문제와 MyBatis + Hikari 트랜잭션 실전 가이드

🔹 문제 인식 🔹 핵심 원인 🔹 해결 방법 ✅ 1. TransactionTemplate으로 slave 트랜잭션 분리 List<Data> list = slaveTxSupport.read(() -> slaveMapper.selectByCondition(paramA, paramB)); ✅ 2. chunk 방식에서 ListItemReader에 적용 가능 @Bean@StepScopepublic ListItemReader<Entity> reader() { return new ListItemReader<>( slaveTxSupport.read(() -> mapper.selectList(param)) );} ✅ 3. 커넥션 반환 여부 확인 🔹 MyBatis Interceptor에서 커넥션 더 읽기