1. bean 사용 이유
- 객체 갯수
만약, 싱글톤으로 빈을 생성하지않고 매번 요청 시 마다 생성한다고 가정하자.싱글톤으로 bean을 생성하게되면, was시작시에만 생성이되고 요청이 계속들어오더라도 bean은 더이상 생성되지않기 때문에 성능을 높일 수있다. - 요청 하나당 5개의 객체를 생성하고 초당 500개의 요청이 올 경우 객체는 2500개를 생성하여 서버의 성능을 저하시키게된다.
- 웹 프로그래밍은 멀티유저에 대한 동시성 제어가 중요하며 이를 위해 스프링 컨테이너에서는 싱글톤 패턴(Singleton Pattern)으로 관리한다.
Singleton Pattern - 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이며 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.
2. bean 과 스프링 - 히스토리
- 일반 버전
일반적으로 처음에 배우는 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업(객체를 직접 생성하여 메소드 호출)을 했습니다. 즉, 모든 작업을 사용자가 제어하는 구조였습니다. 예를 들어 A 객체에서 B 객체에 있는 메소드를 사용하고 싶으면, B 객체를 직접 A 객체 내에서 생성하고 메소드를 호출합니다.
- 옛날 버전
개발자들의 의견을 받아 처음에는 xml 기반으로 객체를 빈으로 등록하였지만 현재는 구글 guice에서 사용한 어노테이션 기반의 Bean등록 방법이 선호됨 - 스프링 버전
의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법 - 하지만 IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡깁니다. 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 됩니다. 즉, 사용자의 제어권을 다른 주체에게 넘기는 것을 IOC(제어의 역전) 라고 합니다.
3. bean 과 스프링 - spec
- bean 과 스프링
Spring에서는 Spring Container, IoC Container라는 개념을 사용한다.
Container는 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것이다.
즉 Container는 개발자가 작성한 코드의 처리과정을 위임받은 독립적인 존재라고 생각하면 된다.
Container는 적절한 설정만 되어있다면 누구의 도움 없이도 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤해준다.
Spring Container는 Spring Framework의 핵심부에 위치하며, 종속 객체 주입을 이용하여 Application을 구성하는 Component들을 관리한다.
이때 Spring Container에서 생성되는 객체를 Bean이라고 한다.
https://velog.io/@gillog/Spring-Bean-%EC%A0%95%EB%A6%AC