SpringBoot(9)
-
[SpringBoot] Redis의 Atomic Opertaion을 이용한 좌석 선점 시스템 만들기
여러 사용자가 동시에 특정 리소스에 접근하거나 변경하려고 할 때, 데이터의 무결성을 보장하는 것은 중요한 과제 중 하나입니다.특히 티켓팅 서비스처럼 동일 좌석에 대한 예매 요청이 한순간에 몰리는 상황에서는 동시성 제어가 필수적입니다.이번 포스팅에서는 SpringBoot 환경에서 Redis를 활용해, 티켓 예매 과정에서 발생할 수 있는 동시성 문제를 해결하는 좌석 선점 시스템을 구축하는 과정을 소개하겠습니다. Redis란 무엇인가?Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)입니다. 데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소입니다. 인메모리 구조란 컴퓨터의 주기억장치인 RAM에 데..
2025.04.24 -
[SpringBoot] Scale-out 환경에서 발생하는 Scheduler 중복 실행 문제 Shedlock으로 해결하기
Scale-out 환경에서 스케줄러(Scheduler)를 이용해 특정 작업을 주기적으로 수행할 경우, 동일한 작업이 여러 인스턴스에서 동시에 실행되는 문제가 발생할 수 있습니다.이번 포스팅에서는 이런 상황을 방지하기 위한 방법으로 ShedLock 라이브러리에 대해 알아보고 이용하여 스케줄러 중복 실행 문제를 해결해보겠습니다. 문제 상황@Component@Slf4jpublic class Scheduler { @Scheduled(zone = "Asia/Seoul", fixedDelay = 1000) // 타임존 서울, 이전 작업이 끝난 후 1초마다 실행 public void run1() { log.info("Scheduler 실행1 : {}", Thread.currentThread()..
2025.04.21 -
[SpringBoot] @Scheduled를 이용한 스케줄러 구현
이번 포스팅에선 스프링부트 프레임워크에서 제공하는 @Scehduled 어노테이션을 활용해서 스케줄러를 구현해보겠습니다. @Scheduled란? @Scheduled는 Spring에서 제공하는 스케줄링 작업을 정의하는 어노테이션입니다. 이를 통해 특정 메서드를 주기적으로 실행하거나, 예약된 시간에 실행하도록 설정할 수 있습니다. Spring에서 @Scheduled 어노테이션은 기본적으로 싱글 스레드에서 실행되며, 만약 두 개 이상의 @Scheduled 작업이 정의되어 있어도, 별도의 병렬 스케줄링 설정을 하지 않으면 순차적으로 실행됩니다. 즉, 여러 스케줄링 작업이 동시에 실행되지 않고, 하나씩 차례로 실행됩니다.구현@Scheduled 어노테이션을 활성화하려면 애플리케이션에 @EnableScheduling..
2025.04.21