Spring Boot/PJT

[파이널 프로젝트] 영화 예매 트래픽 구현 고민

코맹 2024. 7. 16. 15:03

 

 

 

📌 대량의 사용자들이 동시에 예매 서비스를 통해 접속 시도?

  • 동시에 접속을 시도하는 사용자가 많을 경우: 대기번호 부여
    • 대기번호를 부여하지 않을 경우 발생할 수 있는 문제점💥
      • 유저를 한번에 받게 되면 수용 불가능한 트래픽이 들어오게 되고, 서버가 죽게 되어 접근 자체가 안되는 문제 발생
      • 수용 불가능한 트래픽 인입으로 요청된 예매 서비스 외의 서비스까지 부하를 줄 수 있다.
      • 이렇게 되면, 서버를 늘려야 하는데, 시간과 자원이 필요함

 

여러 사이트를 참고해본 결과,

1. 낙관적 락
2. 비관적 락
3. Redis 분산 락

3가지가 있었다.

 

 

그중 현재 프로젝트에 제일 적합하다고 생각한 비관적 락을 사용해서 예매 서비스 기능을 구현해볼 예정이다.

 

본인이 동시성 제어를 구현하는 가장 큰 이유는, 데이터의 무결성을 보장하고자 하는 이유가 가장 크다.

비관적 락을 사용하게 되면 데이터의 일관성을 보장할 수 있고, 트랜잭션 충돌을 방지할 수 있다.

 

❓ 그렇다면 낙관적 락, 분산 락을 사용할 수도 있지 않나? 라는 질문을 들을 수 있다.

그러나 티켓 예매는 단시간에 많은 사용자가 몰려 충돌이 발생할 가능성이 높은 서비스이다. 이렇게 충돌이 자주 발생할 경우 낙관적 락보다 비관적 락이 더 유리하기에 낙관적 락을 배제했다.

또한, 현재 프로젝트 환경은 분산 DB 환경이 아니기 때문에 동시성 제어만을 위해 redis 운영 비용을 추가하는 건 비효율적이라는 생각이 들었기에 Redis 분산 락도 배제했다.

 

😢 그러나 비관적 락의 경우, 모든 트랜잭션에 락을 사용하기 때문에 락이 필요하지 않는 상황에서도 무조건 락을 걸기 때문에 성능상의 문제가 발생할 수 있다.

 

 

추후 Spring JPA를 활용하여 비관적 락을 사용해서 동시성 제어를 해볼 예정이다.