곧 대형 콘서트 티켓 오픈을 앞두고 있어요. 남은 좌석 안에서만 예매가 되고, 어떤 경우에도 재고보다 많이 팔리면 안 돼요. reserve(count) 예매 처리를 완성하세요. Note: 티켓 오픈 때는 여러 예매 요청이 동시에(한 프로세스 안에서 비동기로) 들어옵니다.
NestJS 로 콘서트 좌석 예매 API 를 만드는 문제입니다. 남은 좌석 안에서만 예매가 되고, 어떤 경우에도 재고보다 많이 팔리면 안 됩니다. 티켓 오픈 때 여러 요청이 단일 프로세스 내에서 동시에 들어오는 상황을 가정하고 reserve(count) 예매 처리를 완성합니다. 재고는 인메모리 저장소를 유일한 진실의 원천으로 씁니다.
이 문제는 여러 요청이 동시에 같은 재고를 두고 다툴 때 API 가 어떻게 동작해야 하는지를 다룹니다. 좌석·잔액·포인트·쿠폰처럼 한 숫자를 여러 요청이 동시에 겨루는 자원에서는, 한 요청씩 처리할 때는 멀쩡해 보여도 한꺼번에 몰리는 순간이 진짜 시험대가 됩니다. 이런 코드를 검증할 때는 단일 요청만 보지 말고, 초기 재고 수량을 웃도는 요청을 한꺼번에 보낸 뒤 성공 합계가 초기 재고를 넘지 않는지 확인하는 습관이 중요합니다.