계층적 캐싱(Caffeine + Redis)을 도입하여 쿠폰 발급 시스템 성능 최적화하기
·
BackEnd
선착순 이벤트 쿠폰 발급 시스템을 구현하면서 Caffeine 로컬 캐시 + Redis 캐시를 활용한 계층적 캐싱 구조를 적용하여 성능 최적화 과정을 담고있습니다.  📌 캐시란? 자주 사용되는 데이터나 자원을 임시로 저장해두는 고속 저장 계층으로, 데이터 접근 속도 향상 및 시스템 부하 감소를 목표캐시는 반복적인 I/O 작업, 네트워크 지연, 계산 비용을 줄여 전반적인 성능을 최적화하는데 목적이 있습니다.캐시의 종류와 특징캐시는 크게 두 가지로 나눌 수 있습니다.종류저장위치 장점단점로컬 캐시 (Caffeine 등)서버 내 메모리빠른 속도, 네트워크 호출 없음다중 서버 환경에서 데이터 일관성 문제분산 캐시 (Redis 등)별도 독립 캐시 서버(글로벌)여러 서버가 같은 데이터를 공유 가능 (데이터 일관성 확..
Redis Lua Script를 활용한 쿠폰발급 동시성 제어 및 성능 개선기
·
BackEnd
선착순 이벤트 쿠폰 발급 시스템을 구현하면서, 발생하는 동시성 문제를 해결하고, 성능이슈를 해결하는 과정을 다루고있습니다. 결론적으로는, Redisson 락의 성능 한계를 극복하고, Redis Lua Script를 통해 처리 속도를 향상시키는 과정을 다루고 있습니다.   📌 쿠폰 발급 시스템에서 발생하는 동시성 문제선착순 쿠폰 발급 시스템에서는 동시에 수천 ~ 수만개의 요청이 발생하는데, 이를 적절히 처리하지 못하면 쿠폰이 초과 발급되거나, 데이터 정합성이 깨지는 동시성 문제가 발생합니다.쿠폰발급 시스템에서의 동시성 문제의 주요 원인은 다음과 같습니다.중복 발급 문제동일한 사용자가 여러 번 쿠폰을 발급받을 가능성중복 방지 로직이 없으면, 재고보다 많은 쿠폰이 발급될 위험이 있습니다.초과 발급 문제쿠폰 ..
트래픽을 고려한 쿠폰 발급 서버 아키텍처 개선기
·
BackEnd
선착순 이벤트 쿠폰 발급 시스템을 구현하면서, 아키텍처 개선을 통한 트래픽 및 성능 이슈를 해결한 과정을 다루고 있습니다. 처음에는 간단한 구조에서 Redis를 활용한 비동기 처리구조로 개선하는 과정을 설명해보겠습니다. 🔍 기존 쿠폰 발급 서버의 문제점기존 쿠폰 발급 시스템 구조API 서버는 사용자의 요청이 들어오면 바로 DB 트랜잭션을 통해 쿠폰 발급 처리(발급 수량 감소, 중복 검사, 발급 내역 저장)를 진행합니다.요청량이 적을 땐 문제 없이 작동하겠지만, 다수의 사용자가 동시에 몰리는 선착순 이벤트를 다루는 해당 프로젝트에서 트래픽이 순간적으로 몰리면 DB에 과부하가 걸려 성능 저하 및 장애가 발생할 가능성이 컸습니다.🔍 문제점 분석 및 개선방향 설정위 구조에서 발견한 문제점은 다음과 같습니다...
Spring 비동기 프로그래밍(@Async)과 ThreadPool 이해
·
BackEnd
Spring에서 비동기 프로그래밍을 활용하면, 메인 스레드가 직접 작업을 수행하지 않고, 별도의 스레드를 활용하여, 작업을 처리하여, 성능을 최적화하고 응답속도를 개선할 수 있습니다. 아래에서 Spring의 @Async , ThreadPool 개념 및 다양한 예제 등을  통해 이해해보겠습니다1. 비동기 프로그래밍이란?Main Thread가 직접 작업을 처리하지 않고, Sub Thread에게 작업을 위임하여 병렬적으로 실행하는 프로그래밍 방식작업이 끝날 때까지 기다리지 않고, 다른 작업을 동시에 진행할 수 있습니다.✅ 언제 사용하면 좋을까?실시간 응답이 필요하지 않은 작업을 처리할 때 비동기(Async) 방식을 사용하면 효율적입니다.예시 : 이메일 전송, 알림(Notification) 처리, Push 알림..
스프링 IoC와 DI
·
BackEnd
객체지향 프로그래밍에서 애플리케이션 간의 결합도를 낮추고, 확장성과 재사용성을 높이기 위한 중요한 개념이 DI(Dependency Injection)와 IoC(Inversion of Control)입니다. 스프링 프레임워크는 이 두 가지 원칙을 기반으로 동작하여, 개발자가 보다 깔끔하고 효율적인 코드를 작성할 수 있도록 도와줍니다.1. Inversion of Control (IoC)제어의 역전을 의미스프링에서는  전통적인 방식에서는 Java 객체를 `new`로 생성하여 개발자가 관리하는 것이 아닌 , `Ioc 컨테이너`가 객체의 생성과 의존성 관리를 대신해줍니다.IoC의 장점낮은 결합도: 객체 간의 직접적인 의존성을 줄여, 한 객체의 변경이 다른 객체에 미치는 영향을 최소화합니다.확장성과 유연성: 애플리..
스프링에서 SOLID 원칙 알아보기
·
BackEnd
SOLID는 객체지향 설계에서 권장되는 다섯 가지 핵심 원칙을 말합니다. 코드의 유지보수성, 확장성, 재사용성을 높이는 데 큰 도움을 줍니다!  스프링에서는 DI(Dependency Injection)와 IoC(Inversion of Control)를 비롯해 다양한 기술을 통해 SOLID 원칙을 자연스럽게 구현할 수 있습니다. 각 원칙을 스프링 관점에서 알아보겠습니다. 스프링 IOC와 DI 알아보기 스프링 IoC와 DI객체지향 프로그래밍에서 애플리케이션 간의 결합도를 낮추고, 확장성과 재사용성을 높이기 위한 중요한 개념이 DI(Dependency Injection)와 IoC(Inversion of Control)입니다. 스프링 프레임워크는 이 두 가wjdgns4385.tistory.com1. 단일 책임 ..
5jeong
'BackEnd' 카테고리의 글 목록