본문 바로가기
Web

Spring 개요

by Pretty Garbage 2016. 11. 14.

[학습목표]

 

스프링 개요

 

DI (객체간의 관계)

 

Spring 환경설정


[개념]

 

프레임워크란?

 

재사용을 하기 위해 클래스나 라이브러리들을 모아 제공하는 .

 

(개발의 시간을 단축하기 위해서 혹은 편리한 개발 환경을 제공하기 위해서)

 

스프링은 표준 프레임워크이자 경량 프레임워크 컨테이너



경량 프레임워크란??


Spring Framework는 마치 블럭과 유사함. 작은 부분부터 조립하여서 서서히 규모가 큰 모델을 만들어 나가는데 초기 개발에선

기능들만 구성하고 추후에 추가적으로 덧붙일 수 있음. 이것 저것 붙여나가면 무거운 프레임워크이나 초기 기능 구성하고 

구동하는데에선 EJB와 비교하였을때 가볍다고 한다.



스프링의 라이브러리들은 의존성을 갖고 있다


여기서 상기해볼만한 가치가 있는 것이 POJO방법


POJO?

POJO - Plain Old Java Object

-
평범한 java Object, 자바개발자가 마음대로 정의 할 수 있는 객체라는 뜻이다.
- EJB
컨테이너에 의존 하는 객체처럼 복잡하지 않고 개발자가 쓰기 편한 간단한 Object 만들어 쓰자는
 
간단한 Object 개념이다.
- Object
간단히 수퍼클래스로 보통의 평범의 그 자체 순수 자바클래스라고 봐도 괜찮다.

POJO
필수요소

- light-weight(possibly) :
가볍
- fiexible :
유연성
- simple :
간단 명료
- supported by separate opional components such as hiberate or spring

-
, Spring, Hiberate, Ibatis 등에서 객체를 가볍게, 간단히 유연하게 
  
어떤 Object 대해 추상화 할수있는 객체를 만들어야한다. (ex. DTD 쓰임)


Web 서버와 Web Application 서버의 차이


Web서버는 동적인 서버고 WAS(Web Application Server)는 동적인 서버이다.

WAS는 JVM이 내장이 되어 있어서 DB 연결되어 데이터를 주고 받거나 프로그램으로 데이터 조작이 필요한 경우에는 WAS 활용 해야 한다.

추가로 Was는 자체적으로 JVM을 내장하고 있으며 서블릿을 스레드로 관리하기도 한다.

 


 스프링의 핵심 라이브러리

-       Spring-core (핵심)

-       Spring-context : 객체 생성, 라이프 사이클

-       Spring-beans : 스프링 Container안에서 객체를 생성(기본 기능)

 

Is a : 상속(컴파일 단계)  : 스프링은 관계를 취급하지 않는다.

Has a :


===============================================================================================


아래는 블로그 검색후에 참고될만한 내용 복사해옴.


DI (의존성 주입)

 

DI 스프링(Sping) 통해서 특별히 생겨난 용어는 아님. DI 지원해주는게 스프링.

* 일체형

 - Composition : HAS-A 관계

 - A B를 생성자에서 생성하는 관계 .



* 분리 / 도킹(부착)

 - Association 관계

 - A객체가 다른 녀석이 만든 B 객체를 사용


부연 설명

A를 스마트폰, B를 배터리리라 하면,

일체형 스마트폰 (아이폰)은 바로 전원을 켜도 되지만배터리 탈부착 형태의 스마트폰 (갤럭시S)은 여기서는 배터리를 넣고, 전원을 넣어야 함

일체형은 A라는 객체의 내부 프로세스에 대해 신경 쓸 필요가 없으며분리형은 A B를 개별적으로 세팅해 주어야 함. , 분리형은 내가 원하는 것(다른 배터리)으로 바꾸어 부착할 수 있음. 이것을 DI의 개념이라 보면 됨.



DI의 종류

-        세터 주입(Setter Injection)

-        생성자 주입(Construction Injection)

 

 

Setter Injection

B b = new B();

A a = new A();

a.setB(b);

 

 

Construnction Injection

B b = new B();

A a = new A(b);

     Example //  DI 종류에 대한 예시

 

 

스프링에서의 DI의 의미

부품들을 생성하고제품을 조립해주는 공정과정을 대신해 주는 라이브러리 (역할자)

 



인터페이스를 이용해서 DI 해보기



public class BuilderAType implements BuilderInter{

private String msg;

public BuilderAType() {

// TODO Auto-generated constructor stub

this.msg = "BuilderAType 입니다.";

}


public String getMsg() {

return msg;

}

}


BuilderAType.java



public class BuilderBType implements BuilderInter{

private String msg;


public BuilderBType() {

// TODO Auto-generated constructor stub

this.msg = "BuilderBType 입니다.";

}


public String getMsg() {

return msg;

}


}

BuilderBType.java




public interface BuilderInter {

//외부조립기에 의해서 조립될 때 다형성으로 사용되기 위한

//기준이 된다.

public String getMsg();

}

 

                                   BuilderInter.java (인터페이스)





public class Project {

private BuilderInter builder;



public Project(BuilderInter builder) {

// TODO Auto-generated constructor stub

super();

this.builder = builder;

}



public BuilderInter getBuilder() {

return builder;

}



public void setBuilder(BuilderInter builder) {

this.builder = builder;

}


}

Project.java



import java.util.Scanner;


public class ProjectMain {


// project 객체에게 Builder계열의 객체를 생성해서

// 전달하는 것을 조립해주는 객체(외부조합기)

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);

System.out.println("요청 A, B");

String str = sc.nextLine();


BuilderInter builder = null;

if (str.equals("A")) {

builder = new BuilderAType();

} else if (str.equals("B")) {

builder = new BuilderBType();

} else if (str.equals("C")){

builder = new BuilderCType();

}


// Call by Ref

Project pj = new Project(builder);

String msg = pj.getBuilder().getMsg();

System.out.println("Message : " + msg);

}


}


ProjectMain.java