실시간 좌석 예약
이라는 가상의 상황에서, 락을 활용하여 동시성을 제어하는 서비스를 구현해보았다.
아래 5가지의 상황에 따라 서로 다른 결과가 도출되는 지 통합 테스트를 통해 확인해보도록 할 것이다.
이론에 관한 내용들은 아래 페이지를 참고하자.
30개
존재하고, 선착순으로 예약 하여야 한다. 즉, 동시에 예약 요청이 온다면 가장 먼저 요청한
유저의 예약이 확정된다.Test에 필요한 최소한의 기능들을 구현 해보았다.
public class Seat {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long quantity;
public void decreaseReserve() {
this.quantity--;
}
@OneToMany(mappedBy = "seat", cascade = CascadeType.ALL, orphanRemoval = true)
private List<User> userList = new ArrayList<>();
public void addUser(User user){
userList.add(user);
user.setSeat(this);
}
}