개발노트/Back-end

Spring Framework1

전지적민자시점 2018. 6. 14. 16:50

k.스프링의 이해

 1.1) 스프링의 정의 

 Spring Framework 

java 플랫폼을 위한 오픈소스 애플리케이션 프레임워크

java 앤터프라이즈 개발을 편안하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크
자박 개발을 위한 프레임워크로 종속 객체를 생성해주고 조립해주는 도구

1.2) 스프링의 특징

크기와 부하의 측면에서 경량

제어 역행(IoC)라는 기술을 통해 애플리케이션의 느슨한 결합

관점지향(AOP) 프로그래밍을 위한 풍부한 지원

애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다 = 일종의 컨테이너(Container)

간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정


- 스프링의 상세 특징 

1)경량컨테이너로서 자바 객체를 직접 관리

 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리, 스프링으로부터 필요한 객체를 얻어옴.

2)POJO(Plan Old Java Object) 방식의 프레임워크

특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리등 지원 용이하고 객체가 가볍다.

3)제어반전(IOC : Inversion of Control)을 지원

컨트롤의 제어권이 사용자가 아니라 프레임워크가 필요에 따라 스프링에서 사용자의 코드를 호출한다.

4)스프링 의존성 주입(DI: Dependency Injection)지원

각 계층이나 서비스들 간에 의존성이 존재 할 경우 서로 연결해준다.

5)관점지향프로그래밍(AOP: Aspect-Oriented Programing) 지원

트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리 및 관리

6)다양한 서비스를 지원

ibatis나 Hibernate 등 이미 완성도 높은 데잍베이스 처리 라이브러리의 인터페이스를 제공



1)POJO 

 대표예는 JavaBean을 들수 있다. 기본생성자와 멤버 필드에 접근할수 있는 getter , setter 메소드를 가진 serializable(직렬화가 간으한) 객체 의미


2)DI(Dependency Injection, 의존성 주입)


일체형은 A라는 객체의 내부 프로세스에서 대해 신경 쓸 필요가 없으며, 분리형은 A와 B를 개별적으로 세팅해 주어야 함. 단 분리형은 내가 원하는 것으로 바꾸어 부착


위의 서레명은 분리/도킹 형으로 개발을 하게 되면 각 객체간의 결합도를 낮출수 있으며, DI를 사용하는 목적이 이러한 결합도를 낮추기 위함임


2-1)DI 종류

Setter Injection

Construction Injection


JAVA의 OOP개념과 같다.


2-2)스프링에서 DI

기본적인 완제품 제작 순서와는 다르게 작은 부품부터 큰 부품으로, 제품을 만드는 순서가 역순(Inversion of Control)

 - 부품을 생성하고 제품을 조립해주는 공정과정을 대신 해주는 라이브러리


생성하기 위한 객체를 명세서(XML)에 기술하고, 그 부품과 의존성(Dependency)들을 보관하는 일을 처리


2-3)DI 구현


객체의 생성과 도킹에 대한 내용이 소스 코드상에 있는 것이 아닌 별도의 텍스트 파일(xml 설정 파일)에 분리하여 존재.

(JAVA소스 컴파일 없이 XML 변경만으로 내용 변경 가능)


JAVA(DI) : Property 항목은 실제 값을 record에 바로 주입하는 것이 아닌 setRecord()함수를 호출하여 주입함.


XML(스프링DI) : 객체 생성시, 패키지명을 포함한 풀 클래스 네임 작성

XML에 작성된 명세서를 보고, IOC컨테이너가 각 객체를 생성하고, 값을 주입함. 여기서 ApplicationContext가 IoC 컨테이너 역할을 함.



XML(스프링DI) config.xml

<bean id="record" class="di.SprRecord"></bean> //빈 객체 생성

<bean id="view" class="di.SprRecordView">

<property name="record" ref="record"></property> // setRecord() 호출

</bean>//빈 객체 생성


JAVA

//XML 파싱하여 컨테이너 담는 작업

ApplicationContext ctx = new ClassPathXmlApplicationContext("config.xml");


RecordView rv= (RecordView) ctx.getbean("view");


2-4) XML (Bean) Sample

* 빈(Bean) 객체는 반드시 클래스를 사용,인터페이스나 추상클래스는 객체 생성이 불가함.

* 빈 객체 생성, 객체 초기화, 객체 값 주입


XMl(스프링 DI) config,xml


1) 

<bean id="record" name ="r1,r2,r3;r4" class="di.SprRecord">

<property name="kor" value="20"></property>

</bean>

2)

<bean id="record" name="r1,r2,r3;r3" class="di.SprRecord">

<construtor-arg vlaue="20"></constructor-arg>

</bean>

3)

<bean id="record" name="r1,r2,r3;r3" class="di.SprRecord">

<construtor-arg name="kor"  vlaue="20"></constructor-arg>

</bean>

4)

<bean id="record" name="r1,r2,r3;r3" class="di.SprRecord"

p:kor="50" p:eng="60" p:math="70">

</bean>

5)

<bean id="view" name="r1,r2,r3;r3" class="di.SprRecordView">

<property name="record" ref="record"></property>

</bean>



id : 빈 객체 고유 이름 (접근가능자)

name : 객체의 이름

class : 생성할 클래스

constructor-arg : 초기값 설정(생성자 함수 사용)

property :초기값 설정 (Setter 함수 사용)


3 )IoC 컨테이너(스프링 컨테이너)

 *제어의 역전 - 외부(컨테이너)에서 제어를 함.


>Bean(빈) 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 Object


>Beam Factory(빈 팩토리) Bean(object)의 생성과 관계 설정 제어를 담당하는 IoC 오브젝트.

좀더 확장한 애플리케이션 컨텍스트(application context)를 주로 사용


>애플리케이션 컨텍스트(IoC 컨테이너 or 스프링 컨테이너) : DI 를 위한 빈 팩토리에 엔터프라이즈 애플리케이션을 개발하는데 

필요한 여러가지 컨테이너 기능을 추가한 것.


>설정정보/설정 메타정보  구상정보 or 형상정보 xml


>스프링 컨테이너 IoC 방식으로 빈을 관리 한다는 의미에서 애플리케이션 컨텍스트나 빈 팩토리를 의미


> IoC 컨테이너 : 어떠한 객체의 명세서를 작성하고, 스프링 라이브러리는 해당 명세대로 객체


빈 팩토리(Bean Factory), 애플리케이션 컨텍스트(Application Context)라고도 불림.


스프링의 IOC 컨테이너는 일반적으로 애플리케이션 컨텍스트라고 불림.


빈팩토리와 어플리케이션 컨텍스트는 각각 Bean Factory, applicationcontext 두개의 인터페이스로 정의


EJB : Enterprise Java Bean - 효율적인 서버 관리와, 자동적으로 문제를 해결해준다.

DL : Dependency Lock up

DI : Dependency Injection


DL(Dependecy Lookup) : JNDI 같은 저장소에 의하여 관리되고 있는 Bean을 개발자들이 직접 컨테이너에서 제공하는 API 를 이용하여 lookup 하는 것을 말함.


DI(Dependency Injection) - 각 Class 사이의 의존관계를 빈 설정 정보를 바탕으로 Container가 자동적으로 연결해 주는것을 말함.


setter Injection - 클래스 사이의 의존관계를 연결시키기 위하여 setter 메소드를 이용하는 방법

Constructor Injection - 클래스 사이의 의존관계를 연결시키고 constructor를 이용하는 방법.

method injection : 싱글톤인스턴스와 non singleton 인스턴스의 의존관계를 연결 필요가 있을때 사용하는 방법


JNDI(*java naming and directory interface)

 엔터프라이즈 애플리케이션을 위한 네이밍과 디렉토리 서비스 표준 인터페이스


Naming Service : java Naming and Directory Interface

JNDI(java Naming and Directory Interface)

디렉토리 서비스에서 제공하는 데이터 개체

J2EE 플랫폼의 미존재

여러서버의 동시 접근


728x90