스프링강의 66

BeanFactory, ApplicationContext

BeanFactory - 스프링 컨테이너의 최상위 인터페이스이다. - 스프링 빈을 관리 하고 조회하는 역할을 담당한다. - getBean()을 제공한다. ApplicationContext - BeanFactory 기능을 모두 상속받아서 제공한다. - 빈을 관리하고 검색하는 기능을 BeanFactory가 제공해 주는데, 그러면 둘의 차이는 뭘까? - 애플리케이션을 개발할 때는 빈은 관리하고 조회하는 기능은 물론이고, 수많은 부가기능이 필요하다.

스프링강의 2021.06.12

싱글톤 방식의 주의점

- 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful) 하게 설계하면 안된다. - 무상태(stateless)로 설계해야한다 - 특정 클라이언트에 의존적인 필드가 있으면 안된다. - 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다. - 가급적 읽기만 가능해야 한다. - 필드 대신에 자바에서 공유 되지 않는 지역변수, 파라미터, ThreadLocal 등을 사용해야한다. - 스프링 빈의 필드에 공유 값을 설정하면 정말 큰 장애가 발생할 수 있다.

스프링강의 2021.06.11

싱글톤 컨테이너

스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤(1개만 생성)으로 관리한다. 지금까지 우리가 학습한 스프링빈이 바로 싱글톤으로 관리되는 빈이다. 싱글톤 컨테이너 1. 스프링컨테이너는 싱글톤패턴을 적용하지 않아도 객체 인스턴스를 싱글톤으로 관리한다. 2. 스프링컨테이너는 싱글톤 컨테이너 역할을 한다. 이렇게 싱글톤 객체를 생성하고 관리하는 기능을 싱글톤 레지스트리라고 한다. 3. 스프링 컨테이너는 이런 기능 덕분에 싱글톤 패턴의 모든 단점을 해결하면서 객체를 싱글톤으로 유지할수 있다. 4. 싱글톤 패턴을 위한 지저분한 코드가 들어가지 않아도 된다. 5. DIP, OCP, 테스트, private 생성자로 부터 자유롭게 싱글톤을 사용할 수 있다. 스프링은 99프로 싱글톤방식으로 동..

스프링강의 2021.06.10

싱글톤 패턴

1. static영역에 객체 instance를 미리 하나 생성해서 올려둔다. 2. 이 객체 인스턴스가 필요하면 오직 getInstance() 메서드를 통해서만 조회 할 수 있다. 이 메서드를 호출 하면 항상 같은 인스턴스를 반환한다. 3. 딱 1개의 객체 인스턴스만 존재해야 하므로, 생성자를 private으로 막아서 혹시라도 외부에서 new 키워드로 객체 인스턴스가 생성되는 것을 막는다. 싱글톤 패턴의 문제점 1. 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. (싱글톤을 만들때마다 싱글톤 객체 만들고 함수만들고 하는걸 계속 만들어야함) 2. 의존간계상 클라이언트가 구체 클래스에 의존한다. - DIP를 위반한다. (구체클래스 에서 .getInstance()해서 꺼내야하기 때문) 3. 클라이언트가 구체..

스프링강의 2021.06.09