스프링 부트에서 파라미터화된 로깅{}과 String.format 사용법 Java의 로깅 시스템에서는 주로 두 가지 방식으로 로그 메시지를 포맷한다: 파라미터화된 로깅과 String.format을 사용하는 방법이다. 이 두 방법은 서로 다른 특징과 사용 케이스를 가지고 있다. 각각의 특징과 차이점을 알아보자! 1. {}를 사용하는 방법 SLF4J에서 제공하는 로그 메시지 형식화 방법이다. 로그 레벨이 활성화되지 않은 경우, 파라미터로 전달된 객체들의 toString() 메소드가 호출되지 않는다. 이는 성능상 이점을 제공한다. 즉, 불필요한 문자열 연산이 발생하지 않는다. 그러나 로그 레벨이 변경될 때 로그 출력 내용도 달라질 수 있다는 점을 이해해야 한다. 가독성이 좋다. 로그 메시지와 파라미터가 분리되어..
Spring
AOP를 활용한 로깅 구현: @EnableAspectJAutoProxy와 사용자 정의 Aspect 클래스 비교 가이드 스프링 부트 프로젝트에 로직의 이해를 돕기 위해 AOP를 로깅에 적용하는 방법에 대해서 설명해 보겠다. 1. 왜 AOP를 로깅에 사용하는가? 문제 인식 복잡한 애플리케이션에서는 다양한 프로세스와 로직이 수행된다. 이를 추적하고 이해하기 위해 로깅은 필수적이다. AOP의 역할 AOP(Aspect-Oriented Programming)는 공통 관심 사항(예: 로깅, 보안, 트랜잭션 관리 등)을 애플리케이션의 핵심 로직으로부터 분리하여 관리할 수 있게 해 준다. 이를 통해 코드의 재사용성을 높이고, 유지보수를 용이하게 한다. 로깅에 AOP 적용 로깅은 여러 클래스와 메소드에 걸쳐 반복적으로 필..
Quartz 적용하기 스프링 부트와 쿼츠를 활용하여 매일 새벽 세시에 회원 테이블을 조회해서 마지막 로그인 시점이 6개월보다 이전이면 휴면 계정으로 처리하는 프로세스를 작성해 보자. 0. 쿼츠의 작동 방식 쿼츠 스케줄러는 작업을 주기적으로 실행하는 데 사용되는 강력한 라이브러리로, 여러 핵심 컴포넌트와 개념을 가지고 있다. 쿼츠의 작동 방식을 이해하려면 다음 개념들을 알아야 한다: Job: 정의: Job은 쿼츠가 실행할 작업을 정의한다. 특징: 사용자는 Job 인터페이스를 구현하고, execute() 메서드 안에 작업 내용을 정의한다. 역할: execute() 메서드는 스케줄러에 의해 트리거 될 때 호출된다. JobDetail: 정의: JobDetail은 Job의 인스턴스를 나타내며, Job에 대한 정보..
스프링 스케줄러 적용하기 매일 새벽 세시에 회원 테이블을 조회해서 마지막 로그인 시점이 6개월보다 이전이면 휴면 계정으로 처리하는 프로세스를 작성해 보자. 1. 스프링 스케줄러 설정 스프링 부트 프로젝트에 스프링 스케줄러를 사용하기 위해 별도의 의존성 추가가 필요하지 않다. @EnableScheduling 어노테이션을 메인 클래스나 설정 클래스에 추가하여 스케줄러를 활성화한다. import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; @Configuration @EnableScheduling public class SchedulerCo..
Spring 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 어노테이션을 사용하면, 개발자는 ..
스프링 부트 프로젝트 실행하자마자 batch job이 실행되는 이슈 매일 새벽 1시에 외부 API와 통신하면서 DB 데이터를 업데이트하는 쿼츠 스케줄러를 만들었다. 그런데 코드가 잘 돌아가는지 테스트하기 위해 로컬 환경에서 프로젝트를 실행하면 프로젝트가 실행되자마자 batch job이 실행되는 이슈가 있었다. 1. 기존 코드 나는 Java의 쿼츠 스케줄러를 사용해 매일 새벽 1시에 외부 API를 호출해 DB 데이터를 갱신하는 배치 작업을 만들었다. 그런데 코드를 테스트하기 위해 프로젝트를 새로 실행할 때마다 배치 작업이 시작돼 모든 step을 진행하는 이슈가 생겼다. 개발 단계에서는 프로젝트가 시작될 때마다 배치 작업이 실행돼도 큰 문제는 없지만, 실제 운영 환경에서는 이런 방식이 문제를 일으킬 수 있다..