본문 바로가기
반응형

IT/java6

Spring Scheduler 실행 밀림 원인과 5가지 체크리스트 Spring Scheduler 실행 지연 완벽 분석: 밀림 현상 해결을 위한 5가지 체크리스트Spring Scheduler를 운영하다 보면 "10분마다 돌아야 할 스케줄러가 왜 12분, 15분 뒤에 돌지?" 하는 의문이 들 때가 있습니다. 단순히 '스케줄러가 늦게 돈다'고 생각하고 코드의 주기 설정만 바꾸면 진짜 원인을 찾기 어렵습니다.결론부터 말씀드리면, @Scheduled 어노테이션 자체의 문제라기보다는 실제 작업의 소요 시간, 스레드 설정, DB 응답 속도, 외부 API 지연, 서버 리소스 부족이 얽혀 있는 경우가 대부분입니다. 실행 시간이 밀릴 때 정확한 원인을 파악하고 해결하는 방법을 실전 기준으로 정리해 드립니다.스케줄러 지연 시 자주 나타나는 증상현업에서 스케줄러 밀림 문제가 발생할 때 보통.. 2026. 6. 2.
Spring Scheduler 중복 실행 해결 가이드 Spring Scheduler 중복 실행 문제는 실무에서 생각보다 자주 겪는 이슈입니다. @Scheduled로 배치 작업을 설정했는데 같은 로직이 두 번 실행되거나, DB에 데이터가 중복으로 쌓여 당황하는 경우가 많습니다.이 글에서는 단일 서버와 멀티 서버 환경에서 발생하는 Spring Scheduler 중복 실행의 핵심 원인을 분석하고, 실무에서 바로 적용할 수 있는 단계별 해결 방법을 정리합니다.자주 보이는 증상실제 서버 운영 중 스케줄러 문제가 발생했을 때 겪게 되는 대표적인 증상은 다음과 같습니다.같은 시간대에 동일한 스케줄러 시작/종료 로그가 두 번씩 연속으로 찍힘DB에 INSERT 또는 UPDATE 되어야 할 데이터가 중복으로 처리됨외부 연동 API(알림톡, 결제 등)에 동일한 요청이 두 번 .. 2026. 5. 26.
Docker Health Check 기반으로 Thread.sleep 제거하기 이전 글에서 Thread.sleep(300000)으로 5분을 기다리던 구조를 개선해야겠다고 정리했습니다.이번에는 실제로 Docker Health Check를 이용해서 준비 상태를 확인하는 방식으로 바꾼 내용을 정리해보겠습니다.핵심은 이겁니다.“컨테이너가 떠 있는지”가 아니라“애플리케이션이 정상 상태인지”를 확인하자.1. Dockerfile에 HEALTHCHECK 정의하기먼저 전제가 하나 필요합니다.컨테이너에 HEALTHCHECK가 정의되어 있어야 합니다.예를 들어 Spring Boot라면:HEALTHCHECK --interval=30s --timeout=5s --retries=5 \CMD curl -f http://localhost:8080/actuator/health || exit 1 30초 간격으로 .. 2026. 3. 6.
Java로 SSH 접속, Docker 제어, GitHub Actions 트리거 구현기 운영 서버의 Docker 컨테이너를 원격에서 제어하고, 볼륨을 백업한 뒤 GitHub Actions까지 트리거해야 하는 요구가 있었습니다. 단순 스크립트가 아니라 Java 애플리케이션 내부에서 자동화 흐름을 제어해야 했기 때문에, SSH 접속부터 Docker 명령 실행, GitHub API 호출까지 모두 코드로 구현했습니다.1. SSH 접속 유틸 클래스 구현Java에서 SSH 접속을 위해 JSch 라이브러리를 사용했습니다.핵심은 세션을 생성하고, 작업이 끝난 뒤 안전하게 종료하는 구조입니다.public Session connectToSSH(String sshUser, String sshHost, int sshPort, String sshPassword) throws JSchException { JSch .. 2026. 2. 26.
원인을 찾지 못한 트랜잭션 에러, HikariCP를 의심하게 되기까지의 기록 프로젝트를 진행하던 중간헐적으로 트랜잭션 에러가 발생하는 문제를 겪게 되었다.문제는 에러가 항상 발생하지도 않고,발생 조건도 명확하지 않다는 점이었다.그래서 원인을 찾기 전까지는에러가 다시 발생할 때까지 그냥 지켜보는 것밖에 할 수 없어 굉장히 답답했다.처음 의심했던 것들우선 HikariCP 커넥션 풀을 사용하는모든 기능들을 동시에 실행해보았다.스케줄러API 호출데이터 조회AI 검증 로직일부러 부하를 줘봤지만이 상황에서는 트랜잭션 에러가 발생하지 않았다.이때부터“단순한 동시성 문제는 아닌 것 같다”는 생각이 들었다.로그 레벨을 DEBUG로 올리고 나서 보인 것들원인을 알 수 없어서로그 레벨을 DEBUG로 변경하고 로그를 계속 확인하기 시작했다.현재 프로젝트는2개의 DB에 접근하는 구조였고,그에 따라 Hi.. 2026. 1. 30.
Spring에서 스케줄러를 사용하는 이유(@Scheduled 정리) 이번에 구현한 API는1시간마다 발전 정보를 수집하고,수집된 데이터를 AI 모델에 전달해 이상징후를 판단한 결과를 반환받는 구조다.즉, 사용자가 직접 호출하는 API가 아니라서버에서 정해진 시간마다 자동으로 실행되어야 하는 작업이었고,이 작업을 어떻게 안정적으로 돌릴지가 핵심이었다.왜 스케줄러가 필요했는가발전 정보 수집과 이상징후 판단은 다음 흐름으로 동작한다.1시간마다 발전 정보 데이터 조회조회된 데이터를 AI 모델로 전달AI 모델이 이상징후 여부 판단판단 결과를 저장하거나 API 응답으로 활용이 구조에서 가장 중요한 조건은“사람 개입 없이, 정확한 주기로 반복 실행” 되는 것이었다.그래서 자연스럽게 스케줄러를 사용해야 하는 상황이 되었다.Spring에서 제공하는 일괄 처리 방식 3가지Spring 기준.. 2026. 1. 29.
반응형