✅ 싱글톤(Singleton)의 정확한 의미
애플리케이션 전체에서 객체 인스턴스가 딱 하나만 생성되고, 모든 곳에서 그 하나만 공유해서 사용하는 패턴
❗ 오해하기 쉬운 개념
❌ 오해: "요청마다 하나씩 객체가 생기면 그게 싱글톤 아닌가요?"
✔️ 정확히는: 그건 요청 스코프입니다. 싱글톤은 요청과 상관없이 객체가 딱 하나만 존재하는 겁니다.
지금 까지 싱글톤은 요청마다 하나씩 생기는줄 알았는데
그게 아니라, 어플리케이션 전반으로 딱 하나만 생기고 여러 사용자가 그 빈을 공유해서 사용하는것이다.
즉, 여러 쓰레드가 동시에 사용하므로 멤버변수(필드) 에 여러 쓰레드가 접근할 가능성이 있다.
이를 방지하기 위해 동기화 기법이 필요한것이다.
그리고 요청마다 하나가 생기는건 요청 스코프이다."
예를들어 즉, HttpServletRequset, HttpServletResponse는 사용자 하나의 요청마다 한개씩 생성이 되기 때문에 쓰레드간 충돌에 대해서 안전하다.
** HttpServletRequset, HttpServletResponse 는 "빈"은 아니지만 마친 요청 스코프 빈 처럼 작동한다고 이해하면된다.
WAS 중의 하나인 톰캣이 요청마다 하나씩 생성해준다고 생각하면된다.(싱글톤은 그냥 하나를 여럿이서 공유해서 사용하는 개념)