///////
Search
🐂

Spring, Spring Boot의 차이점에 대해 각각 설명해 주세요.

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보다 개발자가 개발에만 집중할 수 있도록 도와주는 프레임워크이다.