본문 바로가기
야미스터디/Spring

[Spring] Spring vs Spring Boot 📌

by 의정부핵꿀밤 2022. 8. 2.
728x90

Spring🍃 (Sprinig Framework)

Spring 구조

개발자들의 겨울은 끝났다

Spring Framework는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로, 간단히 Spring이라고 불린다

동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다

대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준 프레임워크의 기반 기술로 사용된다

 

 

 

Spring의 장점

  • 경량 컨테이너
  • IoC (Invertion of Control : 제어의 역전)
    • 객체의 생성을 특별한 관리 위임 주체에게 맡긴다
    • 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체가 다른 주체가 된다
    • 즉, 사용자의 제어권을 다른 주체에게 넘기는 것을 IoC라고 한다
    • Spring의 IoC란 클래스 내부의 객체 생성 -> 의존성 객체의 메소드 호출 이 아닌 스프링에게 제어를 위임하여 스프링이 만든 객체를 주입 -> 의존성 객체의 메소드 호출 구조이다
  • DI (Dependency Injection : 의존성 주입)
    • 어떤 객체를 사용하는 주제가 객체를 직접 생성하는게 아니라 객체(B)를 외부(Spring)에서 생성해서 사용하려는 주체 객체(A)에 주입시켜주는 방식이다
    • 이렇게 외부에서 직접 생성하여 관리하는 경우에는 객체 간의 의존성이 줄어든다
  • AOP(Aspect-Oriented Programming : 관점 지향 프로그래밍)

 

 

 

 

Spring Boot ♻

Spring Boot 구조

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run"
▷ Spring Boot는 그냥 실행시키면 되는 단독적인 상용화 수준의 스프링 기반 애플리케이션을 쉽게 만들 수 있도록 해준다!

 

Spring Boot : Spring을 더 쉽게 이용하기 위한 도구

 

  • Spring Framework는 기능이 많은만큼 환경 설정이 복잡한 편이다
  • 이에 어려움을 겪는 사용자들을 위해 나온 것이 Spring Boot이다
  • Spring Boot는 Spring Framework를 사용하기 위한 설정의 많은 부분을 자동화하여 사용자가 보다 편하게 Spring을 사용할 수 있도록 해준다
  • Spring 프레임워크를 쉽게 사용할 수 있는 라이브러리이다!
  • Spring Boot는 starter dependency만 추가하면, 바로 API를 정의하고 내장된 Tomcat이나 Jetty로 웹 애플리케이션 서버를 실행할 수 있다
  • 심지어 Spring 홈페이지의 initializer를 사용하면 바로 실행 가능한 코드를 만들어준다
  • 실행 환경이나 의존성 관리 등의 인프라 관련 부분은 신경 쓸 필요 없이 바로 코딩을 하면 되는 것이다!

 

 

 

Spring Boot의 장점

1. 간편한 설정

2. 편리한 의존성 관리 & 자동 권장 버전 관리

3. 내장 서버로 인한 간단한 배포 서버 구축

4. 스프링 Security, Data JPA 등의 다른 스프링 프레임워크 요소를 쉽게 사용한다

 

즉, 개발자들이 개발에만 더욱 집중할 수 있도록 해준다

 

 

 

 

 

Spring vs Spring Boot

  • Spring Boot는 Spring Boot 내장 서버인 Embedded Tomcat을 사용하기 때문에 따로 Tomcat을 설치하거나 매번 버전 관리를 할 필요가 없다
  •  Spring Boot는 starter를 통한 dependecy 자동화가 이뤄진다
    • Spring Framework에서는 각각의 dependecy들이 호환되는 버전을 일일이 맞춰야 했기 때문에 하나의 버전을 올리기 위해 다른 dependency까지 바꿔야 한다는 버전 관리의 어려움이 있었다
    • 하지만 Spring Boot에서는 starter를 통해 대부분의 dependency를 관리할 수 있기 때문에 버전 관리가 편해졌다
  • XML 설정을 하지 않아도 된다
  • jar 파일을 이용해 자바 옵션만으로 손쉽게 배포가 가능하다
  • Spring Actuaor를 이용한 애플리케이션의 모니터링과 관리를 제공한다

1. dependency 관리

  • Spring 프로젝트를 구성하려면 필요한 라이브러리들에 대해 모두 알아야 하고 이들을 초반에 세팅해야 했다
  • 또한 구성을 하기 위해 모든 dependency들에 대한 버전 호환성도 알아야 하고, 버전 관리 또한 해야 했다
  • 그러나 Spring Boot에서는 spring-boot-starter를 통해 보다 쉽고 간편하게 dependency 설정이 가능하다

 

 

2. 설정 방법

  • Spring에서는 하나하나 bean을 생성하고 관리 또한 직접 해야 했다
  • 그러나 Spring Boot에서는 이 중 많은 부분을 @SpringBootApplication이라는 Spring Boot의 선언으로 간편하게 사용이 가능하다
  • @SpringBootApplication은 @Configuration + @EnableAutoConfiguration + @ComponentScan 을 뜻한다
  • 이를 통해 설정 자동화 및 Component Scan까지 하겠다는 뜻이다
  • @EnableAutoConfiguration은 Spring Boot의 meta 파일을 읽어서 미리 정의되어 있는 자바 설정 파일(@Configuration)들을 Bean으로 등록하는 역할을 수행한다
  • 이 때 meta 파일은 spring.factories 파일을 뜻한다

 

 

3. Embedded WAS

  • Spring으로 구성된 application은 일반적으로 WAS(Tomcat JEUS, WebLogic) 위에서 배포되어 동작된다
  • 하지만 Spring Boot에는 내장 WAS가 있어서 jar(또는 war)만 가지고 자체적으로 application을 실행시킬 수 있다
  • 이는 Container 환경에서 아주 유용하게 사용이 가능하다
  • Spring Boot는 여러가지 종류의 내장 WAS를 가지고 있고, 이 중 하나를 선택해서 사용 여부 또한 선택이 가능하다

 

 

 

 

Spring Boot Starter란?

spring-boot-starter-*
  • starter란 특정 목적을 달성하기 위한 의존성 그룹이라고 생각하면 쉽다
  • 마치 npm처럼 간편하게 dependency를 제공해주는데, 만약 우리가 JPA가 필요하다면 pom.xml(maven)이나 build.gradle(gradle)에 'spring-boot-starter-data-jpa'만 추가하면 spring boot가 그에 필요한 라이브러리를 알아서 받아온다
  • starter의 명명 규칙은 위와 같다
  • 위에서 * 부분에 원하는 스타터명을 명시하면 된다
  • 이를 통해 쉽게 원하는 라이브러리를 import 할 수 있다

 

💡 properties vs yml
yml 파일을 사용하면 중복 제거도 되고, 내용을 depth로 표현하기 때문에 훨씬 사람이 읽기 좋은 즉, humanable하게 설정 파일을 작성할 수 있다
[참고] yml 은 YAML에서 유래한 확장자이다

 

 

 

 

 

✨결론

  • Spring이 자유 여행이라면, Spring Boot는 패키지 여행같은 느낌이다
  • Spring은 dependency를 일일이 추가해줘야 하는 번거로움이 있지만, 최적화를 할 때는 강점이 있다
  • Spring Boot는 편하게 설정이 가능하지만, 수많은 dependency가 내재되어 있어 이를 최적화하기 위한 노력이 필요하다

 

 


참고)

https://melonicedlatte.com/2021/07/11/174700.html

 

스프링(Spring), 스프링 부트(Spring Boot)란? 개념 정리 - Easy is Perfect

 

melonicedlatte.com

https://oingdaddy.tistory.com/403

 

Spring vs Springboot 주요 차이점

Spring을 몇년동안 계속 써왔고 내가 잘한다고 생각되는 부분은 어느 상황에서 어느 library가 필요하고 이건 Spring의 몇 버전과 호환이 되고 설정파일(applicationContext)은 어떻게 구성을 해야 하고 등

oingdaddy.tistory.com

https://youtube.com/watch?v=6h9qmKWK6Io&feature=share 

 

728x90

댓글