선착순 쿠폰 발급 시스템을 구현하는 방법에 대해 궁금하여 공부하며 기록 해보았습니다.1. 요구사항 정의이벤트를 진행하며, 선착순 100명에게만 할인 쿠폰을 지급하고자 합니다. 시스템은 아래의 조건을 만족해야 합니다.선착순 100명에게만 지급되어야 한다.많은 유저가 동시에 쿠폰을 요청할 때 트래픽을 버틸 수 있어야 한다.쿠폰 발급 시 데이터 정합성을 유지해야 한다.이러한 요구사항을 충족하기 위해 트랜잭션 관리, 동시성 처리, 비동기 시스템 구성 등 다양한 기술적 요소를 고려해야 합니다. 동시에 쿠폰 발급이 이루어질 때, DB에 과부하를 주지 않고 처리할 수 있는 방법도 필요합니다.2. 문제 해결 방안(1) Redis를 활용한 문제 해결Redis는 싱글 스레드 기반으로 동작하며, 내부적으로는 여러 가지 고유..
애플리케이션에서 여러 사용자가 동시에 같은 데이터를 수정하려 할 때, 동시성 문제(Race Condition)가 발생할 수 있습니다. 이런 문제를 해결하기 위한 방법으로 여러 접근 방식이 있습니다. 이번 글에서는 Spring에서 동시성 문제를 해결하기 위한 몇 가지 대표적인 방법을 살펴보겠습니다. 1. synchronized 키워드를 이용한 해결Java에서 가장 기본적인 동시성 처리 방법 중 하나는 synchronized 키워드를 사용하는 것입니다. 이를 통해 하나의 프로세스 내에서 동시에 여러 스레드가 동일한 리소스에 접근하지 못하도록 제어할 수 있습니다. 아래는 synchronized를 사용한 예시입니다.public synchronized void decreaseQuantity(Long id, Lon..
로그인 기능을 구현하다보니 Spring Security의 인증 과정에 대해 공부해야 했고, 그 중 아이디와 패스워드를 사용한 인증은 어떤 식으로 이뤄지는가에 대해 정리해 보았습니다.스프링 시큐리티가 제공하는 필터들WebAsyncManagerIntergrationFilterSecurityContextPersistenceFilterHeaderWriterFilterCsrfFilterLogoutFilterUsernamePasswordAuthenticationFilterDefaultLoginPageGeneratingFilterDefaultLogoutPageGeneratingFilterBasicAuthenticationFilterRequestCacheAwareFilterSecurityContextHolderAwar..
Spring Actuator란?DB 연결 및 애플리케이션의 성능 상태를 모니터링할 수 있는 기능이다. 그라파나 등이랑도 함께 사용할 수 있다고 한다.주로 health check 용도의 endpoint로 많이 사용된다. 사용 방법아래의 의존성만 추가해주면 /actuator로 접속하면 모니터링 된 내용들을 볼 수 있다.# build.gradledependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator'}/actuator/health에 접속하면 아래와 같이 “UP”으로 서버가 살아있음을 나타내고 있는데, “components”들을 보면 어떤 것들을 헬스 체크를 하고 최종적으로 해당 서버가 살아있음을 나타내는지 보..
record란?간단히 설명하자면 "데이터 클래스"이며 순수하게 (불변)데이터를 보유하기 위한 특수한 종류의 클래스다. 이를 사용하면 데이터를 객체 간에 전달하는 작업을 간단하게 만들어준다.JDK14에서 preview로 등장하여 JDK16에서 정식 기능으로 포함예시String 값으로 name, Integer 값으로 age라는 변수를 갖고 있는 User라는 클래스 구현한다고 가정하자.일반 클래스로 구현한 User 클래스public class User { private final String name; private final Integer age; public User(String name, Integer age) { this.name = name; this.age = age; ..
JVM(Java Virtual Machine)이란?운영체제의 메모리 영역에 접근하여 메모리를 관리하는 프로그램메모리 관리, Garbage Collector 등을 수행하게 된다.Garbage Collector란?동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지하여 해제하는 기능을 맡고 있다.C, C++의 경우 사용자가 직접 메모리를 할당 받고, 해제해야 한다.(malloc(), free()와 같은 함수를 사용)하지만 Java에서는 GC의 기능이 Heap 메모리에서 unreachable한 객체를 자동으로 삭제 해 준다.(참고) Heap과 Stack은 또 뭐지?Stack정적*으로 할당한 메모리 영역원시 타입의 데이터가 값과 함께 할당, Heap 영역에 생성된 Object 타입의 데이터의 참조 값을 할..