기본적으로 수강신청 과정은 다음과 같습니다.
1. 학생이 특정 강의 수강신청 시 수강신청 대기 생성
2. 강사가 수강신청 승낙 시 해당 강의에 대한 수강신청 대기 상태를 승낙 상태로 변경
3. 승낙 상태로 변경된 수강신청 대기에 대한 수강등록 생성
그림으로 보면 다음과 같습니다.

학생 A가 강사 B의 강의를 수강신청 했을 때, 다음과 같은 추가 상황이 발생할 수 있습니다.
1. 학생이 수강을 신청한 내역이 강사에 의해 승낙되었을 경우
- 학생이 해당 강의를 수강
- 학생이 해당 강의 수강을 취소
2. 학생이 수강을 신청한 내역이 강사에 의해 거절되었을 경우
- 학생이 해당 강의를 재신청
3. 학생이 수강을 신청한 내역을 취소하고자 할 경우
- 미승낙 수강신청 요청을 취소
이때 일반적인 강의에 대한 여러 신청, 취소, 수락, 거절 등 각각의 상황에 대해서는 학생이 요청을 하면 대기 중인 신청의 상태로 저장하고 이후 해당 강의의 강사가 대기 중인 요청을 확인하고 적절한 작업을 할 수 있어서 동시성과 관련한 이슈는 없습니다.
# 고민 사항 ..!
그러나, "현우진의 선착순 100명 특별 강의 개설 !!"과 같은 상황에서는 '선착순'이라는 특수한 상황 때문에 수강신청 요청을 대기 중인 것으로 고려하지 않고 바로 수락되도록 만들어야 합니다. 이때 싱글 쓰레드로 동작하는 단일 서버에서는 문제가 없겠지만 단일 서버에서도 멀티 쓰레드로 동작하거나 다중 서버(싱글 쓰레드, 멀티 쓰레드 전부 문제)에서는 동시성 이슈가 발생할 수 있습니다.
이러한 문제는 특강 수강정원 동시성 문제 해결에서 조금 더 자세히 다뤄 보도록 하겠습니다.
'SSA > Back' 카테고리의 다른 글
| [SSA] Redis의 특징을 활용한 동시성 제어 (Redis 분산 락 아님) (0) | 2025.09.13 |
|---|---|
| [SSA] 특강 개설 시 선착순 동시성 이슈 해결 (2) | 2025.09.10 |
| [SSA] 락의 종류와 활용 가능한 상황 (0) | 2025.09.09 |
| [SSA] Kafka Consumer가 멱등성을 가질 수 있도록 설계 (0) | 2025.09.09 |
| [SSA] 수강 기능, 알림 기능을 이벤트 기반으로 분리 (0) | 2025.09.09 |