Spring MVC

[#1] spring 개요

k9e4h 2016. 5. 3. 00:57

1. Spring


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

    각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
2) 스프링은 POJO(Plain Old Java Object) 방식의 프레임워크.

   일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리

   등을 지원하기에 용이하고 객체가 가볍다.
3) 스프링은 제어 반전(IoC : Inversion of Control)을 지원.

   컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
4) 스프링은 의존성 주입(DI : Dependency Injection)을 지원

   각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
5) 스프링은 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원

   따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.
6) 스프링은 영속성과 관련된 다양한 서비스를 지원

   iBatis나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.
7) 스프링은 확장성이 높음.

   스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리

   가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.






 

 

< IOC >

 

Inversion of Control(IoC) container
객체의 생성  객체가 참조하고 있는  객체에 대한 종속성을 소스코드 내부에서 하드 코딩하는 것이 아닌 소스 코드 외부에서 설정하게 함으로써유연성  확장성을 향상시킨다.

기본적인 완제품 제작 순서와는 다르게 작은 부품부터  부품으로제품을 만드는 순서가 역순
이러한
 일련의 작업을 스프링은 컨테이너라는 곳에 담아서 처리하기 때문에 스프링을 IoC Container라고 
Inversion of control // 
역제어
기존
 자바 기반으로 어플리케이션을 개발할때 자바 객체를 생성하고 서로간의 의존관계를 연결시키는 작업에 대한 제어권은 보통 개발되는 어플리케이션에 있었다
그러나 servlet, EJB등을 사용하는 경우 servlet container, EJB container에게 제어권이 넘어가서 객체의 생명주기를 container들이 전담하게된다.
이처럼 IoC에서 이야기하는 제어권의 역전이란 객체의 생성에서붕터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을

의미

 

 


IoC 구현 방법 => DL( dependency lookup) 종류로 EJB&Apach, DI(dependency injection) 종류로 Spring

  1. Dependency Injection //   지원하는 것이 Spring
    컨테이너가  클래스 사이에 있는 의존관계를 자동으로 연결해 주는 
    bean 설정 정보를 바탕으로 
    개발자들이
     container API 이용하여 의존관계에 관여할 필요가 없게 되므로 컨테이너 API 종속되는 것을 줄일  있다.
    개발자들은 단지  설정파일에서 의존관계가필요하다는 정보를 추가하면 된다

     

 Bean 각의 의존관계 설정을 xml 파일에 등록

 

- 프로그램코드에서는 직접 빈을 획득하기 위한코드를 사용할 필요가 없음

 

- Container가 자체적으로 필요한 객체를 넘겨줘서 사용하는 방식

 

1) Setter Injection ( 세터 주입)
B b = new B();
A a= new A();
a.setB(b);

2)Construction Injection ( 
생성자 주입)
B b= new B();
A a= enw A(b);

Spring 프레임워크 기반 하에 서 관리되고 있는 UserService 인스턴스를 WebApplicationContext 에서  Lookup 하고 있다는 걸 확인할수 있다 이렇게 생성된 UserService 인스턴스는 JSP에 전달되어 직접적으로 사용된다.

이와 같이 저장소에 의하여 관리 되고 있는 빈을 개발자들이 직접  Lookup하여 사용하는 것을 Dependency Lookup이라고 한다.

 

Dependency Injection 이와 달리 각 계층 사이 , 각 클래스 사이에 필요로 하는 의존관계가 있다면 이와 같은 의존관계를 컨테이너가 자동적으로 연결해주는 것을 말한다.



 

< Framework >

 

   특정 형태의 소프트웨어 문제를 해결하기 위해상호 협력하는 클래스들과 인터페이스의 집합

   장점 : 재사용성단순성역할구분확장성유지보수 용이 

   라이브러리와 프레임워크의 차이

     •  라이브러리는 어플리케이션에서 호출할 수 있는 함수와 루틴으로 구성되어 있음

     •  프레임워크는 어플리케이션에서 특정 기능들을 제공하기 위해 확장할 수 있는 일반적이고

        상호 협력적인 컴포넌트를 제공


Open Source : 소프트웨어 혹은 하드웨어의 제작자의 권리를 지키면서 원시 코드를 누구나 열람할 수 있도록 한 소프트웨어 혹은 오픈 소스 라이선스에 준하는 모든 통칭을 일컫는다. (소스가 공개되어 여러 개발자가 플랫폼을 함께 개발, 구축, 보완해 나가는 시스템. )

Framework : 개발할 때 설계 기본이 되는 뼈대나 구조 / 환경 (문제 영역을 해결한 재사용, 확장 가능한 라이브러리.)



2018.05 추가


Spring을 쓰는 이유


AOP 때문에 스프링을 씀,

자바는 하나의 클래스에 대한 수직적인 흐름만 제어할 수 있는 반면, 스프링을 쓰면 특정 클래스들에 대한 수평적인 제어가 가능해짐.

가령 "*Controller.java 패턴이 들어오면 전처리로 00 bean class를 실행하라"란 선언이 가능.


DI,IoC,Test 때문에 스프링을 씀,

보통 클래스 내부에서 new로 객체의 인스턴스를 받아서 사용하는 방식은 모듈간의 강한 결합을 불러옵니다. 그래서 변경이나 확장 등에서 자유롭지 못함. 하지만 생성자, setter등으로 외부에서 생성된 객체(스프링에 의해 객체의 생명주기가 관리됨:IoC)의 인스턴스를 받아서 사용만하는 구조(의존관계에 있는 객체가 외부로부터 받음:DI)로 개발을 하면 변경이 있을 때 해당하는 부분의 클래스만 변경이 가능합니다. 이런 구조를 가능하게 하는 것이 인터페이스를 사용했을때 가능함. Sprnig을 사용하면 그런 인터페이스를 먼저 만들고, 그에 대한 구현체를 만드는 패턴이 자연스레 됩니다. 그렇게 되면 모듈 단위의 테스트를 하기에도 매우 쉬움.

생각하면 특정 기능을 너무 많은 인터페이스와 구현체로 쪼개는 결과를 불러와서 관리하기 어렵다는 말도 나올 수 있다


https://okky.kr/article/199704

반응형

'Spring MVC' 카테고리의 다른 글

Spring Batch  (0) 2019.01.18
Spring Transaction 관련  (0) 2016.11.30
Spring Annotation 정리  (0) 2016.10.07
SpringMVC 분석  (0) 2016.04.28
[#2] Spring 기초  (3) 2016.03.22