Spring(89)
-
[Spring] 싱글톤 컨테이너에 대한 나름의 이해
스프링 컨테이너 = 싱글톤 컨테이너 but 싱글톤 뿐만 아니라 요청마다 객체를 만들게도 할 수는 있다. 하지만 거진 사용 안한다. 이렇게 싱글톤 객체를 생성하고 관리하는 것을 싱글톤 레지스트리라고 한다. 싱글톤 패턴의 문제였던, private 생성자, DIP 위반, OCP 위반을 해결하여 효율성을 유지할 수 있다. Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8&unitId=55363 학습 페이지 www.inflearn.com
2023.09.22 -
[Spring] Singleton 패턴과 문제점
Singleton 패턴을 활용하면 클래스 당 하나의 객체만 공유하도록 만들어 메모리 부담을 줄일 수 있다. package hello.core.singleton; public class SingletonService { private static final SingletonService instance = new SingletonService(); public static SingletonService getInstance() { return instance; } private SingletonService(){ } public void logic() { System.out.println("싱글톤 객체 로직 호출"); } } 하지만 다양한 문제도 가진다. 1. 싱글톤 패턴 구현에는 추가적인 코드가 들어간다..
2023.09.21 -
[Spring] 스프링 없는 순수한 DI 컨테이너의 문제점
고객이 요청할 때마다 새로운 객체를 만들어서 반환한다. 동시에 100개의 요청이 들어오면 100개의 객체가 만들어진다. 인자로 객체가 주어져야 한다면 생성 객체수는 기하급수적으로 늘어난다. 이렇게 되면 메모리 낭비가 생기는 문제가 발생한다. 더 효율적인 방법이 필요하다. 이게 싱글톤 컨테이너이다. Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8&unitId=55361 학습 페이지 www.inflearn.com
2023.09.21 -
[Spring] BeanDefinition에 대한 나름의 이해
BeanDefinition은 설정 정보로부터 읽어온 bean의 메타 데이터를 추상화한다. ApplicationContext interface는 getBeanDefinitionNames() method가 없다. 컨테이너에 bean을 등록하는 방법에는 크게 두가지가 있다. 직접적으로 bean을 등록하는 방법이 있고 factoryBean을 통해 등록하는 방법이 있다. AppConfig.class와 같이 자바로 설정정보를 저장하면 factoryBean을 통해 등록한다. factoryBeanName=appConfig가 되고 factroyMethodName은 config 파일 내에 있는 method의 이름(빈의 이름)이 된다. xml로 하게 되면 factoryBean을 이용하지 않는다. beanDefinitionN..
2023.09.21 -
[Spring] xml 설정 정보에 대한 나름의 이해
Spring은 Java를 통한 Annotation 설정뿐만 아니라 xml 설정과 커스텀 설정도 지원한다. xml의 경우 GenericXmlApplicationContext 클래스를 통해 할 수 있고 인자로 xml 파일을 넣어주면 된다. xml 파일은 다음과 같다. bean 안에는 이름인 id와 구현체인 class 값을 넣어준다. 인자는 constructor-arg를 통해 전달하는데 name은 생성자에 들어가는 매개변수를 뜻하며 넣고자 하는 매개변수의 이름과 일치해야 한다. ref는 인자값을 의미하게 된다. 즉 name은 OrderServiceImpl 생성자에 들어가는 매개변수 이름 중 하나이며 ref는 거기에 들어가는 인자이자 bean의 이름이다. 하지만 ref에 있는 memberRepository는 넣..
2023.09.20 -
[Spring] BeanFactory와 ApplicationContext에 대한 나름의 이해
BeanFactory는 bean을 관리하고 조회할 수 있는 기능을 제공한다. 컨테이너의 최상위 인터페이스이다. 인터페이스인 ApplicationContext는 BeanFactory를 상속받는다. 따라서 관리하고 조회할 수 있는 기능 + 부가기능들을 갖는다. 부가기능으로는 메세지소스를 활용한 국제화 기능(MessageSource), 환경변수(EnvironmentCapable), 애플리케이션 이벤트(ApplicationEventPublisher), 편리한 리소스 조회(ResouceLoader)가 있다. ApplicationContext도 SOLID 중 네번째인 인터페이스 분리 원칙(Interface Segregation Principle - ISP)를 적용하여 방금 전의 인터페이스들로 나누어져 있다. Ref..
2023.09.20