@Scheduled스케줄링이란 애플리케이션 내에서 특정 작업을 미리 정해진 시간에 또는 주기적으로 자동으로 실행하도록 만드는 기능입니다.
주요 사용 사례:
@Scheduled 어노테이션Spring은 @Scheduled 어노테이션을 통해 스케줄링을 매우 간단하게 구현할 수 있도록 지원합니다.
사용법:
@EnableScheduling: 메인 애플리케이션 클래스에 @EnableScheduling 어노테이션을 붙여 스케줄링 기능을 활성화합니다.@Scheduled: 주기적으로 실행하고 싶은 메서드에 @Scheduled 어노테이션을 붙이고, 실행 주기를 설정합니다.주요 속성:
fixedRate: 이전 작업의 시작 시간을 기준으로, 정해진 시간(밀리초)마다 작업을 실행합니다. (이전 작업이 끝나지 않아도 시간이 되면 다음 작업 시작 시도)fixedDelay: 이전 작업이 끝난 시간을 기준으로, 정해진 시간(밀리초)이 지난 후에 다음 작업을 실행합니다. (작업 시간이 길어지면 실행 주기도 길어짐)cron: Cron 표현식을 사용하여 매우 유연하고 복잡한 시간 예약이 가능합니다. (e.g., "매주 월~금 오전 9시 30분에 실행")@Component
public class MyScheduler {
// 5초(5000ms)마다 실행 (이전 작업 시작 시간 기준)
@Scheduled(fixedRate = 5000)
public void runEvery5Seconds() {
System.out.println("스케줄링된 작업 실행: " + LocalDateTime.now());
}
// 매일 오전 4시에 실행
@Scheduled(cron = "0 0 4 * * *")
public void runAt4AM() {
// ... 일일 통계 집계 로직 ...
}
}
@Cacheable캐싱은 자주 사용되지만 잘 변하지 않는 데이터나, 계산 비용이 비싼 작업의 결과를 메모리와 같은 빠른 저장소에 임시로 저장해두고, 다음 요청 시에는 실제 작업을 다시 수행하는 대신 저장된 결과를 즉시 반환하는 기술입니다.
핵심 목표: 데이터베이스나 외부 API에 대한 반복적인 호출을 줄여, 애플리케이션의 응답 속도를 향상시키고 시스템 부하를 감소시킵니다.
Spring은 @Cacheable, @CacheEvict 등의 어노테이션을 통해, 기반 기술(EhCache, Caffeine, Redis 등)에 상관없이 일관된 방식으로 캐싱을 적용할 수 있도록 캐시 추상화를 제공합니다.
사용법:
@EnableCaching: 메인 애플리케이션 클래스에 @EnableCaching 어노테이션을 붙여 캐싱 기능을 활성화합니다.@Cacheable: 캐싱을 적용하고 싶은 메서드에 붙입니다.key에 대한 결과가 있는지 확인합니다.value (또는 cacheNames): 사용할 캐시의 이름을 지정합니다.key: 캐시 키를 생성하는 규칙을 SpEL(Spring Expression Language)로 지정합니다. 지정하지 않으면 메서드의 파라미터를 기반으로 자동 생성됩니다.@Service
public class ProductService {
// "products" 캐시에 #id를 키로 하여 결과를 저장
@Cacheable(value = "products", key = "#id")
public Product getProductById(Long id) {
// 이 로그는 최초 호출 시에만 찍히고, 이후에는 찍히지 않음
System.out.println("DB에서 상품 정보를 조회합니다...");
// ... DB에서 데이터를 조회하는 비용이 비싼 작업 ...
return productRepository.findById(id).orElse(null);
}
}
기타 캐시 어노테이션:
@CachePut: 메서드를 항상 실행하고, 그 결과를 캐시에 갱신(update)합니다.@CacheEvict: 특정 캐시 항목을 제거(delete)합니다. (e.g., 상품 정보가 수정되면 해당 상품의 캐시를 삭제)Actuator는 실행 중인 Spring Boot 애플리케이션의 상태를 모니터링하고 관리하기 위한 다양한 엔드포인트(Endpoints)를 제공하는 프로젝트입니다.
핵심 목표: 애플리케이션이 "살아있는지", "건강한지", "내부적으로 어떤 일이 일어나고 있는지"를 외부에서 쉽게 확인할 수 있도록 합니다.
사용법: spring-boot-starter-actuator 의존성을 추가하고, application.yml에 필요한 설정을 추가하기만 하면 됩니다.
| 엔드포인트 | 설명 |
|---|---|
/actuator/health | 애플리케이션의 건강 상태를 확인합니다. (DB 연결, 디스크 공간 등) 상태가 정상이면 {"status":"UP"}을 반환. (로드 밸런서의 헬스 체크에 주로 사용) |
/actuator/info | 애플리케이션의 기본 정보를 보여줍니다. (빌드 버전, Git 커밋 정보 등) |
/actuator/metrics | JVM 메모리 사용량, CPU 사용률, HTTP 요청 수 등 다양한 성능 지표(Metric)를 제공합니다. |
/actuator/beans | Spring 컨테이너에 등록된 모든 Bean의 목록을 보여줍니다. |
/actuator/mappings | @RequestMapping으로 매핑된 모든 URL 엔드포인트 목록을 보여줍니다. |
/actuator/env | 애플리케이션의 모든 환경 변수 및 설정 속성을 보여줍니다. (민감 정보 노출 주의) |
@Scheduled 어노테이션을 사용하면, 특정 작업을 주기적으로 또는 정해진 시간에 자동으로 실행하는 스케줄링 기능을 손쉽게 구현할 수 있습니다.@Cacheable 어노테이션을 사용하면, 비용이 비싼 메서드의 결과를 캐시에 저장하여 반복적인 실행을 막고, 애플리케이션의 응답 속도를 크게 향상시킬 수 있습니다./actuator/health, /actuator/metrics와 같은 모니터링 엔드포인트를 제공하여, 실행 중인 애플리케이션의 내부 상태를 외부에서 쉽게 확인하고 관리할 수 있도록 돕습니다.