티스토리 뷰
오늘은 트러블 슈팅에 대해서 포스팅 하려고 합니다.
[문제 상황]
비관적 락을 사용해서 좌석 예약시 동시성 제어를 할 수 있도록 프로그램을 개발했습니다.
그러나 5개명의 사용자가 1개의 좌석 예약을 했을 때, 5명 모두 좌석 예약에 성공하는 현상이 발생했습니다.
이론상 1개의 좌석이 먼저 선점되어 예약이 되면 나머지 4명은 좌석 예약 불가해야 합니다.
[문제가 발생한 코드]
/** 좌석 예약 */
@Transactional
public ReservationResponse reserve(ReservationRequest request) {
// 1. 사용자를 조회한다.
User user = userManager.findUserById(request.getUserId());
if(user == null) {
throw new RuntimeException("[좌석 예약] 존재하지 않는 사용자입니다.");
}
Concert concert = concertManager.findConcertByConcertId(request.getConcertId());
// 3. occupy에서 좌석을 비관적락으로 잠그고, 트랜잭션 처리를 한다.
이 부분이 원인 => SeatP seat1 = seatManagerP.findSeatPBySeatId(request.getSeatP().getSeatId());
SeatP occupiedSeat = seatManagerP.occupy(request.getSeatP().getSeatId(), user);
ReservationRequest reservationRequest = new ReservationRequest(user, concert, occupiedSeat);
Reservation reservation = reservationManager.reserve(reservationRequest);
return ReservationResponse.fromP(reservation.getConcert().getConcertId(),
reservation.getUser().getUserId(),
occupiedSeat.getSeatNo(),
occupiedSeat.getTempReservedExpiredAt());
}
}
'항해플러스백엔드' 카테고리의 다른 글
[트랜잭션 분리] 트랜잭션 분리를 통한 개선 (0) | 2024.05.12 |
---|---|
[대기열 구현] Redis를 이용한 대기열 설계 (2) | 2024.05.12 |
[INDEX] 콘서트 예약시스템 인덱스 성능비교 (0) | 2024.05.06 |
[동시성 제어] 콘서트 예약시스템 동시성 프로그래밍 비교 (0) | 2024.05.06 |
[플러스백엔드] 6주차(CI/CD) 회고 (0) | 2024.04.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 열반스쿨기초반
- 항해솔직후기
- front
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- 월급쟁이부자들
- 부동산공부
- push_back
- GIT
- docker
- 유즈케이스
- 내년은 빡세게!!
- 파라메터
- 깃
- 2023년
- Spring boot
- resize
- 폭포수
- Inception
- 관계대수
- pop_back
- 깃허브
- 개발자 회고
- 항해플러스후기
- 항해플러스백엔드
- 월부닷컴
- github
- Use case
- 도커
- 재테크공부
- 인셉션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함