기본적으로 프로그래밍을 하기 위한 어떠한 틀이나 구조
재사용 가능한 기능과 라이브러리의 집합으로 구성되어 개발자가 응용 소프트웨어를 더 쉽게 개발하고 구축할 수 있도록 지원하는 도구나 환경
애플리케이션을 개발하는 데 필요한 기능을 미리 구현해 놓은 일련의 데이터 및 프로그래밍 코드
다양한 기능을 제공하는 부품
애플리케이션에 대한 제어권의 차이

한번 정해진 Framework를 교체하는 일은 어렵지만,
Library는 쉽게 교체가 가능하며 필요한 Library들을 선택적으로 사용할 수 있다!
💻 예시 코드
@SpringBootApplication
@RestController
@RequestMapping(path = "/v1/message")
public class SampleApplication {
@GetMapping
public String getMessage() { // (2)
String message = "hello world";
return StringUtils.upperCase(message); // (1)
}
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
(1) StringUtils.upperCase(message)
: 개발자가 짜 놓은 코드 내에서 필요한 기능이 있으면 해당 라이브러리를 호출해서 사용하는 Library

(2) getMessage() 메서드 , SpringApplication.run() 메서드 등
: 메서드 내에 개발자가 코드를 작성해 두면 Spring Framework에서 개발자가 작성한 코드를 사용해서 애플리케이션의 흐름을 만들어내는 Framework

Java 언어를 사용하는 Framework 가 Spring 만 있는건 아니지만, 기업의 입장에서 기업용 엔터프라이즈 시스템 개발에 있어 개발 생산성을 향상하고 애플리케이션의 유지 보수를 용이하게 하는 Framework의 기본 목적 그 이상을 달성할 수 있게 해 인기가 많다!
클라이언트 측 html/Javascript 코드와 서버 측 Java 코드가 한 곳에 섞여 있는 방식
가독성과 유지 보수가 최악
서블릿은 클라이언트 웹 요청 처리에 특화된 Java 클래스의 일종으로
서블릿 방식은 클라이언트 측 코드에서 분리되어 별도의 Java 클래스로 관리하는 것을 의미
그러나, 여전히 직접 코드로 작성하는 부분이 많아 가독성이 떨어짐
++ Java Servlet 은 Spring MVC 같은 Java 기반의 웹 애플리케이션 내부에서 여전히 사용
++ 서블릿 컨테이너(Servlet Container)
++ 아파치 톰캣(Apache Tomcat) : 서블릿 컨테이너의 한 종류로써 Spring MVC 기반의 웹 애플리케이션 역시 기본적으로 아파치 톰캣에서 실행
특정 기능들을 Spring에서 알아서 처리하여 코드가 간결
그러나, 애플리케이션의 기본 구조를 잡는 설정 파일 작성 작업이 여전히 불편하다는 단점이 존재
그 많던 설정 파일을 Spring이 대신 처리를 해주기 때문에 개발자는 애플리케이션의 핵심 비즈니스 로직에만 집중