아래 내용들은 추후에 고도화 시, 수정 또는 논의가 필요한 내용들입니다. (현재는 반영되어있지 않습니다!)

실시간 경매 입찰

1. 동시성 이슈 - 구독자 수 제한 Soft Limit

1-1) 현재 설정

// TODO: 성능을 위해 엄격한 동기화 대신 soft limit 적용
// 동시 요청 시 소폭 초과 가능 - 멘토링 후 확인 예정
private void validateSubscriberLimit(Long auctionId) {
    int current = streamSupport.getAuctionSubscribers(auctionId);
    if (current >= MAX_SUBSCRIBERS_PER_AUCTION) {
        log.warn("경매 {} 구독자 수 한도 초과 - 현재: {}", auctionId, current);
        throw new CustomException(ErrorType.SERVICE_SUBSCRIBER_LIMIT_EXCEEDED);
    }
}

1-2) 문제 상황

요청 A: 999명 확인 → 통과
요청 B: 999명 확인 → 통과  (거의 동시에)
요청 A: 구독 → 1000명
요청 B: 구독 → 1001명  ← 초과!

1-3) 원인

1-4) 해결책

현재: Soft Limit 유지 (성능 우선)

장점 단점
락 없음, 빠름 ±10명 오차 가능
구현 간단 정확한 제한 불가

적합한 경우: UX 목적의 느슨한 제한, 초과해도 서비스 영향 없음

필요 시: Hard Limit (정확성 우선)

// Support에서 atomic하게 처리
public synchronized SseEmitter subscribeWithLimit(Long auctionId, Integer currentPrice, int maxSubscribers) {
    if (getAuctionSubscribers(auctionId) >= maxSubscribers) {
        throw new CustomException(ErrorType.SERVICE_SUBSCRIBER_LIMIT_EXCEEDED);
    }
    return subscribe(auctionId, currentPrice);
}

적합한 경우: 과금 기반, 라이선스 제한, 리소스 한계

1-5) 결론