0%

200901 TIL

Spring Framework

  • 복잡한 부분은 구현이 거의 되어 있고, 필요한 부분 입맛에 맞게 구현 할 수 있다.
  • 엔터프라이즈급 어플리케이션을 구축할 수 있는 가벼운 솔루션이자, One-Stop-Shop(모든 과정을 한번에 해결 할 수 있다.)
  • 원하는 부분만 가져다 사용할 수 있도록 모듈화가 잘 되어 있다.
  • IoC container
  • 선언적으로 트렌적션을 관리할 수 있다.
  • 완전한 기능을 갖춘 MVC Framework을 제공
  • AOP 지원
  • Spring은 Domain 논리 코드와 쉽게 분리될 수 있는 구조로 되어 있습니다.

Container

  • Container는 instance의 생명주기를 관리한다.
  • 생성된 instance들에게 추가적인 기능을 제공한다.
  • Servlet class instance 화 하는 것을 tomcat이 대신 해준다.
  • WAS(tomcat)은 Servlet conatainer를 가지고, Servlet URL을 받으면 Servlet을 메모리에 올린 후 실행해준다.
  • Container는 보통 instance의 생명주기를 관리하며, 생성된 instance들에게 추가적인 기능을 제공하는 것을 말합니다.

Inversion of Control

  • 개발자는 프로그램의 흐름을 제어하는 코드를 작성한다. 그런데, 이 흐름의 제어를 개발자가 하는 것이 아니라 다른 프로그램이 그 흐름을 제허하는 것을 IoC라 말한다.
  • Servlet class는 개발자가 만들지만, 그 Servlet의 method를 알맞게 호출 하는것은 WAS
  • 개발자가 만든 어떤 class나 method를 다른 프로그램이 대신 실행하주는 것을 제어의 역전이라 한다.

Dependency Injection

  • DI는 class사이의 의존관계를 Bean설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말한다.
  • DI가 적용 안된경우:
    • 개발자가 직접 인스턴스를 생성한다
  • Spring에서 DI 가 적용 된 경우, container가 instance를 할당해 준다.
    • Inversion of control

Spring에서 제공하는 IoC/DI container

  • BeanFactory: IoC/DI에 대한 기본 기능을 가지고 있다.
  • ApplicationContext: BeanFactory의 모든 기능을 포함하고 개선된 버전
    • BeanPostProcessor: 컨테이너의 기본로직을 오버라이딩하여 인스턴스화와 의존성 처리 로직 등을 개발자가 원하는 대로 구현 할 수 있도록 합니다.
    • BeanFactoryPostProcessor: 설정된 메타 데이터를 커스터마이징 할 수 있습니다.

Bean class

  • 스프링에서는 객체를 다룰때 Single tone pattern을 이용한다.
  • 예전에는 Visual한 컴포넌트를 Bean이라고 불렀지만, 근래 들어서는 일반적인 Java 클래스를 Bean클래스라고 보통 부른다.
  • Bean class의 3가지 특징
    • 기본 생성자를 가진다.
    • field는 private하게 선언한다.
    • getter, setter메소드를 가진다.
    • getName(), setName() 메소드를 name property라 한다.
  • xml을 이용한 설정
  • Java Config를 이용한 설정
    • @Configuration
      • 스프링 설정 클래스를 선언하는 annotation
    • @Bean
      • bean을 정의하는 annotation
    • @Component
      • component 스캔의 대상이 되는 annotation 중 하나로써 주로 유틸, 기타 지원 클래스에 붙이는 annotation
    • @Autowired
      • 주입 대상이 되는 bean을 컨테이너에 찾아 주입하는 annotation
  • Sprint에서 사용하기에 알맞게 @Controller, @Service, @Repository, @Component annotation이 붙어 있는 객체들은 ComponentScan을 이용해서 읽어들여 메모리에 올리고 DI를 주입하도록 하고, 이러한 annotation이 붙어 있지 않은 객체는 @Bean annotation을 이용하여 직접 생성해주는 방식으로 클래스들을 관리하면 편리하다.