Spring framework
- Enterprise application에서 필요로 하는 기능을 제공하는 프레임워크
- Enterprise application
- 원격의 환경에서 네트워크로 활용하는 어플리케이션
- web이라고 봐도 무방하다.
- JEE가 제공하는 다수의 기능을 지원하는 경량화 프레임워크
- 이전에 쓰던 프레임워크의 모든 기능을 종합적으로 사용하면서 경량화 된 솔루션
- JEE의 기능 + DI + AOP
- JEE: Java Enterprise Edition
- DI: Dependency Injection
- AOP: Aspect Oriented Programming
Spring framework의 목표
- java enterprise applicaion의 기반(infro) 제공하는 것.
- 그로인해 개발자는 domain problem(핵심 문제)에만 집중할 수 있게 도와주는 것이 목표
Spring의 특징
- 경량컨테이너
- DI 패턴 지원
- AOP 지원
- POJO 지원
- IoC 제공
- 트랜잭션 처리를 위한 일관된 방법 제공
- 영속성 관련 API 지원
- 다양한 API를 연동할 수 있는 기능 지원
Spring Framework 구성 요소
- Spring Core
- Spring Context : Spring Core에 추가 버젼
- Spring AOP
- Spring DAO : DB관련
- Spring ORM : DB관련
- Spring Web : Web관련
- Spring Web MVC : Web관련
Spring Core, Context
- Spring core
- IoC(혹은 DI) 기능을 지원하는 영역
- Bean Container
- Srping context
DI, Dependency Injection
- 객체 사이의 의존 관계가 객체가 아닌 외부에 의해서 설정
- A를 사용하기 위해서 B가 필요하다면
A는 B에 의존한다
고 표현
IoC
- 자바 객체 생성/ 객체간의 의존관계 설정이
개발자
가 주체가 아닌 컨테이너
에게 주체를 넘긴것
- 제어의 역전
- 필요한 객체를 자신이 직접 생성하지 않고 외부(spring container)로부터 공급 받는 일
용어 설명
- Container : 객체 생성 기능
- dependency : 작업할 때 필요한 library
- 결합도
- 응집도
- 하나의 클래스 내에서의 얘기
- 클래스가 본래 목적에 맞게 모두 만들어져있는가
추가 설명
Spring Framework Triangle
경량컨테이너
- 스프링에서 자바 객체를 담고, 자바 객체들의 라이프사이클을 관리하는 컨테이너를 의미한다.
- 스프링 컨테이너라고 한다.
DI; Dependency Injection
- 의존성 주입
- 유연하게 확장 가능한 객체를 만들고 이를 의존관계로 엮어 사용하는 것
- 스프링은 설정 파일이나, 어노테이션을 통해 객체 간 의존 관계를 설정할 수 있음.
- 의존 관계로 설정된 객체는 직접 생성하거나 검색할 필요가 없다.
AOP; Aspect Oriented Programming
- 관점 지향 프로그래밍
- 관심사의 분리를 통해서 소프트웨어의 모듈성 향상
- 핵심 관심사와 공통 관심사 분리
POJO; Plain Old Java Object
- 특정 환경이나 기술에 종속적이나 않은 객체지향 원리에 충실한 자바 객체
- 테스트하기 용이하고 객체지향 설계를 자유롭게 적용할 수 있음.
- Plain: 특정 framework에 종속되지 않는 것을 의미
- Old: EJB 이전의 java class를 의미
- 인터페이스를 구현하거나 클래스를 상속 받지 않는 일반 자바 객체를 의미하고, 스프링이 이를 지원함
IoC; Inversion of Control
- 제어의 반전, Spring의 핵심 기능
- 자바 객체 생성 및 의존관계 설정에 대한 제어권을 개발자가 아닌 프레임워크에게 넘기는 것을 의미
- Spring Framework에서는 Spring Container가 자바 객체 생성 및 의존관계 설정에 대한 제어권을 갖고 있음.
PSA; Portable Service Abstraction
- 환경과 세부기술의 변경과 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 설계 원칙
- low level의 기술 구현 부분과 기술을 사용하는 인터페이스로 분리. 즉, 환경과 세부기술이 변경되더라도 사용하는 인터페이스는 그대로이므로 사용 방식에는 변동이 없다.