오늘은 스프링의 핵심 개념인 Singleton Design Pattern에 대해서 알아보도록 하겠습니다.
싱글톤 패턴을 설명하기 이전에..
- 스프링 프레임워크는 기업용 온라인 서비스 기술을 개발하는 것을 지원하기 위해 만들어졌습니다. 따라서 대부분의 스프링 애플리케이션은 웹 어플리케이션으로 구현이 되었지만, 최근에는 웹 어플리케이션이 아닌 플랫폼에서도 개발이 가능합니다.
- 웹 애플리케이션은 일반적으로 여러 고객이 동시에 서비스를 요청한다는 특성이 있습니다. 따라서 해당 서비스는 여러 고객이 동시다발적으로 요청하는 서비스를 메모리나, CPU자원적인 측면으로부터 효율적으로 처리해야할 필요성이 있습니다. (전체 서비스의 부하에 직접적인 영향을 미치기 때문이죠!)
싱글톤 패턴이란?
- DI컨테이너에 등록된 Bean(Class 설정정보)들의 인스턴스 객체, 즉 Class의 인스턴스가 딱 한 개만 생성되는 것을 보장하는 디자인 패턴입니다.
이렇게 설계를 하는 이유는 뭘까요??
- 예를들어 1000명의 Client(고객)이 서비스에 요청을 보낸다고 가정을 해봅시다! 그렇게 된다면 고객의 수에 따라 객체의 인스턴스가 생성이 된다면? 시스템에 부하가 커지게 되고, 결국엔 낮은 성능으로 이어지게 될 것입니다.
하지만 싱글톤 패턴을 적용한다면 하나의 객체 인스턴스를 여러 명의 사용자가 공유하기 때문에 동시에 요청을 보내오더라도 시스템은 성능저하의 위험이 상당 부분 해소되는 장점을 얻을 수 있습니다.
- 그렇기 때문에 많은 클라이언트의 요청에도 높은 성능으로 서비스를 지속 하거나, 서버의 확장에도 매우 자유로워집니다
단!! 싱글톤 객체는 서버측에서 클라이언트의 상태가 유지되는 stateful 방식이 아닌 stateless방식으로 설계되어야 합니다.
다음시간엔 스프링에서의 빈 등록을 담당하는 컴포넌트 스캔 방식에 대해서 설명하도록 하겠습니다!
'Frameworks > Spring Framework' 카테고리의 다른 글
Java Instant와 LocalDateTime 그리고 ZonedDateTime의 차이에 대해서 (0) | 2022.12.27 |
---|---|
[SpringBoot] Eclipse 사용시 Amateras ERD DDL Comment 생성 안되는 오류 (0) | 2021.12.14 |
[Spring Framework] 스프링의 원리, 컴포넌트 스캔에 대해서 (0) | 2021.03.22 |
[Spring Framework] SpringBoot를 이용한 정형화된 백엔드 시스템 개발 (0) | 2021.03.15 |