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 |