Spring
JAVA 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
✚ 프레임워크
- 원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 뼈대
- 애플리케이션 개발 시 필수적인 코드, 알고리즘, DB 연동과 같은 기능 등을 도움
✚ 라이브러리
개발자가 필요에 따라 호출하여 사용할 수 있는 함수, 클래스, 변수 등으로 구성
개발에 필요한 것들을 미리 구현해 놓은 도구
Spring의 특징

POJO(Plain Old Java Object)
- 순수한 자바 객체:
- 특정 기술에 종속되지 않음
- Java 및 java의 스펙에 정의된 기술만 사용
➡️ 유연하게 변화와 확장에 대처 가능, 자바의 객체 지향 정신에 부합
IoC/DI(Inversion of Control / Dependency Injection)
- 제어의 역전 (IoC) : 메소드나 객체의 호출 작업을 개발자가 아닌 프레임워크가 담당
- 의존성 주입 (DI) : 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입시켜주는 방식
➡️ 모듈 간의 결합도가 낮아지고 유연성이 높아짐
AOP(Aspect Oriented Programming)
✚ 흩어진 관심사
소스 코드상에서 계속 반복해서 사용되는 부분
PSA(Portable Service Abstraction)
- 환경의 변화와 관계없이 일관된 접근 환경을 제공하는 추상화 구조
- Spring에서 동작할 수 있는 라이브러리들은 POJO 원칙을 지키게끔 PSA 형태의 추상화가 되어있음
- ex. Spring Web MVC, Spring Transaction, Spring Cache 등
➡️ 확장성이 좋고, 특정 기술에 종속되어 있지 않음
✚ 추상화
클래스들의 공통적인 요소를 뽑아서 상위 클래스를 만들어내는 것
Spring Boot
Spring Framework의 문제점
- 너무 많은 설정: 스프링의 발전으로 인한 기능 증가 ➡️ 세팅 증가
- 어려운 의존성 관리: Dependency 버전을 개발자가 관리해야 함
- 복잡한 배포: 내장 웹서버가 없어 간단하게 배포할 수 없음
➡️ 그래서 Spring Boot가 등장!
Spring Boot
- 최소한의 설정으로 스프링 프레임워크를 더욱 쉽게 사용할 수 있도록 돕는 도구
- 장점
- spring-boot-stater를 통한 dependency 관리 자동화
- 내장 Tomcat(내장 웹서버)
- 설정 자동화(AutoConfiguration)
- 독립적으로 실행 가능한 배포