open:pro-spring-2.5

Pro Spring 2.5

대부분의 경우 어떤 인스턴스화 모드가 적당한지를 파악하는 것은 매우 쉽다. 일반적으로 싱글톤을 빈 기본 모드로 사요한다. 보통 싱그톤은 다음과 같은 경우에 사용해야 한다.

  • 상태가 없는 공유 객체 : 상태를 관리하지 않는 객체를 가지고 있고 의존 객체가 많다면 싱글톤을 사용하라. 상태가 없다면 동기화할 필요가 없기 때문에 의존 객체가 어떤 일을 할 때 매번 새로운 인스턴스를 만들 필요가 없기 때문이다.
  • 읽기전용 상태를 가진 공유 객체 : 이전 것과 비슷하지만 읽기전용 속성 같은 읽기전용 상태를 가진 경우이다. 이런 경우 여전히 동기화할 필요가 없기 때문에 매 요청마다 인스턴스를 생성하면 부가적인 오버헤드만 증가한다.
  • 공유 상태를 가진 공유 객체 : 상태를 반드시 공유해야 하는 빈을 가지고 있다면 싱글톤이 이상적인 선택이다. 이 때 상태 저장의 동기화는 간으한 다른 작업과 충돌 없이 독립적으로 이뤄지도록 해야 한다.
  • 쓰기 가능한 상태를 가진 처리량 많은 객체 : 애플리케이션에서 빈번하게 사용하는 빈을 가졌다면 싱글톤을 유지하고 빈에 대한 모든 쓰기 권한을 동기화 하여 수백 개의 빈 인스턴스를 생성하는 것보다 더 좋은 성능을 얻을 수 있다. 이런 방법을 사용하면 동기화는 지속성을 희생하지 않는 선에서 최대한 독립적으로 하라. 이 방법은 애플리케이션이 장시간 동안 여러 개의 인스턴스를 생성할 때와 공유하는 객체가 오직 약간의 쓰기 가능 상태를 가지고 있거나 새로운 인스턴스 생성 비용이 클 때 매우 유용하다.

비싱글톤은 다음과 같은 상황에서 사용을 고려해보자.

  • 쓰기 가능 상태를 가지고 있는 객체 : 여러 개의 쓰기 가능 상태를 가지고 있는 빈이 있다면 의존객체의 요청을 다룰 때 동기화 비용이 새로운 객체를 생성하는 비용보다 크다는 것을 알게 될지도 모른다.
  • 비공개private 상태를 가지고 있는 객체 : 어떤 경우 의존 객체가 해당 빈에 의존하는 다른 객체와 별도로 처리하기 이해 비공개 상태를 가지고 있는 빈을 필요로 할 수 있다. 이런 경우 싱글콘은 분명히 적절하지 않다.
애노테이션 설명
@Component 기본 스테레오타입으로 @Component 애노테이션을 붙인 클래스는 스프링빈이 된다.
@Controller 스프링은 @Controller 애노테이션을 붙인 클래스를 스프링 MVC 지원에서 컨트롤러로 사용한다.
@Repository @Repository 애노테이션을 가진 클래스는 저장소를 나타낸다. (예를 들어, 데이터 접근 객체)
@Service @Service 애노테이션은 애플리케이션에서 비즈니스 로직을 구현한 클래스에 붙인다.

  • open/pro-spring-2.5.txt
  • 마지막으로 수정됨: 2020/06/02 09:25
  • 저자 127.0.0.1