작성자 : 황지성
손님 입장 기능의 동시성 제어에 대한 고찰
서론
해당 기능에 동시성 제어가 필요한가?
- 손님 입장 기능에 정말 동시성 제어가 필요한가를 깊게 고민해보지 않고 동시성 제어를 해봐야 한다는 생각만을 가진 채 동시성 제어를 학습하고 적용해보았다. 적용하는 과정에서도 Java Spring에서 제공하는 기능들과 DB단에서 처리하는 방법, redis를 사용하는 방법 등 다양한 방법을 우선적으로 학습했지만 단순히 ‘redis의 redisson이 성능이 좋다!’라는 몇몇의 문서들을 읽은 후, ‘그럼 나도 redisson을 써야지!’라는 생각을 가졌고 이행했다.
- 위의 과정을 통해, 동시성 이슈를 redisson을 활용해 해결할 수는 있었지만 과정이 적절하지 못했고 그만큼 학습했던 각각의 기능들에 대한 이해가 부족했다. 이를 되풀이 하지 않기 위해 처음부터 다시 진행했다.
본론
‘해당 기능에 동시성 제어가 필요한가?’에 대해 생각해보고 답한다면 우선 내가 내린 답은 ‘필요하다!‘ 이다. 처음 생각할 때는 굳이 동시성 제어가 필요한 기능일까? 라고 생각했고 이유는 아래와 같다.
- 손님의 입장, 퇴장, 호출, 확인이라는 4가지 기능은 다수의 사용자가 사용하는 기능이 아닌 종업원 1명이 처리하는 기능이다.
- 다수의 사용자가 사용하는 기능이 아니기에 동시에 트랜잭션이 발생할 일이 없다.
위 2가지 이유로 동시성 제어가 필요없다고 생각했지만 해당 문장들에는 오류가 있다.
한명의 사용자가 사용하더라도 트랜잭션의 발생 간격을 짧게 한다면 동시성 문제가 충분히 생길 수 있다.
위에서 언급한 문제가 존재했기에 ‘동시성 제어는 필요하다.’는 결론을 내렸고 어떤 동시성 제어 기법을 사용할 지에 대해 생각해본 후, 적용했던 redisson이 적절한가에 대해 생각해보자.
순서를 조금 바꿔서 적용했던 redisson은 적절한가? 에 대해 먼저 생각해보자.