
📌 대량의 사용자들이 동시에 예매 서비스를 통해 접속 시도?
- 동시에 접속을 시도하는 사용자가 많을 경우: 대기번호 부여
- 대기번호를 부여하지 않을 경우 발생할 수 있는 문제점💥
- 유저를 한번에 받게 되면 수용 불가능한 트래픽이 들어오게 되고, 서버가 죽게 되어 접근 자체가 안되는 문제 발생
- 수용 불가능한 트래픽 인입으로 요청된 예매 서비스 외의 서비스까지 부하를 줄 수 있다.
- 이렇게 되면, 서버를 늘려야 하는데, 시간과 자원이 필요함
- 대기번호를 부여하지 않을 경우 발생할 수 있는 문제점💥
여러 사이트를 참고해본 결과,
1. 낙관적 락
2. 비관적 락
3. Redis 분산 락
3가지가 있었다.
그중 현재 프로젝트에 제일 적합하다고 생각한 비관적 락을 사용해서 예매 서비스 기능을 구현해볼 예정이다.
본인이 동시성 제어를 구현하는 가장 큰 이유는, 데이터의 무결성을 보장하고자 하는 이유가 가장 크다.
비관적 락을 사용하게 되면 데이터의 일관성을 보장할 수 있고, 트랜잭션 충돌을 방지할 수 있다.
❓ 그렇다면 낙관적 락, 분산 락을 사용할 수도 있지 않나? 라는 질문을 들을 수 있다.
그러나 티켓 예매는 단시간에 많은 사용자가 몰려 충돌이 발생할 가능성이 높은 서비스이다. 이렇게 충돌이 자주 발생할 경우 낙관적 락보다 비관적 락이 더 유리하기에 낙관적 락을 배제했다.
또한, 현재 프로젝트 환경은 분산 DB 환경이 아니기 때문에 동시성 제어만을 위해 redis 운영 비용을 추가하는 건 비효율적이라는 생각이 들었기에 Redis 분산 락도 배제했다.
😢 그러나 비관적 락의 경우, 모든 트랜잭션에 락을 사용하기 때문에 락이 필요하지 않는 상황에서도 무조건 락을 걸기 때문에 성능상의 문제가 발생할 수 있다.
추후 Spring JPA를 활용하여 비관적 락을 사용해서 동시성 제어를 해볼 예정이다.
'Spring Boot > PJT' 카테고리의 다른 글
[파이널 프로젝트] GitHub The requested URL returned error: 403 Push 에러 해결 방법 (0) | 2024.07.12 |
---|---|
[파이널 프로젝트] 영화예매 사이트 - ERD 설계 (0) | 2024.07.11 |
[파이널 프로젝트] 영화예매 사이트 - 기능명세서, 유저플로우차트 작성 (2) | 2024.07.06 |