스프링 스케줄러 적용하기 매일 새벽 세시에 회원 테이블을 조회해서 마지막 로그인 시점이 6개월보다 이전이면 휴면 계정으로 처리하는 프로세스를 작성해 보자. 1. 스프링 스케줄러 설정 스프링 부트 프로젝트에 스프링 스케줄러를 사용하기 위해 별도의 의존성 추가가 필요하지 않다. @EnableScheduling 어노테이션을 메인 클래스나 설정 클래스에 추가하여 스케줄러를 활성화한다. import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; @Configuration @EnableScheduling public class SchedulerCo..
전체 글
하다보니 재미있는 AI에 빠져있는 평양냉면7 문의사항: ysoil8811@gmail.comSpring Batch, Spring Scheduler, Quartz의 차이 1. 스프링 배치(Spring Batch) 스프링 배치는 대용량 데이터 처리에 특화된 프레임워크다. 예를 들어, 매일 밤 데이터베이스에서 데이터를 가져와서 처리하고 결과를 다른 시스템으로 보내는 작업 같은 것이 있다. 주로 다음과 같은 특징을 가진다: 청크 지향 처리: 데이터를 일정한 크기의 청크로 나누어 처리한다. 이는 대용량 데이터를 효율적으로 처리할 수 있게 한다. 재시작 기능: 실패한 작업을 중단된 지점부터 재시작할 수 있다. 스킵 로직: 특정 조건에서 일부 항목을 건너뛰는 로직을 구현할 수 있다. 리스너: 작업의 생명주기에 훅을 제공하여 비즈니스 로직을 삽입할 수 있다. 배치 관리: 관리용 대시보드를 통해 배치 작업을 ..
Spring Boot 3.1.2 버전에 Swagger 3 버전 적용하기 Swagger는 API의 설계, 구축, 문서화 및 사용을 위한 강력한 오픈 소스 프레임워크로, 개발자들이 RESTful 웹 서비스를 효율적으로 만들고, 문서화하고, 사용자와 소통할 수 있도록 도와준다. Swagger 2에서 Swagger 3 (현재 OpenAPI 3로 더 널리 알려져 있음)로의 전환은 개선된 기능을 통해 더 나은 API 문서화 경험을 제공한다. Swagger 3는 여러 호스트 지원, 강화된 보안 정의, 콜백, 링크 기능 등을 통해 API를 더욱 세밀하게 제어할 수 있게 해 준다. 1. 의존성 설정 (버전은 변동될 수 있음) org.springdoc:springdoc-openapi-ui OpenAPI 3 사양을 위한 S..
Spring Boot에서 Feign 클라이언트 사용하기 Spring Boot와 Spring Cloud는 마이크로서비스 아키텍처의 구축과 관리를 간소화하고, 서비스 간의 통신을 효율적으로 처리하는 데 필수적인 다양한 도구를 제공한다. @FeignClient는 이러한 도구 중 하나로, 마이크로서비스 간의 HTTP 기반 통신을 추상화하여 개발자가 원격 서비스를 쉽게 호출할 수 있도록 지원한다. Feign 클라이언트를 사용하면 복잡한 HTTP 클라이언트 코드를 작성할 필요 없이, 인터페이스 기반의 메서드 호출로 원격 서비스와의 통신을 구현할 수 있다. 이는 마이크로서비스 아키텍처에서 서비스를 분리하고 각각 독립적으로 개발 및 배포하는 방식에 잘 부합한다. @FeignClient 어노테이션을 사용하면, 개발자는 ..
자바 리플렉션의 기초 리플렉션의 정의 자바 리플렉션은 컴파일 시점에 알 수 없는 클래스나 메서드, 필드 등에 대한 정보를 얻거나, 그 정보를 사용하여 객체를 생성하거나, 메서드를 호출하거나, 필드에 값을 설정하거나 하는 등의 작업을 할 수 있는 기능이다. 마치 거울을 통해 자신의 모습을 비추어 보는 것처럼, 객체의 내부 구조를 살펴볼 수 있다는 의미에서 "리플렉션(reflection)"이라는 이름이 붙여졌다. 리플렉션을 사용하면 다음과 같은 작업을 수행할 수 있다. 클래스 이름, 상위 클래스, 인터페이스, 생성자, 메소드, 필드 등의 정보를 얻을 수 있다. 객체를 생성하거나, 변수의 값을 변경하거나, 메소드를 호출할 수 있다. 리플렉션의 사용 예: 리플렉션은 다양한 용도로 사용될 수 있다. 다음은 몇 가..
자바와 스프링, 그리고 JPA에서의 프록시 객체 이해하기 1. 프록시의 소개 프록시 객체는 자바 프로그래밍 패러다임 내에서 매우 중요한 개념이다. 여러분이 객체 지향 프로그래밍을 배우면서 '대리인' 또는 '중개자'와 같은 역할을 하는 구조를 만났을 것이다. 프록시 객체는 바로 이 역할을 수행한다. 이 글에서는 프록시 객체가 무엇이고, 자바와 스프링, 그리고 JPA에서 어떻게 사용되는지를 한번 설명하겠다. 2. 자바에서의 프록시 객체 자바에서 프록시 객체는 실제 객체를 대신하여 클라이언트의 요청을 처리한다. 이는 주로 원격 객체나 비용이 많이 드는 객체 생성을 대신하거나, 보안상의 이유로 직접적인 객체 접근을 제한할 때 사용된다. 아래는 예시 코드들이다. Image 인터페이스 public interface..
스프링 부트 프로젝트 실행하자마자 batch job이 실행되는 이슈 매일 새벽 1시에 외부 API와 통신하면서 DB 데이터를 업데이트하는 쿼츠 스케줄러를 만들었다. 그런데 코드가 잘 돌아가는지 테스트하기 위해 로컬 환경에서 프로젝트를 실행하면 프로젝트가 실행되자마자 batch job이 실행되는 이슈가 있었다. 1. 기존 코드 나는 Java의 쿼츠 스케줄러를 사용해 매일 새벽 1시에 외부 API를 호출해 DB 데이터를 갱신하는 배치 작업을 만들었다. 그런데 코드를 테스트하기 위해 프로젝트를 새로 실행할 때마다 배치 작업이 시작돼 모든 step을 진행하는 이슈가 생겼다. 개발 단계에서는 프로젝트가 시작될 때마다 배치 작업이 실행돼도 큰 문제는 없지만, 실제 운영 환경에서는 이런 방식이 문제를 일으킬 수 있다..
Spring Batch 코드 작성 후 실행 시 Table doesn't exist 에러 해결 1. 기존 코드 매일 새벽마다 외부 Open API와 통신해 DB값을 업데이트해야 하는 배치 프로세스를 추가했다. 코드를 전부 작성하고 실행하니 아래와 같이 테이블이 존재하지 않는다는 에러 메시지가 출력됐다. 2. 문제 분석 1. Spring Batch 사용할 때 Batch용 테이블이 필요한 이유 Spring Batch를 사용할 때 Batch 관련 테이블이 중요한 역할을 하는 이유는 상태 관리, 실패한 작업의 재시도, 성능 모니터링, 일괄 처리 통계와 같은 기능들을 제공하기 때문이다. 이러한 테이블들은 Batch Job의 실행에 대한 로깅, 실행 이력, 성공/실패 상태, 현재 진행 중인 Step 정보 등을 저장한..