웹 어플리케이션과 싱글톤 패턴
보통 웹 어플리케이션에서는 여러 고객이 동시에 요청을 보내는 경우가 많다.
만약 한 고객마다 서비스를 담당하는 객체를 새로 생성하면 어떻게 될까?
TPS가 많은 서비스라면 엄청난 메모리 비용이 생길 것이다.
이를 해결하기 위해 해당하는 객체를 하나만 생성하고 이를 여러 프로세스에서 공유하도록 설계하면 된다.
싱글톤 패턴
싱글톤 패턴이란 클래스의 인스턴스가 1개만 생성되도록 보장하는 디자인패턴이다.
코드를 사용해서 알아보자.
public class Singleton {
private static final Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
private Singleton(){
}
public void logic(){
System.out.println("싱글톤 객체");
}
}
생성자를 private으로 막음으로써 외부에서 객체를 생성할 수 없게된다. 외부에서 해당 클래스를 사용하고 싶다면 getInstance()함수로만 접근할 수 있다.
해당 클래스 객체를 하나만 쓰게되므로 메모리 측면에서 크게 아낄 수 있다.
싱글톤 패턴의 단점?
물론 싱글톤 패턴의 단점또한 존재한다.
- 싱글톤 패턴을 구현함으로써 코드가 길어질 수 있다.
- 안티패턴이라고도 불리며 객체지향프로그래밍에 위반될 수 있다.
- 의존관계상 클라이언트가 구체 클래스에 의존한다. -> DIP 위반
- 내부 속성을 변경하거나 초기화하기 어렵다.
결론적으로 위와 같은 문제점 등으로 유연성이 떨어지게 된다.
왜 스프링을 사용하는가?
스프링 프레임워크를 사용함으로써 위에 적은 단점을 모두 커버할 수 있다. 스프링 컨테이너에 의해 생성된 빈은 기본적으로 애플리케이션 전체에서 하나의 인스턴스만 존재하게 된다. 물론 객체지향프로그래밍 SOLID에 위반되지도 않으며 지저분한 코드를 더 작성할 필요가 없다.
'백엔드' 카테고리의 다른 글
| Polling, Long Polling, SSE 등 이벤트 처리 (0) | 2025.05.17 |
|---|