Spring Boot 콘서트 예약 시나리오 동시성 문제 분석
·
💻 Backend Development/🔒 Concurrency Control
개요https://github.com/hhpb-code/hhplus-concert GitHub - hhpb-code/hhplus-concert: 콘서트 예약 서비스콘서트 예약 서비스. Contribute to hhpb-code/hhplus-concert development by creating an account on GitHub.github.com콘서트 예약 시스템은 다수의 사용자가 동시에 접근할 수 있기 때문에 여러 동시성 문제가 발생할 수 있다.특히 좌석 예약과 같은 경우, 동일 좌석이 중복 예약되거나 잘못된 예약 내역이 처리될 가능성이 높다.이 글에서는 콘서트 예약 서비스에서 발생할 수 있는 대표적인 동시성 문제를 분석하고 이를 해결하기 위한 방안을 제시한다.동시성 문제란?동시성 문제는 여러 프..
Spring Boot Redis를 활용한 분산 락 구현
·
💻 Backend Development/🔒 Concurrency Control
개요동시성 제어에는 여러 기법이 있다. 이전에는 비관적 락과 낙관적 락을 사용해 동시성 제어를 구현했지만, 이번에는 Redis를 이용한 분산 락을 다루어보자. 비관적 락과 낙관적 락에 대해 더 알고 싶다면 JPA 비관적 락과 낙관적 락 및 재시도를 참고하면 된다.분산 락분산 락은 여러 서버와 데이터베이스 환경에서 동시성 제어를 위해 사용된다. 단일 DB 환경에서는 비관적 락과 낙관적 락으로 충분히 동시성 제어가 가능하지만, 여러 DB가 분산된 환경에서는 성능 저하, Deadlock, 복제본 일관성 문제가 발생할 수 있어 분산 락이 필요하다.분산 락 구현 방법분산 락을 구현하는 방식은 여러 가지가 있다.Redis를 이용한 분산 락 구현: SETNX 사용Zookeeper를 이용한 분산 락 구현MySQL을 이..
JPA 비관적 락과 낙관적 락 및 재시도
·
💻 Backend Development/🔒 Concurrency Control
개요콘서트 예약 프로젝트를 개발하면서 좌석 예약에서 발생하는 동시성 문제에 대해 고민하게 되었다. 여러 사용자가 동시에 같은 좌석을 예약하려고 할 때 동시성 문제가 발생할 수 있는데, 이를 해결하기 위해 JPA에서 제공하는 비관적 락(Pessimistic Lock)과 낙관적 락(Optimistic Lock)을 사용하고, AOP를 활용한 재시도 로직을 통해 동시성 문제를 해결하는 방법을 알아보자.비관적 락(Pessimistic Lock)첫 번째로 시도한 방법은 비관적 락이다. (익숙한 방법이라 먼저 진행하게 되었다.) 비관적 락은 데이터베이스 레벨에서 락을 걸어 동시성 문제를 해결하는 방식으로, 여기서 말하는 락은 X Lock(Exclusive Lock)을 의미한다.// ConcertFacade.java@..
분산 환경에서의 동시성 제어
·
💻 Backend Development/🔒 Concurrency Control
배경동시성 제어의 기본 개념 이해를 위해 멀티 스레드 환경에서 동시성 제어 방식에 대한 분석 In Java 글참고분산 환경 vs 멀티 스레드 환경멀티 스레드 환경: 단일 인스턴스, 인스턴스 레벨 동시성 제어 가능분산 환경: 다중 인스턴스, 인스턴스 레벨 제어 불가능분산 환경에서의 동시성 제어 방식락(Lock)을 이용한 제어원리: 공유 자원에 대한 접근을 순차적으로 제어장점: 구현이 상대적으로 간단, 데이터 일관성 보장단점: 성능 저하 가능성, 데드락 위험버전(Version)을 이용한 제어원리: 데이터 변경 시 버전 정보 업데이트장점: 충돌 감지 용이, 낙관적 동시성 제어에 적합단점: 추가적인 버전 관리 오버헤드타임스탬프(Timestamp)를 이용한 제어원리: 각 트랜잭션에 고유한 타임스탬프 부여장점: 시..
멀티 스레드 환경에서 동시성 제어 방식에 대한 분석 In Java
·
💻 Backend Development/🔒 Concurrency Control
멀티 스레드 환경에서 동시성 제어 방식에 대한 분석 In Java이번에 항해 플러스 백엔드 코스의 1주차 과제를 진행하면서 멀티 스레드 환경에서 동시성 제어 방식에 대한 분석을 진행했다.이 내용은 분산환경을 고려하지 않고 외부 의존성을 사용하지 않고 멀티 스레드 환경만 고려하였다.1. 동시성 제어(Concurrency Control)의 개념과 중요성동시성 제어는 다중 사용자 환경에서 데이터베이스나 공유 자원의 일관성과 무결성을 유지하기 위한 핵심 기술이다.여러 사용자가 동시에 같은 데이터에 접근할 때 발생할 수 있는 문제를 예방하고 해결하는 것이 주요 목적이다.동시성 제어의 필요성데이터 일관성 유지시스템의 안정성 확보사용자 간 공정한 자원 접근 보장데이터 손실 및 오류 방지2. 동시성 이슈(Concurr..