

1️⃣ 테스트 목적
본 테스트의 목적은 다음과 같다.
- 여러 사용자가 동시에 예약 요청을 보낼 때 각 사용자별로 1건만 예약이 생성되는지 확인
- Redis 기반 admitted(입장 권한) 시스템이 동시 요청 상황에서도 정상적으로 소비되는지 검증
- 동시성 상황에서 데이터 정합성(booking, booked_count)이 유지되는지 확인
- 인증/인가 흐름(JWT + Spring Security)이 동시 요청에서도 안정적으로 동작하는지 확인
2️⃣ 테스트 환경
- Backend: Spring Boot + Spring Security + JWT
- Queue/Admission: Redis (admitted key 기반)
- 예약 API:
POST /api/concerts/{concertId}/booking
- 테스트 도구:
- Postman (단건 검증)
- JMeter (동시성 테스트)
3️⃣ 사전 조건
3. 1 테스트 사용자
- userId = 1
- userId = 2
각 사용자에 대해 JWT 토큰을 준비
3. 2 DB 초기화
deletefrom bookingwhere concert_id=1and user_idin (1,2);
update concertset booked_count=0where id=1;
3. 3 admitted 상태 생성
SET EX admitted:concert:1:user:16001
SETEX admitted:concert:1:user:26001
- 각 사용자별 admitted 1개씩 발급
- TTL: 600초
4️⃣ 테스트 시나리오
시나리오: 다중 사용자 동시 예약
- user1, user2 각각 여러 번 요청을 보내는 상황
- 총 요청 수: 50
- user1 토큰 25건
- user2 토큰 25건
- JMeter 설정:
- Thread: 50
- Ramp-up: 1초
- Synchronizing Timer: 사용 (동시 요청)
👉 즉, 두 명의 사용자가 동시에 예약 버튼을 여러 번 누르는 상황을 시뮬레이션
5️⃣ 테스트 결과
5. 1 JMeter 결과
- 총 요청 수: 50
- 성공 응답 (200): 일부 존재 (예약 성공)
- 실패 응답 (409): 다수 (입장 권한 없음)
대표 성공 응답:
{
"status":"BOOKED",
"concertId":1,
"concertTitle":"2026 봄 페스티벌"
}
대표 실패 응답:
{
"message":"입장 권한이 없습니다. (입장권이 없거나 만료/이미 사용됨)",
"status":409
}
5. 2 DB 결과
select id, user_id, concert_id, status
from booking
where concert_id=1;
결과:
id | user_id | concert_id | status
----------------------------------
4 | 2 | 1 | PENDING_PAYMENT
5 | 1 | 1 | PENDING_PAYMENT
5. 3 booked_count 확인
select booked_countfrom concertwhere id=1;
기대 결과 :
2
6️⃣ 결과 해석
6. 1 사용자별 중복 예약 방지
- user1 → 1건만 생성
- user2 → 1건만 생성
- 동일 사용자의 다중 요청은 추가 예약 생성되지 않음
👉 중복 방지 로직 정상 동작
6. 2 admitted 소비 로직 검증
- 각 사용자 admitted는 1회만 소비됨
- 이후 요청은 모두 409로 차단됨
👉 Redis admitted 기반 접근 제어 정상 동작
6. 3 동시성 제어 검증
- 총 50개의 동시 요청에도 불구하고
- 사용자별 1건씩만 예약 생성
👉 동시성 환경에서도 데이터 충돌 없이 처리됨
6. 4 데이터 정합성 검증
- booking 테이블: 총 2건 생성
- concert.booked_count: 2
👉 실제 데이터와 카운트 값이 일치
6.5 인증/인가 안정성
- JWT 기반 인증 정상 동작
- 미인증/잘못된 토큰은 401 반환
- 권한 없는 접근은 컨트롤러 진입 전에 차단
👉 Security 설정 개선 후 안정적으로 동작
7️⃣ 결론
본 테스트를 통해 다음을 확인하였다.
- 동일 사용자에 대한 중복 예약 요청은 정확히 1건만 처리됨
- 여러 사용자 동시 요청 상황에서도 각 사용자별로 1건씩만 예약 생성됨
- admitted 기반 접근 제어는 동시 환경에서도 정확히 동작함
- 예약 수와 카운트 값이 일치하여 데이터 정합성이 유지됨
- 보안 구조(JWT + Spring Security)는 500 오류 없이 안정적으로 동작함
👉 따라서 현재 예약 시스템은 다중 사용자 동시성 환경에서도 안정적으로 동작함을 확인하였다.
'프로젝트 > 공연 티켓팅 프로젝트' 카테고리의 다른 글
| 🎟️ Docker-compose up 한 번으로 실행되는 백엔드 만들기 (1) | 2026.05.18 |
|---|---|
| 🎟️ MySQL 인덱스 실험: 예약 만료 배치 쿼리 성능 개선 (10만 건 실험) (1) | 2026.05.13 |
| 🎟️ 결제 API는 정말 중복 결제를 막을 수 있을까? (1) | 2026.04.27 |
| 🎟️ Redis 입장권 기반 예약 시스템은 정말 중복 예약을 막을까? (0) | 2026.04.27 |
| 🎟️ 선착순 강의에서 공연 티켓팅으로 확장한 이유 (2) | 2026.04.17 |