채번테이블에서 가져온 pk중복오류 대응, 즉 동시성 제어로 활용한 싱글톤 방법은 알고보니 동시성 제어와 아무런 연관이 없었다.
물론 싱글톤을 활용한 동시성 제어 방법이 있을 수는 있겠지만, 11.003TPS 자체가 싱글톤으로 채번값을 유일인자로 확보하겠다는 나의 방법을 적용하기에 "운좋게" 적정한 수치였고, 트래픽이 더 높아진다면 꼼짝없이 다른 방법을 찾아야 했다.
여기서 얻은 영감과 통찰력을 기억하기 위해 본 글을 기록한다.
결과적으로 singleton은 동시성 제어 방법이 아니다. 정확하게 말하면 그리 좋은 선택지는 아니다.
singleton은 멀티스레드 환경에서 비동기처리를 진행할때, 최초 접근 자원의 일관성을 유지하기 위해 사용할 수는 있다.
동시성 제어는 비동기처리와는 다른 개념이다. 애초에 단일 스레드 환경이기도 하고, 멀티스레드를 사용한다 하더라도 이는 하나의 자원을 위한 처리 방법이다. 내가 생각했던 자원은 사용자의 다수 접근 이에 따라 자원이 각각 다른 상태로 읽히는 것을 걱정하였는데 처음부터 잘못된 접근이었다.
또한 채번값과 같은 필드 변수보다는 처리하고자 하는 정보, 즉 dto를 싱글톤으로 접근하는 것이 맞다.
가장 통상적인 방법은 db를 이용하는 방법이다. 그런데 멀티스레드 환경과 조합해서 rdbms에서 제공하는 동시성 제어 기능을 적절히 혼합해서 사용해야 한다.
이 모든 문제상황들은 기본적으로 db에서 제공하는 기능들을 활용하였다.
이에 대한 과정은 이후에 더 자세히 기술하도록 한다.