SPRING

SPRING Framework 개념, 기능, 특징

Adev 2022. 11. 9. 19:43

SPRING Framework란?

: Enterprise Application에서 필요로 하는 기능을 제공하는 Framework다.

 

JEE(Java Enterprise Edition)가 제공하는 다양한 기능을 제공하며 DI(Dependency Injection), AOP(Aspect Oriented Programming)과 같은 기능도 지원한다.

 

+ Famework란?
: 뼈대나 근간을 이루는 코드들의 묶음
: 프로그램의 기본 흐름이나 구조를 정하고, 팀원들이 이 구조에 자신의 코드를 추가하는 방식의 개발

 

 

 

spring의 주요기능

  • Lightweight Container (경량 컨테이너)

: Spring Container는 Java 객체의 라이프 사이클을 관리하며 Spring Container로부터 필요한 객체를 가져와 사용할 수 있다.

 

Java클래스와 인터페이스를 이용하기 때문에 진입장벽이 낮고, EJB등 복잡한 프레임워크에 비해 가볍다 -> 속도up

EJB 컨테이너에 비해 가벼운 IoC 컨테이너(Inversion of Control, 역제어 : 객체의 생성~소멸을 컨테이너가 관리)이다.

 

  • DI (Dependency Injection, 의존성 주입) 지원

: 설정파일이나 Annotation을 통해 객체간 의존관계를 설정한다.

 

객체 간의 의존관계가 외부에 의해 설정된다. - 하나의 객체가 다른 객체 없이 제대로 역할 할 수 없다. 필요한 객체를 외부에서 주입한다.

컨테이너는 a객체가 필요로하는 b객체를 생성해 a객체로 주입해준다. - 어떤 객체에 의존하든 주입받는 객체의 역할은 변하지 않는다.


+ 의존성 주입 방법 [xml]
EX)
root-context.xml -> Namespaces탭 -> beans, context 체크 -> source탭에 아래 코드추가(root-context에 아래 코드 추가)

<context:component-scan base-package="org.zerock.sample">
</context:component-scan>
</beans>

 

+ setter-based Injection : setXxx() 형태의 설정 메서드를 통해서 전달받는 프로퍼티 설정 방식.

+ autowire속성을 이용해 의존객체를 자동으로 설정할 수 있다.

     byName : 프로퍼티 이름과 같은 이름의 빈 객체 설정.

     byType : 프로퍼티 타입과 같은 타입의 빈 객체 설정.

     constructor : 생성자 파라미터 타입과 같은 타입의 빈 객체를 생성자에 전달.

     autodetect : constuctor방식을 적용할 수 없을 시 byType방식을 적용해 빈 객체를 설정.

+ 단일 생성자의 묵시적 자동주입 (@Autowired 사용X) (spring 4.3 이상)
[Lombok]
   - @AllArgsConstructor : 인스턴스 변수로 선언된 모두를 파라미터로 받는 생성자 작성.
   - @RequiredArgsConstructor : @NonNull이나 final이 붙은 인스턴스 변수에 대해서만 생성자 작성.

 

  • AOP (Aspect Oriented Programming) 지원

: 여러 Module에서 공통으로 필요로 하지만 실제 Module의 핵심은 아닌 기능들('cross-concern')을 분리해 각 Module에 적용할 수 있다. (기능별 모듈화)

반복적인 코드를 줄이고 핵심 비즈니스 로직에만 집중할 수 있다. (AspectJ 문법으로 작성)

 

  • POJO(Plain Old Java) 지원

: Container에 저장되는 Java객체는 특정한 Interface를 구현하거나 Class를 상속받지 않아도 되기 때문에 기존에 작성한 Code를 수정하지 않고 사용할 수 있다.

(root.context.xml로 사용하는 일반 Java 영역)

 

  • Transaction 처리를 위한 일관된 방법을 제공

: 어노테이션이나 XML설정 파일을 통해 Transaction 관련 정보를 입력하기 때문에 Transaction 구현과 상관없이 동일한 Code를 여러 환경에서 사용할 수 있다.

 

+ 추상화된 레이어, 트랜잭션 관리자를 플러그인할 수 있어 저수준의 트랜잭션을 잘 처리할 수 있다.

+ 선언적인 트랜잭션을 지원해 코드를 수정하지 않고 트랙잭션을 변경할 수 있다. 

 

  • 영속성과 관련된 다양한 API를 지원

: JDBC, iBatis 등 Database 처리를 위한 Library와 연동을 지원한다.

 

  • 다양한 API에 대한 연동을 지원

: JMS, Mail 등 다양한 API를 설정 파일과 Annotation을 통해 사용할 수 있도록 지원한다.

 

 

 

+ 프로젝트 전체 구조 설계에 유용함 - web, db 영역 등 한 분야에만 집중하지 않고 전체를 설계할 수 있다.

+ 자체적으로 MVC Framework를 제공하고 있기 때문에 spring만 사용해도 MVC 기반의 WEB Application을 개발할 수 있다. Struts2와 같은 Framework와의 연동도 지원한다.

+ 다른 프레임워크 포용 - 여러 프레임워크를 혼용해서 사용할 수 있다. 최소한의 수정만으로로 가능하다.

+ Test Unit 제공

'SPRING' 카테고리의 다른 글

SPRING View 영역 구현  (0) 2022.11.14
SPRING Controller Model  (0) 2022.11.13
SPRING View 지정  (0) 2022.11.12
SPRING Controller 구현  (0) 2022.11.11
SPRING MVC 구조, 처리 흐름, 개발 과정  (0) 2022.11.10