스프링의 장점 중 하나인 빈을 싱글톤 레지스트리로 관리하는 것이 왜 장점인지에 대해 알아보자.
스프링은 was 시작과 동시에 Ioc컨테이너에 빈을 생성하고 관리한다.
이것을 싱글톤 레스지스트리로 관리한다고 한다.
왜 싱글톤 레지스트리로 관리하여 was 시작과 동시에 빈을 생성하는 것이 좋은것일까?
서버의 성능에 좋기 때문이다.
만약, 싱글톤으로 빈을 생성하지않고 매번 요청 시 마다 생성한다고 가정하자.
요청 하나당 5개의 객체를 생성하고 초당 500개의 요청이 올 경우 객체는 2500개를 생성하여 서버의 성능을 저하시키게된다.
싱글톤으로 bean을 생성하게되면, was시작시에만 생성이되고 요청이 계속들어오더라도 bean은 더이상 생성되지않기 때문에 성능을 높일 수있다.
스프링에서는 싱글톤 레지스트리를 사용한다고 했다.
여기서, 싱글톤 레지스트리와 자바의 싱글톤패턴과는 다르다.
싱글톤 레지스트리는 자바의 싱글톤패턴의 단점을 보완한것이라고 할 수 있다.
자바의 싱글톤패턴의 단점은 아래와 같다.
- private로 생성자를 지정하기 때문에, 상속되지 않아 다형성을 지원하지 않기때문에 객체지향적이지 못하다.
- static으로 지정하기 때문에, 전역상태로 사용이되어 아무 객체나 자유롭게 접근하고 수정하고 공유 할 수있는것은 객체지향프로그래밍에서 권장하지 않는 모델이다.
- 싱글톤으로 생성되면 객체테스트가 어렵기 때문에, 테스트를 위한 객체를 새로만들어야한다.
단점을 보완하기 위해 스프링은 싱글톤 레지스트리로 싱글톤 객체생성 관리를 하기때문에
객체에서는 싱글톤 생성과 관리를 할 필요가 없어져 평범한 객체로써 사용이 가능하다.(스프링의 POJO 기반)
평범한 객체로써 사용이 가능해지면서 아래와 같은 장점을 같게된다.
- 생성자를 public으로 지정 가능하여 객체를 객체지향적으로 프로그래밍 가능.
- static으로 지정할 필요없기 때문에 전역상태로 관리 되지않아도 된다.
- 테스트를 위해 해당객체를 그대로 사용가능하여 테스트에도 용이하다.(자바엔터프라이즈 환경에서는 가장중요)
이러한 스프링에 장점을 활용하여
초기에 설정하면 사용중에는 변하지않는 읽기전용 인스턴스 변수인경우에는
서버의 성능향상을 위해 bean으로 등록하고 사용하자.
'framework > spring' 카테고리의 다른 글
Spring Junit으로 DI 테스트하기 (0) | 2020.03.05 |
---|---|
MVC 개발 시 테스트 사항 (0) | 2020.02.29 |
JPA 도입 (0) | 2020.01.27 |
스프링 DB에 이미지 저장/조회 (0) | 2020.01.21 |
공통코드 관리 (0) | 2020.01.07 |