Spring 이란??
- Java 기반의 오픈소스 Back-end 프레임워크이다.
- 스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 간단히 스프링(Spring)이라고도 불린다
- 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다.
- Java의 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크이다
정적 페이지: 여러 유저들이 접속시, 모두 같은 정보를 페이지에서 보여는 페이지
동적 페이지: 대부분의 웹사이트 페이지로써, 원하는 페이지로 계속 바꿔주는 페이지
즉, 좋은 객체 지향 프로그래밍에 대해 아는 것이 Spring 공부의 시작이다
Spring 장점
제어 역전(IOC)
- 스프링은 객체의 생명 주기 및 의존성 관리를 담당하는 IoC 컨테이너를 제공한다
- 개발자는 객체의 생성과 관계 설정을 스프링에 위임할 수 있으며, 스프링 컨테이너가 객체의 생명 주기를 관리하고 필요한 의존성을 주입한다
의존성 주입(DI)
- 스프링은 의존성 주입을 통해 객체 간의 관계를 설정한다
- 의존성 주입은 애플리케이션의 결합도를 낮추고 유연성과 테스트 용이성을 향상시킨다
- 순수 JAVA 코드에서는 합성을 통해, DI를 진행했다
AOP지원(관점 지향 프로그래밍)
- 스프링은 AOP를 지원하여 애플리케이션의 핵심 비즈니스 로직과 부가적인 기능(로깅, 트랜잭션 관리 등)을 분리하여 모듈화할 수 있다
웹 개발 지원
- 스프링은 웹 애플리케이션 개발을 위한 다양한 기능과 웹 프레젠테이션 계층을 제공한다
- 스프링 MVC는 유연하고 확장 가능한 웹 애플리케이션을 개발할 수 있는 MVC(Model-View-Controller) 아키텍처를 지원한다
이러한 특징들은 스프링을 사용하여 애플리케이션을 더 유연하고 모듈화된 구조로 개발하고 관리할 수 있도록 돕는다
Spring Boot는 ??
- 스프링을 편리하게 사용할 수 있도록 지원하는 프레임워크이고 최근에는 기본으로 사용한다
- 스프링 부트를 사용하면 내장형 서버를 사용하여 별도의 웹 애플리케이션 서버(Web Application Server)를 설치할 필요 없이 애플리케이션을 실행할 수 있다
- 다양한 스프링 프레임워크 기능과 라이브러리, 서드파티 라이브러리와의 통합을 간편하게 구성할 수 있다
간결한 설정
- 스프링 부트는 번거로운 XML 설정이 필요 없으며, 최소한의 설정으로 Spring을 사용할 수 있고, 기본적인 설정을 자동으로 처리하므로 개발자가 많은 설정 작업을 하지 않아도 된다
- 설정으로 인한 불편사항을 해소하여 개발자는 애플리케이션 개발에 집중할 수 있다
내장 서버
- 스프링 부트는 내장된 서버(내장 Tomcat, Jetty, Undertow)를 제공하여 별도의 서버 설정 없이 애플리케이션을 실행할 수 있다
- 배포를 위해 War 파일을 생성해서 Tomcat에 배포할 필요 없으며, JAR 파일에는 모든 의존성 라이브러리가 포함되어 있어 외부 서버 없이도 애플리케이션을 실행할 수 있다
- 이는 애플리케이션의 배포와 관리를 간편하게 만들어 준다
의존성 관리 간소화
- 스프링 부트는 여러 3rd party 라이브러리를 사용할 때, 발생하는 라이브러리 버전 충돌로 인한 문제를 해결하기 위해서, 이미 테스트된 여러 라이브러리들의 묶음 패키지를 제공한다
- 또한 버전을 지정해서 다운을 받을 수 있다
- 3rd party 의존성 관리를 용이하게 하기 위한 ‘starter’ 의존성 통합 모듈을 제공하여 Maven/Gradel 설정 시 버전 관리가 간편하다
- 스프링 부트에서 제공하는 의존성 세트를 통해 개발자는 버전 충돌이나 복잡한 의존성 설정에 대해 걱정하지 않고 필요한 의존성을 쉽게 지정할 수 있다
운영 편의성
- 스프링 부트는 애플리케이션의 상태 모니터링, 로깅, 보안 설정 등 운영에 필요한 기능들을 제공한다
- 이를 통해 애플리케이션의 운영과 관리가 편리해지고 안정성이 향상된다
객체 지향 설계와 스프링
- 스프링 이야기에 왜 객체 지향 이야기가 나올까?
- 스프링은 Java의 객체지향의 특징을 잘 살린 프레임워크이기 때문이다
실제로, Java로 OCP,DIP 원칙을 잘 지키는 코드를 만들기는 어렵고, 시간도 많이든다
- 스프링은 DI, DI 컨테인로 의존관계를 관리하고, 그를 통해 다형성 + OCP,DIP를 가능하게 지원한다
- 가장 중요한 ✅ 변경에 유연한 설계! 즉, 클라이언트 코드의 변경없이 기능을 변경 및 확장할 수 있다는 것이다
클라이언트 : 요청
서버 : 응답
- 수 많은 객체 클라이언트와 객체 서버는 [메시지]를 통해 서로 [협력 관계]를 갖는다