개발

토비의 스프링3.1 Vol.2 스프링의 기술과 선택 요야깅

wannabenomad 2018. 8. 6. 17:46
  • 들어가며
    • 스프링이란 무엇인가?
      • 애플리케이션의 기본 틀 > 스프링 컨테이너
        • 스프링 컨테이너 또는 애플ㅁ리케이션 컨텍스트 > 설정정보를 참고로 구성 오브젝트를 생성, 관리
        • 공통 프로그래밍 모델 > IoC/DI, 서비스 추상화, AOP
          • IoC/DI > 오브젝트의 생명주기와 의존관계 모델
          • 서비스 추상화 > 구체적 기술, 환경에 종속적이지 않도록 유연한 추상 계층 두어야
          • AOP > 애플리케이션 코드에 산재한 (수평적 관심사가 동등한) 부가적 기능을 독립적으로 모듈화
        • 기술 API > JavaEE 기반
    • 스프링의 성공요인
      • 단순함 > POJO 지향
      • 유연성 > 서드파티 프레임워크의 다양함, 스프링을 필요에 맞게 확장하여 자신만의 프레임워크를 만들어 사용할 수 있어야한다.
    • 스프링 학습과 활용의 어려움 > 순서대로 스프링의 핵심 가치와 원리에 대한 이해를 가지고 스프링의 기술에 대한 지식과 선택 기준을 정립, 스프링의 적용과 확장이 필요
    • 스프링 3.1 기준으로 공부를 하고 있으니 스프링 3.0 > 4.0 > 5.0에 이르기까지 달라진 기능과 추가된 기능을 숙지할 것.

  1. IoC 컨테이너와 DI
    1. IoC 컨테이너: 빈 팩토리와 애플리케이션 컨텍스트(interface BeanFactory, interface ApplicationContext는 BeanFactory 상속한 서브인터페이스) 
      1. 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당
      2. 스프링컨테이너(애플리케이션 컨텍스트)는 단순 DI 작업+엔터프라이즈앱개발 위한 여러 컨테이너 기능이 추가
      3. 실제 스프링 컨테이너 또는 IoC컨테이너는 ApplicationContext의 구현 클래스 오브젝트
    2. IoC 컨테이너 이용한 애플리케이션 만들기
      1. POJO 클래스의 준비
        1. Plain Old Java Object JavaEE의 무거운 객체를 지양하고 각자 기능에 충실한 객체
        2. public interface Printer {
           void print(String message);
          }
          
          public class StringPrinter implements Printer {
           private StringBuffer buffer = new StringBuffer();
           public void print(String message) {
            this.buffer.append(message);}
           public String toString() {
          return this.buffer.toString();
          }
          

      2. 설정 메타정보
        1. 애플리케이션 컨텍스트는 BeanDefinitionReader에 의해 변환된 BeanDefinition으로 만들어진 메타정보를 담은 오브젝트를 사용해 IoC/DI 작업을 수행
        2. 빈 아이디, 이름, 별칭/ 클래스/ 스코프/ 프로퍼티 값 또는 참조/ 지연로딩, 우선 빈, 오토와이어, 부모 빈, 빈팩토리 이름 등의 정보를 사용
        3. 스프링 IoC 컨테이너는 메타정보를 읽은 후 이를 참고하여 빈 오브젝트를 생성, 프로퍼티나 생성자를 통해 DI(Dependency Injection) 작업 수행
        4. 리스트 1-5 Hello 클래스 빈 등록
      3. p57부터