목록 보기
선착순 수강 신청 동시성 이슈
백엔드

선착순 수강 신청 동시성 이슈

넥스트리
넥스트리
2026년 8월 20일

두줄요약

선착순 수강 신청의 정원 초과를 막기 위해 동시성 제어 방식을 비교했습니다. 조건부 원자적 UPDATE와 유니크 제약, 트랜잭션으로 정합성을 보장했습니다.

문제 상황

  • 선착순 수강 신청에서 동시 요청이 몰리면 현재 인원을 동시에 읽어 정원 100명을 101명으로 초과할 수 있는 정합성 문제
  • @Transactional만으로는 트랜잭션 간 동시 접근을 막지 못해 단순 조회 후 저장 방식에 한계 존재

원인 분석

  • 여러 트랜잭션이 같은 currentCount를 읽고 같은 조건을 통과하는 경합 상황
  • 중복 신청, 서버 다중화, 요청 집중 시점까지 함께 고려해야 하는 비즈니스 규칙

해결 방법

  • 조건부 원자적 UPDATE로 정원 검증과 인원 증가를 하나의 DB 연산으로 처리
  • student_id, course_id 유니크 제약 조건과 단일 트랜잭션으로 중복 신청 및 불일치 방지

성능/운영 포인트

  • 여러 애플리케이션 서버 환경에서도 동일한 정원 규칙 적용 가능
  • 별도 분산 락 없이 기존 데이터베이스 기능만으로 구현 가능
  • 요청 집중 상황에서 락 경합보다 간결한 처리 구조 확보

다음 읽기

#transaction 주제를 이어서 읽기

DB 트랜잭션 중심 대량요청 처리 최적화

대량 요청 환경의 병목을 DB 트랜잭션 관점에서 분석하고 개선한 사례입니다. 비관적 락을 낙관적 락과 재시도로 전환해 커넥션 효율과 안정성을 높였습니다.

넥스트리
넥스트리
백엔드

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...