Spring과 Spring Boot 차이

한서현·2022년 6월 30일
1
post-thumbnail

Spring Framework

자바(JAVA) 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로서 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다.
자바 언어의 가장 큰 특징은 객체 지향 언어라는 것인데 스프링은 이런 특징을 잘 살려낸 프레임워크로, 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와준다.

특징

  • IoC(Invertion of Control)
  • DI(Dependency Injection)
  • AOP(Aspect-Oriented Programming)

IoC/DI

IoC는 '제어의 역전'이란 말로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.
객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.

DI는 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로,
객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다.
DI를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

  1. 객체 생성
  2. 의존성 객체 주입(제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입)
  3. 의존성 객체 메소드 호출

스프링에서는 객체의 생성과 소멸에 관련된 작업을 자동적으로 수행해주는데 객체가 생성되는 곳을 스프링에서는 Bean 컨테이너라고 부른다. 스프링에서는 객체를 Bean이라고 부르며, 프로젝트가 실행될때 사용자가 Bean으로 관리하는 객체들을 자동으로 생성해준다.

AOP

관점 지향 프로그래밍.
어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 코드들을 관점을 기준으로 나누어서 각각 모듈화하겠다는 의미.
이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는 데 이것을 흩어진 관심사(Crosscutting Concerns)라 부르고, 흩어진 관심사를 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지이다.



Spring Boot의 필요성

Transaction Manager, Hibernate Datasource, Entity Manager, Session Factory 등과 같은 설정을 하는데에 어려움이 많이 있다.
최소한의 기능으로 Spring MVC를 사용하여 기본 프로젝트를 세팅하는데 개발자에게 너무 많은 시간이 걸린다.


Spring Boot

스프링(Spring)을 더 쉽게 이용하기 위한 도구.
스프링 이용하여 개발을 할 때, 이것저것 세팅을 해야 될 요소들이 많다. 여러가지를 세팅해야되는 진입 장벽이 존재하여 처음 배우려는 사람들은 중도에 그만두는 경우가 많다고 한다. Spring Boot는 매우 간단하게 프로젝트를 설정할 수 있게 하여, Spring 개발을 조금 더 쉽게 만들어주는 역할을 하고 있다.

특징

  • 내장 웹서버 제공

    Embedded Tomcat을 사용(Spring Boot 내부에 Tomcat이 포함)하기 때문에 따로 Tomcat을 설치하거나 매번 버전을 관리해 주어야 하는 수고로움을 덜어준다.
  • starter 를 통한 dependency 자동화

    과거 Spring framework에서는 각각의 dependency들의 호환되는 버전을 일일이 맞추어 주어야 했고, version관리에 어려움이 많았다. 하지만 starter가 이를 관리해준다.
  • XML설정 불필요

  • jar file을 이용해 자바 옵션만으로 손쉽게 배포가 가능

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



Spring Boot Starter 옵션들

spring-boot-starter-*

*부분에 원하는 스타터명을 명시하면 된다.
손쉽게 원하는 라이브러리를 import 할 수 있다.

  • spring-boot-starter-web-services : SOAP 웹 서비스
  • spring-boot-starter-web : Web, RESTful 응용프로그램
  • spring-boot-starter-test : Unit testing, Integration Testing
  • spring-boot-starter-jdbc : 기본적인 JDBC
  • spring-boot-starter-hateoas : HATEOAS 기능을 서비스에 추가
  • spring-boot-starter-security : 스프링 시큐리티를 이용한 인증과 권한
  • spring-boot-starter-data-jpa : Spring Data JPA with Hibernate
  • spring-boot-starter-cache : 스프링 프레임워크에 캐싱 지원 가능
  • spring-boot-starter-data-rest : Spring Data REST를 사용하여 간단한 REST 서비스 노출



✔ Springboot는 Spring을 편리하게 사용할수 있게 만들어진 업그레이드된 Spring!






















참고 자료

henjun's dev journal:티스토리
새로비:티스토리
코딩하는흑구:티스토리

profile
하다보면 나아지겠쬬?

0개의 댓글