본문 바로가기

카테고리 없음

[spring] Bean 과 Spring

 

1. bean 사용 이유

 

  1. 객체 갯수
    만약, 싱글톤으로 빈을 생성하지않고 매번 요청 시 마다 생성한다고 가정하자.싱글톤으로 bean을 생성하게되면, was시작시에만 생성이되고 요청이 계속들어오더라도 bean은 더이상 생성되지않기 때문에 성능을 높일 수있다.

  2. 요청 하나당 5개의 객체를 생성하고 초당 500개의 요청이 올 경우 객체는 2500개를 생성하여 서버의 성능을 저하시키게된다.
  3. 웹 프로그래밍은 멀티유저에 대한 동시성 제어가 중요하며 이를 위해 스프링 컨테이너에서는 싱글톤 패턴(Singleton Pattern)으로 관리한다.
    Singleton Pattern - 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이며 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.

 

 

 

2. bean 과 스프링 - 히스토리

 

  1. 일반 버전
    일반적으로 처음에 배우는 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업(객체를 직접 생성하여 메소드 호출)을 했습니다. 즉, 모든 작업을 사용자가 제어하는 구조였습니다. 예를 들어 A 객체에서 B 객체에 있는 메소드를 사용하고 싶으면, B 객체를 직접 A 객체 내에서 생성하고 메소드를 호출합니다.
     
  2. 옛날 버전
     개발자들의 의견을 받아 처음에는 xml 기반으로 객체를 빈으로 등록하였지만 현재는 구글 guice에서 사용한 어노테이션 기반의 Bean등록 방법이 선호됨
  3. 스프링 버전
    의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법 

  4. 하지만 IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡깁니다. 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 됩니다. 즉, 사용자의 제어권을 다른 주체에게 넘기는 것을 IOC(제어의 역전) 라고 합니다.

 

 

3. bean 과 스프링 - spec

  1. 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