Springframework의 bean 객체는 기본적으로 싱글턴 인스턴스를 갖습니다(물론 변경도 가능합니다!). 이 싱글턴 객체에 대해 액세스가 동시에 무한히 증가하는 상황이라면 어떻게 될까? 라는 의문을 갖게 된적이 있었는데 이런 상황에 대해 정리를 한번 해보고자 합니다.
생각해 보고자 한 상황을 정리해 보면 다음과 같습니다.
- Spring framework에서 서비스 객체를 싱글턴 스콥으로 설정하고 컨트롤러에서 DI(Dependency Injection)를 통해 객체를 생성하였을 때 해당 싱글턴 객체에 동시에 다수의 사용자가 접근을 시도하면 충톨이 발생하거나 하는 염려는 없나? 그게 아니라면 IoC(Inversion of Control) 컨테이너가 좀더 나중에 호출 된 작업을 앞서 호출된 작업이 완료될 때 까지 기다렸다가 호출하는 것 인가? 만약 이게 맞다면 퍼포먼스에 심각한 영향을 주는것은 아닌가?
- 싱글턴 객체는 동시에 수차례 액세스 될 수 있습니다. 그리고 이러한 상황에서 충돌을 피하기 위해 thread-safe 하게 만들어져야 합니다. 만약 해당 빈이 thread-safe 하지 않다고 판단되면 싱글턴 스콥이 아닌 다른 영역을 사용하는 것을 고려해야 할 것 입니다.
댓글 없음:
댓글 쓰기