Spring 이란
•
자바 EE 어플리케이션을 빌드할 수 있는 오픈소스 경량 프레임워크
◦
엔터프라이즈용 JAVA 애플리케이션 개발을 편하게 할 수 있게 한다
▪
간단한 사용 방법으로 기술보다는 애플리케이션의 로직 자체에 더 집중하여 비즈니스 로직을 구현할 수 있다.
◦
오픈 소스
▪
모든 사용자에게 무료로 열려있는 오픈소스로 필요하다면 스프링 코드 일부를 수정하여 사용하여도 무관함
▪
여러 사람이 프로젝트의 코드를 사용해봄으로써 다양한 검증 과정을 거칠 수 있다.
◦
경량급
▪
기존 기술을 사용할 때 불가피하게 작성해야만 했던 불필요한 코드를 제거하여 코드의 복잡성을 낮출 수 있다
→ 기존 EJB의 복잡함에 비해 훨씬 단순하다
Spring 의 특징
•
DI(Dependency Injection) : 의존성 주입
◦
의존 객체를 특정 클래스에서 직접 생성하는 것이 아니라 외부로부터 주입해주는 것
◦
개발자가 Spring 프레임워크에 의존성을 주입하면서 객체 간 결합을 느슨하게 하여 코드의 재사용성 증가, 단위 테스트가 용이해짐
•
IoC(Invesion of Control) : 제어의 역전
◦
컨트롤의 제어권이 개발자가 아닌 프레임워크가 대신해서 해주는 것 (Servlet이나 Bean 같은 코드를 프레임 워크가 대신 수행)
•
AOP(Aspect Oriented Programming) : 관점지향 프로그래밍
◦
애플리케이션 전반에 걸쳐 공통적으로 적용되는 코드들을 비즈니스 로직으로부터 분리해내는 것
◦
코드 중복 문제를 해결하기 위해서 공통 관심 사항과 핵심 관심 사항을 분리하는 등 애플리케이션 전반에 걸쳐 적용되는 공통 기능을 비즈니스 로직으로부터 분리해내는 것
•
PSA(Protable Service Abstraction) : 일관된 서비스 추상화
◦
특정 기술과 관련된 서비스들을 추상화하여 일관된 방식으로 사용할 수 있도록 제공하는 것
◦
JDBC를 통해 스프링이 데이터베이스를 변경할 수 있는 인터페이스를 제공한다이처럼 JDBC처럼 특정 기술과 관련된 서비스를 추상화하여 일관된 방식으로 사용할 수 있도록 한 것을 PSA라고 한다.
Spring Boot 란
•
기존 스프링 프레임워크 위에 구축독립 실행형, 프로덕션 등급, 스프링 기반 어플리케이션을 쉽게 만들수 있게 해주는 프레임워크
◦
REST API 개발을 위해 사용
•
스프링 프레임워크를 사용하기 위한 설정의 많은 부분을 자동화하여 개발자가 편하게 스프링을 활용할 수 있도록 도와준다
→ 스프링 부트 starter 디펜던시만 추가해주면 바로 API를 정의하고 서버를 실행할 수 있다.
Spring Boot starter
•
특정 목적을 달성하기 위한 의존성 그룹
•
npm처럼 간편하게 디펜던시를 제공해주는데,
→ ex. JPA를 사용하는 경우 pom.xml(Maven), build.gradle(Gradle)에 spring-boot-starter-data-jpa 를 추가하면 springboot가 필요한 라이브러리를 자동주입해준다.
Spring, SpringBoot 차이점
•
Spring
◦
종속성 주입(dependency의 호환되는 라이브러리 버전을 맞춰줘야 한다.)하나의 버전을 올리는 경우 다른 dependency에 영향을 미쳐 버전관리에 어려움이 있다
◦
XML 설정 요함
◦
어노테이션 및 빈 등록 등의 configuration 설정을 모두 해줘야한다
◦
war파일을 Web Application Server에 담아 설정을 통해 배포
•
SpringBoot
◦
springboot 내부에 Tomcat이 내장되어 있어서 (Embed Tomcat 사용)따로 Tomcat을 설치하거나 매번 버전 관리를 하지 않아도 된다
◦
spring starter를 통한 dependency 라이브러리 버전 자동화(자동 구성)
◦
XML 설정을 하지 않아도 된다
◦
Spring Actuaor를 이용한 애플리케이션의 모니터링과 관리 제공
◦
내장 WAS를 가지고 있기 때문에 jar file을 이용해 자바 옵션만으로 손쉽게 배포 가능
◦
configuration을 application.properties파일이나 application.yml파일에 설정
◦
@SpringBootApplication을 통해 외부 라이브러리, 내장 톰캣 서버 등이 실행
▪
@ComponentScan : controller, service, repository, component 자동 Bean 등록
▪
@EnableAutoConfiguration : @ComponentScan 이후 사전에 정의한 라이브러리 Bean 등록
한 줄 정리
Spring 은 기존의 EJB를 대신해 자바 애플리케이션을 더 쉽게 만들 수 있게 해 준다.
스프링은 POJO 프로그래밍을 지향하는 특징을 가지며 그를 위해 IoC/DI, AOP, PSA를 지원한다.
Spring Boot Framework는 Spring Framework보다 개발자가 개발에만 집중할 수 있도록 도와주는 프레임워크이다.