Spring framework의 싱글턴 인스턴스에 대한 동시다중액세스 상황과 관련하여 생각해 봄직한 의문..

  • Post author:
  • Post category:
  • Post comments:0 Comments
  • Post last modified:December 7, 2020

참고 : http://stackoverflow.com/questions/4617437/when-multiple-access-spring-singleton-instance-at-same-time

Springframework의 bean 객체는 기본적으로 싱글턴 인스턴스를 갖습니다(물론 변경도 가능합니다!). 이 싱글턴 객체에 대해 액세스가 동시에 무한히 증가하는 상황이라면 어떻게 될까? 라는 의문을 갖게 된적이 있었는데 이런 상황에 대해 정리를 한번 해보고자 합니다.

생각해 보고자 한 상황을 정리해 보면 다음과 같습니다.

  • Spring framework에서 서비스 객체를 싱글턴 스콥으로 설정하고 컨트롤러에서 DI(Dependency Injection)를 통해 객체를 생성하였을 때 해당 싱글턴 객체에 동시에 다수의 사용자가 접근을 시도하면 충톨이 발생하거나 하는 염려는 없나? 그게 아니라면 IoC(Inversion of Control) 컨테이너가 좀더 나중에 호출 된 작업을 앞서 호출된 작업이 완료될 때 까지 기다렸다가 호출하는 것 인가? 만약 이게 맞다면 퍼포먼스에 심각한 영향을 주는것은 아닌가?

이에 대한 답변은 다음과 같습니다.

  • 싱글턴 객체는 동시에 수차례 액세스 될 수 있습니다. 그리고 이러한 상황에서 충돌을 피하기 위해 thread-safe 하게 만들어져야 합니다. 만약 해당 빈이 thread-safe 하지 않다고 판단되면 싱글턴 스콥이 아닌 다른 영역을 사용하는 것을 고려해야 할 것 입니다.

결론은 thread-safe하게 코드를 작성하는게 프로그램의 동시성(Concurrency)을 보장해준다는 것을 알게 되었는데 만약 이런 것이 여의치 않은 상황에서의 조치나 thread-safe한 프로그램의 요건들이 또 다른 연구 과제로 남게된 것 같습니다 🙂

Author Details
Linus Lee aka y1sh former ATiMania.com sysop during 2001-2012. DevSecOps Engineer who likes tech, science, programming and solving problems 🙂
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments