2018년 4월 2일 월요일

패스트 캠퍼스 JAVA 웹 프로그래밍 마스터 8일차(SPRING)

  • 로드 존슨
    • 항상 프레임워크 기반으로 접근하라
  • SPRING
    • 원하는 부분만 가져다 사용할 수 있도록 모듈화가 잘 되어있다.
    • IOC컨테이너다(제어의 역전) : 개발자가 제어하지 않고 남에 의해 제어되는 경우
    • DI와 인터페이스 지향을 통한 느슨한 결합도
    • 선언적으로 트랜잭션을 관리할 수 있다.
    • 완전한 기능을 갖춘 MVC Framework를 제공한다.
    • AOP와 공통 규약을 통한 선언적 프로그래밍
    • 템플릿을 통한 상투적인 코드 축소
    • 스프링은 도메인 논리 코드와 쉽게 분리될 수 있는 구조를 가지고 있다.
    • POJO를 이용한 가볍고 non-invasive(비 침투적) 개발
    • POJO : 다른 라이브러리 및 소스에 의존적이지 않은 CLASS
    • 트랜잭션을 관리할 수 있다.
    • AOP와 공통 규약을 통한 선언적 프로그래밍
    • 원스-스탑-숍(One-Stop-Shop): 모든 과정을 한꺼번에 해결하는 상점
    • EJB :  생성, 관리, 컨테이너  
    • Bean : 인스턴스생성, 관리 , 컨테이너에 의해 관리되는 객체(개발자가 직접 생성하는 객체는 Bean이 아니다)
  • Spring Container
    • 인스턴스의 생명주기를 관리한다.
    • 생성된 인스턴스들에게 추가적인 기능을 제공한다.
  • IOC
    • 다른 프로그램에 그 흐름을 제어하는 것
  • IOC 컨테이너(중요함!!!)
    • BeanFactory <- ApplicationContext <- WebApplicationContext
    • BeanFactory
      • 빈 객체에 대한 생성과 제공을 담당
      • 단일 유형의 객체를 생성하는 것이 아니라, 여러 유형의 빈을 생성,제공
      • 객체 간의 연관 관계를 설정, 클라이언트의 요청 시 빈을 생성
      • 빈의 라이플 사이클을 관리
      • 필요할때 마다 빈 정보를 메모리에 로딩함
    • ApplicationContext
      • BeanFactory가 제공하는 모든 기능 제공
      • 엔터프라이즈 애플리케이션을 개발하는데 필요한 여러 기능을 추가함
      • L18N, 리소스 로딩, 이벤트 발생 및 통지
      • 컨테이너 생성시 모든 빈 정보를 메모리에 로딩함
    • WebApplicationContext
      • 웹 환경에서 사용할 때 필요한 기능이 추가된 애플리케이션 컨텍스트
      • 가장 많이 사용하며, 특히 XmlWebApplicationCOntext를 가장 많이 사용
  • POJO
    • Plain Old Java Object(다른 클래스에게 종속적이지 않은 클래스)
  • DI
    • 의존성 주입(A가 B를 가진다)
    • 클래스 사이의 의존 관계를 빈설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
  • ApplicationContext
    • AnnotationConfigApplicationContext - 하나 이상의 Java Config 클래스에서 스프링 애플리케이션 컨텍스트를 로딩(최신프로젝트에 사용 추천)
    • AnnotationConfigWebAlicationContext - 하나 이상의 Java Config 클래스에서 웹 애플리케이션 컨텍스트를 로딩(기존프로젝트들이 많이 되어있음)
    • ClassPathXmlApplcationContext - 클래스패스에 위치한 xml파일에서 컨텍스트를 로딩
    • FileSystemXmlApplicationContext - 파일 시스템에서 지정된  xml파일에서 컨텍스트를 로딩
    • XmlWebApplcationContext - 웹 애플리케이션에 포함된 xml파일에서 컨텍스트를 로딩
  • BEAN
    • 기본 scope는 싱글톤인데 메모리가 올라갈때 생성한다.(하나의 객체)
    • scope="prototype" 가 있으면 필요 할때 마다 생성된다.(매번 새로운 객체가 생성)
  • XML
    • Data를 표현한다.
    • 문서의 형식을 지정하는 방법
      • dtd
      • xml스키마
    • 자주쓰는 네임스페이스는 생략 가능하다.
    • xml문서를 읽어들이는 파서는 네임스페이스(ns)에 따라서 스키마에 맞는지 검사를 한다.
      <상품:상품 xmlns:상품="url주소" xmlns:회사="url주소">
          <상품:이름>맥북프로</상품:이름>
          <상품:가격>200</상품:가격>
          <회사:회사>
              <회사:이름>apple</회사:이름>
              <회사:가격>30</회사:가격>
          </회사:회사>
      </상품:상품>
    • schemaLocation에 설정된 주소에 설정된 정보에 따라서 파서가 작동한다.
  • JUNIT Annotation
      • @RULE
        • System.out.println(값) 으로 출력한 결과를 가질 수 있는 객체
      • @RunWith(SpringJUnit4ClassRunner.class)
        • junit이 실행하면서 @Test할때 내부적으로 ApplicationContext를 생성한다. 
    • Spring Annotation
      • @ContextConfiguration
        • ApplicationContext가 생성할때 '클래스이름-context-xml'파일을 설정파일로하여 읽어들이도록한다. ex) 클래스명-context.xml 
      • @Autowried
        • 자동으로 DI (의존성 주입)
        • ApplicationContext가 관리하는 Bean중에서 해당 타입의 객체를 주입
    • @RunWith(SpringJUnit4ClassRunner.class) 와 @ContextConfiguration을 설정을 CNamespaceReferenceTest class에 선언되어 있다면 ApplicationContext가 context = new ClassPathXmlApplicationContext("CNamespaceReferenceTest-context.xml") 와 같다.
    • Bean xml 설정
      • bean설정에서 위치는 상관이없다. 스프링이 자동적으로 필요한 인스턴스를 만들어 준다
      • -ref : 참조하는 래퍼런스(객체)를 참조한다. / _0 : 1번째 파라미터
    <!-- bean설정에서 위치는 상관이없다. 스프링이 자동적으로 필요한 인스턴스를 만들어 준다. -->
      <!--
        BlankDisc compactDisc = new(BlankDisc("Sgt. Pepper's Lonely Hearts Club Band", "The Beatles");
        c:_0 : 1번재 파라미터  , c:_1 : 2번째 파라미터
      -->
      <bean id="compactDisc" class="soundsystem.BlankDisc"
            c:_0="Sgt. Pepper's Lonely Hearts Club Band"
            c:_1="The Beatles" />
      <!--
        CDPlayer cdPlayer = new CDPlayer();
        c:
      -->
      <bean id="cdPlayer" class="soundsystem.CDPlayer"
            c:_-ref="compactDisc" /> 
      • <constructor-arg> 태그는 생성자에 값을 넣는다.(자동으로 선언한 순서대로 파라미터에 순서에 맞게 값을 넣어준다)
      • <constructor-arg> 안에 <list> 태그는 자동으로 array를 만들어준다.
        <constructor-arg>
          <list>
            <value>Sgt. Pepper's Lonely Hearts Club Band</value>
            <value>With a Little Help from My Friends</value>
          </list>
        </constructor-arg>
      • p:파라미터명 은 property name="파라미터명" 을 사용한것과 같다.
      • setTitle , setArtist 메소드에 값이 적용된다.
    
        p:title="Sgt. Pepper's Lonely Hearts Club Band"
        p:artist="The Beatles"> 
    
    
        <property name="title" value="Sgt. Pepper's Lonely Hearts Club Band" />
        <property name="artist" value="The Beatles" />   
    • Util을 통해 간편하게 사용 가능하다.
    • schemaLocation은 에디터가 자동완성기능등 인식을 잘하게 하기 위함이다.
    • xsi:schemaLocation 의 뜻은 'http://www.springframework.org/schema/beans' 는 'http://www.springframework.org/schema/beans/spring-beans.xsd' 에 매핑되고 'http://www.springframework.org/schema/util'' http://www.springframework.org/schema/util/spring-util.xsd' 에 매핑된다는 뜻이다.
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:p="http://www.springframework.org/schema/p"
      xmlns:util="http://www.springframework.org/schema/util"
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util 
        http://www.springframework.org/schema/util/spring-util.xsd">
    
     <!--
        List<String> trackList = new ArrayList<>();
        tracklist.add("Sgt. Pepper's Lonely Hearts Club Band");
     -->
      <util:list id="trackList">  
        <value>Sgt. Pepper's Lonely Hearts Club Band</value>
        <value>With a Little Help from My Friends</value>
        <value>Lucy in the Sky with Diamonds</value>
        <value>Getting Better</value>
        <value>Fixing a Hole</value>
        <value>She's Leaving Home</value>
        <value>Being for the Benefit of Mr. Kite!</value>
        <value>Within You Without You</value>
        <value>When I'm Sixty-Four</value>
        <value>Lovely Rita</value>
        <value>Good Morning Good Morning</value>
        <value>Sgt. Pepper's Lonely Hearts Club Band (Reprise)</value>
        <value>A Day in the Life</value>
      </util:list>     
    • 스프링과 강력한 관계를 맺고 작동시킬려고 할때 스프링에서 제공 해주는 기능을 사용
      • implements BeanNameAware
        • bean의 이름을 가지고 오려고 할때 사용
      • implements BeanFactoryAware
        • BeanFactory에서 bean을 가지고오려고 할때 사용
    • Bean의 일생 ★★★★★★★
    Share:

    0 개의 댓글:

    댓글 쓰기