본문 바로가기

전체 글46

Spring Container - 싱글톤 컨테이너 Spring Container 는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 1개만 생성하고 관리한다. 지금까지 학습하고 사용한 Spring Bean 이 바로 싱글톤으로 관리되는 Bean 이다. Spring Container Spring Container 는 싱글턴 패턴을 따로 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리한다. Spring Container 는 싱글턴 컨테이너 역할을 한다. 이렇게 싱글턴 객체를 생성하고 관리하는 기능을 Singleton Registry 라고 한다. Spring Container 의 이런 기능 덕분에 싱글턴 패턴의 모든 단점을 해결하면서 객체를 싱글턴(단 1개의 인스턴스)으로 유지할 수 있다. 싱글턴 패턴을 위한 지저분한 코드가 들어가지 않아도 된다. (st.. 2020. 12. 4.
Singleton Container - 웹 애플리케이션과 Singleton Spring 은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생된 기술이었다. 대부분의 Spring Application 은 Web Application 이다. (물론 웹이 아닌 다른 애플리케이션(배치, 데몬) 개발도 얼마든지 개발할 수 있다.) 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 스프링이 아닌 순수한 DI 컨테이너인 AppConfig 는(싱글톤 구현이 아닌 경우) 위와 같이 여러 요청이 생길 때 마다 해당 서비스를 책임지는 객체 인스턴스를 매번 생성하는 문제가 발생한다. 만약 고객의 트래픽이 초당 100이 나온다면 초당 최소 100개의 객체가 생성되고 소멸된다. (의존 관계가 있는 경우 더 많을 수 있다.) 이는 곧 메모리 낭비로 이어지게 된다. (초당 요청 개수가 그렇게 .. 2020. 12. 2.
Spring Bean 설정 메타 정보 - BeanDefinition 지난 게시글 "Spring 의 다양한 설정 형식 지원 편" 에서는 Spring 이 단순 자바 코드 뿐만 아니라, XML, Groovy 등 다양한 설정 형식을 지원하는 것을 알아보았다. 이번 게시글에선 어떻게 Spring 이 유연하게 다양한 설정 형식들을 지원할 수 있는지에 대해 알아볼 것이다. 먼저, 그 결론부터 말하자면 핵심은 "BeanDefinition" 라는 추상화 이다. 쉽게 이야기하면, Spring AOP 나 관심사의 분리 에서 말했 듯이 역할과 구현을 개념적으로 나눈 것을 의미한다. Spring 은 설정 파일 (자바, XML, Groovy 등)을 읽어 BeanDefinition 을 만들기만 하면 된다. 그리고 Spring Container 는 이것이 자바 코드로 만든 것인지, 아니면 XML 로.. 2020. 12. 1.