Spring과 Spring boot 차이

ㅎㅎ·2023년 8월 27일
0

Spring 생태계

  • Spring의 생태계는 거대함. Spring FrameWork, Data, Security 등등....

  • Spirng Boot 또한 Spring Framework와 함께 Spirng 생태계를 구성하는 하나의 프로젝트

  • 이러한 프로젝트들은 하위 프로젝트(모듈)을 가지고 있음

    • 예를 들얼 Spring Framework에는 Spring Web MVC, Spirng JDBC, Spirng WebSocket, Spring AOP, Spring Aspects ... 등 다양한 하위 모듈 존재
  • Spring 프로젝트들은 모두 Spring Framework 기반으로 동작함. Spring Data JDBC, Spring Data JPA 등을 이용할 때 Framework 위에서 동작, Spring Framework가 가장 핵심.


Spirng과 Spring Boot?

Spring

  • Spirng Framework 정의: Spirng은 어떤 종류의 배포 플랫폼에서도 최신 "자바 기반" 기업용 어플리케이션을 위한 종합적인 프로그래밍 및 구성 모델을 제공해준다. Spring의 핵심 요소는 어플리케이션 수준에서의 인프라 지원이다. Spring은 기업용 어플리케이션의 plumbing에 초점을 맞춰 팀이 특정 배포 환경과 불필요한 시도 없이 어플리케이션 수준의 "비즈니스 로직에 집중" 할 수 있게 해준다.

  • 즉, 객체지향이 가진 특징을 잘 활용할 수 있게 해주면서, 다른 부분 신경쓰지 않고 비즈니스 로직에만 집중할 수 있게 해주는 프레임워크

  • 초기 Spring 기본 설정만 잘 해놓는다면, 스프링 관련 코드를 신경 쓸 일이 거의 없다.

  • DI와 IoC를 이용해 다형성을 통한 느슨한 결합을 활용할 수 있게 함

Spring boot

  • Spirng boot: Spring boot는 독립적이며, 운영 할 수 있는 수준의 Spring 기반 어플리케이션을 쉽게 만들 수 있게 해준다. 그냥 실행해라.
  • 최소한의 설정으로 Spring 플랫폼과 서드파티 라이브러리를 사용할 수 있다. 대부분 Spring Boot 어플리케이션은 최소한의 Spring 설정을 필요로 한다.
  • 쉽게 말해 Spring boot는 Spring 어플리케이션을 쉽게 만들 수 있게 해준다.

Q.Spring의 어떤 부분이 불편해서 boot가 쉽게 만들 수 있게 해주도록 등장한거지?

  • Spring Framework가 발달하면서 점차 설정할 것이 많아짐, 설정이 절반이라는 말이 있을 정도. Spring boot는 약간의 설정만으로 Spring 어플리케이션을 만들 수 있게 해줌.
  • Spring boot는 Spring 프로젝트 중 하나로 Spring Framework를 쉽게 사용하게 해주는 도구이지, Spring Framework와 별개로 사용할 수 있는 것이 아님.


Spring Boot를 사용하면 달라지는 점

  • 어떤 특징이 Spring Framework를 사용하기 쉽게 해줄까?

1.의존성 관리

  • 기존 Spring은 개발에 필요한 모듈의 의존성을 각각 다운받아 줘야했으며,각 모듈의 버전을 개발자가 하나하나 명시해줘야 함. 하지만 모듈간의 의존성이 존재하는 경우 버전때문에 충돌이 발생할 수 있고, 이러한 충돌을 개발자가 조정해줘야 함.(아래 Spring Dependency)
  • 하지만 Spring Boot는 "spring-boot-starter"를 지원해줌. 자주 사용하게 되는 모듈간의 의존성과 버전 조합을 제공해준다.(Boot의 Dependency), stater모듈이 관련된 많은 dependency를 전부 주입해줌.
  • 버전 명시를 안 해줬는데 어떻게 버전을 관리하나?
    • 사용하는 Boot의 version에 맞는 각 dependency를 미리 정의해놓았음.(Spring 진영이 test하고 구성해놓은 것이라 오류날 확률 적음), 이렇게 의존성을 관리하는 것이 쉬워져서, 하나하나 설정할 필요가 없어짐

2.자동 설정

  • 기존 Spring은 많은 환경 설정이 필요하다.

  • 데이터 베이스를 사용하기 위해, Spring Config, DB Config, View Resolver 등... 많은 설정 파일을 구성해야 함(혹은 root-context.xml, servlet-config.xml에 servlet관련, web 관련 여러 설정이 필요)

  • Spring Boot는 applicaition.yml or application.properties의 설정만으로 간단히 해결!

  • Spring만 사용할 때는 DataSource를 빈으로 등록해주고, jdbcTemplate도 bean으로 등록해주는 코드가 있었다.

  • 하지만 SpringBoot는 @SpringBootApplication의 어노테이션이 jar파일이 실행될 때 필요한 각 설정을 읽어서 자동으로 Bean 주입을 해준다.

  • @EnableAutoAConfiguration이 자동설정을 담당해주는 기능
    • @EnableAutoAConfiguration -> @Import -> getAutoConfigurationEntry 메소드 -> getCandidateConfigurations 메소드
    • 여기까지 타고 오면 spring.factories라는 자동 설정 관련 파일을 읽는 것을 알 수 있음, 자동 설정 후보 클래스들 중에 yml에 설정해놓은 것을 읽고 BEAN으로 등록함!

//실제 applicaion.yml의 일부
server:
  port: 8080

  servlet:
    context-path: /api
    encoding:
      charset: utf-8
      enabled: true
      force: true

spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB
  jpa:
    hibernate:
      ddl-auto: update

    properties:
      hibernate:
        format_sql: true
        jdbc:
          batch_size: 10000
          order_inserts: true
      dialect: org.hibernate.dialect.MySQL8InnoDBDialect
  • 만약 yml이 수정되면, 컴파일 타임에 spring-configuration-metadata.json파일이 자동생성되어 설정값들을 반영하여 주입함

정리
1.Classpath에 라이브러리 jar파일이 등록되면 spring.factories에 있는 관련 설정이 실행된다.
2.자동 설정 후보 클래스의 @Conditional~ 조건에 따라 빈으로 등록된다.
3.spring-configuration-metadata는 자동 설정에 사용할 프로퍼티 정의 파일로, application.yml에 작성한 값으로 프로퍼티를 세팅한 후, 구현되어 있는 자동 설정에 값을 주입시켜준다.

3.내장 WAS

  • Spring을 통해 웹 어플리케이션을 개발 하고 난후, 배포하려면

1) 어플리케이션 WAR 패키징
2) WAS 설치(Tomcat, Jetty.. 등)
3) WAS에 WAR 파일 올리기

  • Spring Boot는 WAS가 내장되어 있다.
  • Jar파일로 패키징해서 바로 배포 가능하다.

4.모니터링

profile
Hello World

0개의 댓글