ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] SpringFramework, SpringBoot의 개념 및 차이점
    Spring 2024. 5. 16. 23:11

     

    Spring Framework

    • Java 기반의 오픈소스 Back=end 프레임워크이다.
    • Java 애플리케이션을 구축하기 위한 종합적인 프레임워크이다.
    • 주로 엔터프라이즈급 애플리케이션을 만들 때 사용되며, 종속성 주입(Dependency Injection)과 관점 지향 프로그래밍과 같은 핵심 기능을 제공한다.
    • Spring은 다양한 모듈로 구성되어 있어서 웹 개발부터 데이터 액세스, 보안, 트랜잭션 관리등 다양한 영역에서 사용할 수 있다.

    Spring Framework를 사용하는 이유 및 장점

    •  경량화와 모듈화 
      • 경량화된 구조를 가지고 있으며 필요한 기능을 모듈화 하여 제공한다.
      • 이는 개발자가 필요한 모듈만 선택하여 사용할 수 있고, 필요한 경우 다른 모듈로 쉽게 확장할 수 있다는 장점을 제공한다.
    •  의존성 주입 
      • Spring은 의존성 주입을 통해 객체 간의 결합도를 낮추고 코드의 재사용성을 높인다.
      • 이는 객체 간의 의존성을 외부에서 주입받기 때문에 유닛 테스트 작성이 용이하며, 코드의 유지보수성을 향상시킨다.
    •  관점 지향 프로그래밍
      • Spring은 AOP를 지원하여 횡단 관심사를 분리하여 관리할 수 있다.
      • 이는 예를 들어 로깅, 트랜잭션 관리, 보안 등과 같은 부가적인 기능을 모듈화 하여 중복을 줄이고 코드의 가독성을 높인다.
    •  트랜잭션 관리
      • Spring은 트랜잭션 관리를 지원하여 데이터베이스와 같은 리소스의 일관성을 보장한다.
      • 이는 애플리케이션에서 발생하는 데이터 변경 작업을 안전하게 처리할 수 있도록 도와준다.
    • 웹 개발 지원
      • Spring은 Spring MVC와 같은 모듈을 통해 웹 애플리케이션 개발을 지원한다.
      • 이는 웹 요청과 응답 처리를 위한 강력한 기능을 제공하며, RESTful 웹 서비스를 구축하는 데도 도움이 된다.
    •  커뮤니티 및 생태계
      • Spring은 거대한 개발자 커뮤니티와 활발한 생태계를 가지고 있습니다.
      • 이는 문제 해결에 도움을 받을 수 있는 수많은 자료와 라이브러리가 존재한다는 것을 의미합니다.

    Spring Framework의 특징

     

    DI(Dependency Injection)

    • 의존성을 주입하면서 객체 간 결합을 느슨하게 하는 것
    • 결합이 느슨해지면 코드의 재사용성이 증가하고, 단위 테스트가 용이해진다. 

    IoC(Invension of Control)

    • 컨트롤의 제어권이 프레임워크에게 있는 것을 말한다.
    • Servlet이나 Bean 같은 코드를 개발자가 직접 작업하지 않고, 프레임 워크가 대신 수행한다

    AOP(Aspect Oriented Programming)

    • 핵심기능을 제외한 부수적인 기능을 프레임워크가 제공한다.
    • 예를 들어 Spring 프로젝트에 security를 적용하거나, logging 등을 추가하고 싶을 때 기존 비즈니스 로직을 건드리지 않고 AOP로 추가할 수 있다.

    중복 코드 제거

    • JDBC 같은 템플릿을 사용할 때 중복되는 코드도 많고 복잡한데 이를 모두 제거해 준다.

    다른 프레임워크와의 통합

    • JUnit, Mockito와 같은 유닛 테스트 프레임워크와 통합이 가능하다.
    • 이를 통해 개발하는 프로그램의 품질이 향상된다.

    Spring Boot

    •  Spring Boot는 Spring 기반의 애플리케이션을 빠르고 쉽게 개발할 수 있도록 도와주는 프레임워크이다.
    • Spring Boot는 애플리케이션을 빌드하고 구성하는 데 필요한 많은 설정을 자동화하여 개발자가 빠르게 시작할 수 있도록 한다.
    • 내장된 서버를 사용하여 애플리케이션을 실행할 수 있고, 간단한 설정으로 모니터링 및 관리 기능을 추가할 수 있다.

    Spring Boot Framework와 Spring Framework의 차이점

    • 스프링 부트는 단독적이고, 상용화 수준의, 스프링 기반 애플리케이션을 단지 실행할 수 있을 정도로 쉽게 만들 수 있다.

    1. Dependency

    • SpringFramework의 경우 dependency를 설정해 줄 때 설정 파일이 매우 길고, 모든 dependency에 대해 버전 관리도 하나하나 설정해 주어야 한다.
    • SpringBootFrmework의 경우 dependency를 Spring Framework보다 쉽게 설정해 줄 수 있다, 버전관리도 자동으로 해준다.
    • 빌드 툴을 Gradle을 사용하는 경우 build.gradle파일에 dependency를 추가해 주면 Spring Boot로 웹 개발을 할 때 필요한 모든 dependency를 자동으로 추가하고 관리해 준다.
    • spring Framework의 경우 test프레임워크를 사용하고자 하는 경우 Spring Test, JUnit, Hamcrest, Mockito 등 모든 라이브러리를 추가해줘야 하지만, Spring Boot에서는 spring-boot-starter-test 만 추가해 주면 된다. 

    2. Configuration

    • Spring Framework의 경우 configuration설정을 할 때도 매우 길고, 모든 어노테이션 및 빈 등록 등을 설정해 줘야 한다.
    • Spring Boot Framework는 application.properties파일이나 application.yml파일에 설정하면 된다.
    • Spring Boot의 강력한 AutoConfiguration
      • Spring Frame와 달리 Spring Boot에는 AutoConfiguration이라는 것이 있다.
      • Spring Boot로 실행할 수 있는 애플리케이션을 만들기 시작하면 클래스에 @SpringBootApplication이라는 어노테이션을 확인할 수 있다.
      • 이 어노테이션을 제거하고 프로그램을 실행하면, 일반적인 자바 프로그램과 동일하게 실행됩니다.
      • 해당 어노테이션 덕분에 많은 외부 라이브러리, 내장 톰캣 서버 등이 실행될 수 있습니다.
    • @ComponentScan
      • @Component, @Controller, @Repository, @Service라는 어노테이션이 붙어있는 객체들을 스캔해 자동으로 Bean에 등록해 준다.
      •  
    • @EnableAutoConfiguration
      • @ComponentScan 이후 사전에 정의한 라이브러리들을 Bean에 등록해 준다.
      • 사전에 정의한 라이브러리들은 다음 경로에서 확인할 수 있다.
      • 하지만 사전에 정의한 라이브러리라고 전부 Bean에 등록되진 않는다.
      • EnableAutoConfiguration을 키로 하는 외부 의존성들을 확인할 수 있습니다.
      • 이 의존성들을 모드 스캔하며 조건에 따라 의존성을 주입해 줍니다. 

    3. 편리한 배포

    • Spring Framework로 개발한 애플리케이션의 경우, war파일을 Web Application Server에 담아 배포할 수 있다.
    • Spring Boot Framework의 경우, Tomcat이나 Jetty 같은 내장 WAS를 가지고 있기 때문에 jar 파일로 간편하게 배포할 수 있다.
    • Spring Framework로 WAS를 정하고, 모든 설정을 마쳐 배포를 하는 것보다 훨씬 간단한 배포 방법이다.

    Summary

    • springFramework : Java 애플리케이션을 구축하기 위한 종합적인 프레임워크이다.
    • springBoot : Spring 기반의 애플리케이션을 빠르고 쉽게 개발할 수 있도록 도와주는 프레임워크이다.
    • 차이점 : dependency, configuration, 편리한 배포등이 sping과 springboot의 차이점이라고 할 수 있다.
    • dependency와 configuration은 springBoot가 더 편리하게 사용이 가능하다고 할 수 있으며, 배포 같은 경우는 springframework가 더 편리하게 배포할 수 있다고 할 수 있다.
kimjihoon