TIL 2020 06 17 (수)
오늘 한 일
스프링 프레임 워크 개요
version 5.2.7.RELEASE
을 기준으로 봄
Spring은 Java 엔터프라이즈 응용 프로그램을 쉽게 작성할 수 있다.
Spring은 광범위한 애플리케이션 시나리오를 제공하며 대기업부터 개인 프로젝트까지 포함할 수 광범위하다.
“Spring"의 의미
“Spring"이라는 용어는 ‘Spring Framework’ 프로젝트 자체를 뜻하기도 하고 ‘Spring Framework'를 이용해 개발한 Application 전체 프로젝트를 뜻하기도 합니다.
Spring 모듈
Spring Framework는 모듈로 나뉜다.
Core 모듈이 있고 개발하려는 Application에 따라 추가로 필요한 모듈을 선택할 수 있다.
Spring Boot, Spring Security, Spring Data, Spring Cloud, Spring Batch와 같은 다양한 모듈이 있다.
Spring의 역사
Spring은 초기 J2EE의 복잡성을 해결하고자 2003년에 시작되었다.
Spring은 Java EE와 경쟁관계가 아니라 Java EE를 보완한다.
Java EE 플랫폼 사양
디자인 철학
- Provide choice at every level.
코드를 변경하지 않고 구성을 통해 지속성 공급자를 전환 할 수 있다. - Accommodate diverse perspectives.
다양한 관점에서 다양한 어플리케이션의 요구를 지원 - Maintain strong backward compatibility.
Spring의 신중하게 버전관리를 하여 버전간 주요 변경 사항이 거의 없다. - Care about API design.
직관적이고 많으 버전과 수년에 걸쳐 유지되는 API를 만드는데 많은 노력을 기울였다. - Set high standards for code quality. 코드 품질을 높은 표준(퀄리티)로 설정한다. 코드에는 Javadoc을 중심으로 두고, 패키지간에 순환 종속성이 없는 깨끗한 코드 구조를 가지고 있다.
Spring Core
Spring Frame의 가장 중요한 기술은 IoC (Inversion of Control) 컨테이너 이다. IoC 컨테이너를 본 후 AOP (Aspect-Oriented Programming) 기술에 대한 내용을 포괄적으로 다릅니다.
IoC 컨테이너
IoC는 종속성 주입(DI)라고도 한다.
객체의 생정자의 인수 또는 프로퍼티등을 통해 객체의 종속성(의존성)을 정의한 다음 컨테이너는 해당 객체의 Bean을 작성할 때 이러한 종속성을 주입하는 프로세스이다.
결국 이 프로세스는 기본적으로 Bean으로 등록될 Class를 직접 인스턴스화 하여 컨테이너에 집어 넣는 것이 아닌 역으로 컨테이너가 알아서 Class의 인스턴스를 생성후 Bean으로 주입 받음으로 제어가 반전되었다.
패키지
org.springframework.beans
및 org.springframework.context
패키지는 Spring Framework의 IoC 컨테이너의 기초이다.
BeanFactory
인터페이스는 Bean 객체를 관리 할 수 있는 고급 구성 메커니즘을 제공한다.
실질적으로 우리가 BeanFactory
를 접근해도 되지만 다양한 Factory를 상속 받은 ApplicationContext
를 주입받아 사용해도 된다.
간단하게 하면 BeanFactory
는 Spring IoC 컨테이너에 대해 독점적으로 사용하고 ApplicationContext
는 더 많은 엔터프라이즈 별 기능을 추가한다.
컨테이너
org.springframework.context.ApplicationContext
는 Spring IoC 컨테이너를 나타내며 인스턴스 구성 및 Bean 조립을 담당한다.
컨테이너는 XML, Java 어노테이션, Java 코드로 작성된 구성 메타 데이터 읽어 인스턴스화에 지시 사항을 가져온다.
ApplicationContext
는 여러가지 구현체를 가지고 있는데 ClassPathXmlApplicationContext
이 될 수도 있고 FileSystemXmlApplicationContext
이 될 수 도 있다.
(Spring Boot의 기본 구현체는 뭔지 알아봐야겠다.)
JVM 생태계에 있는 Groovy, Kotlin도 지원한다.