레디스 스핀락을 적용해서 동시성 제어를 진행중입니다.
스핀락을 통해 동시성 제어를 시도했으나, 실패.
10대 주차 가능한 주차장에 20개의 스레드가 동시에 입차를 요청시 15~19대의 차량이 입차에 성공
CPU과부하로 인한 redis 성능 저하로 동시성 처리 오류 → 20개의 스레드밖에 안보내서 아닐 것 같음
추가 문제 ->
위와같이 코드를 작성시 enter
내부 메서드 enterLogic
을 실행할때 Transaction이 실행되지 않고 무시되는것을 확인 할 수 있습니다. 그 이유는 **@Transactional
**은 Spring의 AOP를 이용하여 동작하는데 AOP는 프록시를 이용하여 메서드를 호출하며, 빈 인스턴스를 생성하는것으로 시작합니다. 따라서 **enter
**메서드에서 **enterLogic
**메서드를 호출하더라도, AOP가 적용되지 않으면 **@Transactional
**이 동작하지 않습니다.
따라서 enterLogic
메서드를 호출할때 별도의 트랜잭션 핸들러 클래스를 만들어 프록시 호출을 가능하게 만들었으며, **@Transactional
**이 정상 작동 할 수 있게 해주어야 합니다.