Node.js와 Supabase로 무료 성경 API 데이터 수집 자동화하기

개요 이 글에서는 https://bible.helloao.org의 무료 성경 API에서 번역 목록과 각 번역의 책 정보를 수집하여 Supabase(PostgreSQL)에 자동 저장하는 방법을 정리합니다. Node.js 기반으로 구성하며 .env, 스케줄링, 중복 처리까지 실용적으로 다룹니다. 1단계: Supabase 테이블 구조 만들기 📌 bible_translations 테이블 create table bible_translations ( id text primary key, name text, website text, license_url text, 더 읽기

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에서 더 읽기

Apache POI SXSSFWorkbook 사용 시 OutOfMemoryError(OOM) 발생 원인 및 해결 전략

Apache POI의 SXSSFWorkbook은 대용량 Excel 파일을 메모리 부담 없이 생성할 수 있는 streaming 기반 API입니다. 하지만 적절히 설정하지 않으면 5만 건 이하의 데이터에서도 OOM(OutOfMemoryError)가 발생할 수 있습니다. 1. OOM 발생 원인 2. SXSSFWorkbook 생성 시 올바른 사용 예시 3. SXSSF는 랜덤 접근이 불가능 flush된 row는 메모리에서 제거되며, 이후 sheet.getRow(n)으로 접근할 더 읽기

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가 우선입니다. 더 읽기

EKS CronJob Pending 현상: “Preemption is not helpful for scheduling” 원인 분석

문제 현상 EKS 환경에서 특정 CronJob 실행 시 다음과 같은 메시지와 함께 Pod가 Pending 상태에 머무르며 일정 시간 이후에야 실행되는 현상이 발생했습니다: 원인 분석 이 메시지는 Kubernetes 스케줄러가 다음과 같은 조건 중 하나 이상으로 인해 Pod를 즉시 스케줄하지 못했음을 의미합니다: 1. 리소스 부족 2. 스케줄 조건 미충족 (Affinity, Toleration 등) 더 읽기

Oracle 연결 오류: SQLRecoverableException – Invalid Operation, NOT Connected

1. 오류 메시지 요약 2. 발생 원인 3. 자주 발생하는 상황 4. 해결 방법 4.1 HikariCP 설정 강화 주의: max-lifetime은 DB의 세션 만료 시간보다 짧게 설정해야 합니다. 4.2 Oracle DB 세션 타임아웃 확인 4.3 운영 상 참고사항 5. 결론 해당 오류는 커넥션 풀에서 이미 종료된 커넥션을 닫는 과정에서 흔히 발생하는 더 읽기