Spring vs SpringBoot?

최혜원·2021년 12월 29일
0

기존의 Spring과 SpringBoot의 차이점, SpringBoot의 장점에 대해서는 알고 있었으나 면접에서 SpringBoot에 대한 단점 질문이 들어왔을때, 단점에 대해서는 생각해본 적이 없어 당황한 기억이 있다. 현재 SpringBoot를 이용한 백엔드 업무를 희망하는 만큼 장단점뿐만 아니라 Spring과의 차이점 등 세세한 설명에 대해 막힘없이 말할 수 있을만큼 이해하는 것이 좋다고 판단하여 포스팅을 작성하게 되었다.

Spring?SpringBoot?🤔

Spring이란 Java를 기반으로한 프레임워크이다. Spring의 초기환경설정에서 시간이 많이 걸리는 이유로 개발자가 비즈니스 로직에 집중할 수 있도록 SpringBoot가 등장하게 되었다.

Spring의 특징

IOC ; 제어의 역전

제어의 역전이란 사용자의 제어권을 다른 주체에게 넘기는 것이다. Spring의 Ioc란 클래스 내부의 객체 생성 -> 의존성 객체의 메소드 호출이 아닌, 스프링에게 제어를 위임하여 스프링이 만든 객체를 주입 -> 의존성 객체의 메소드 호출 구조이다. Spring에서는 Spring Container에 Bean을 등록하기만 하면 Bean의 생명주기를 관리해준다.
따라서 제어의 역전을 통해 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있도록 하여 가독성을 높이고 코드의 중복을 줄여 유지보수에 용이하게 도와준다.

DI ; 의존성 주입

객체를 직접 생성하는 방식이 아닌 객체를 외부에서 생성해서 사용하려는 주체 객체에 주입시켜주는 방식으로 DI를 통해 모듈의 결합도가 낮아진다.

DI가 없을 때

@RestController

public class MyController {
    private MyService service = new MyService();

    @RequestMapping("/welcome")
    public String welcome() {
        return service.retrieveWelcomeMessage();
    }
}

new를 이용하여 객체를 생성하게 된다면 MyService클래스에 의존하게 되고 객체의 결합도가 높아진다.
-> MyController 클래스는 MyService에 의존성을 가진다. 즉, MyService에서 수정이 일어나면 MyController도 수정된다.

DI가 있을 때

@Component
public class MyService {
    public String retrieveWelcomeMessage(){
       return "Welcome to InnovationM";
    }
}

@RestController
public class MyController {

    @Autowired
    private MyService service;

    @RequestMapping("/welcome")
    public String welcome() {
        return service.retrieveWelcomeMessage();
    }
}

Autowired 어노테이션을 통해 쉽게 MyService의 객체를 얻을 수 있다.

AOP ; 관점지향 프로그래밍

AOP는 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 공통된 로직이나 기능을 하나의 단위로 묶는 것이다.

SpringBoot 장점과 단점

장점

  • spring-boot-starter을 통한 dependency 자동화
    기존 Spring을 사용할 때는 버전까지 명시하고 설정을 따로 해주어야했지만, SpringBoot는 spring-boot-starter를 이용하여 종속된 모든 라이브러리를 알맞게 가져오기 때문에 버전관리에 신경쓰지 않아도 된다.

  • Embed Tomcat
    SpringBoot는 내장형 톰캣을 가지고 있기 때문에 별도의 어플리케이션 서버를 가질 필요가 없어 실행 결과를 빠르게 볼 수 있다.

  • 자동설정 (AutoConfigurator)
    SpringBoot는 자동설정(AutoConfiguration)을 이용하여 DispatcherServlet 설정, JDBC 설정 등을 제공하며 복잡한 XML 설정을 하지 않아도 개발이 가능하다.

  • 독립적으로 실행가능한 JAR
    SpringBoot는 독립적으로 실행 가능한 애플리케이션을 빠르게 개발하는 것을 목표로 하기 때문에 웹 애플리케이션도 WAR가 아닌 JAR파일로 패키징 하여 사용할 수 있다.

단점

  • 설정을 커스터마이징하는 경우 기존의 스프링 프레임워크를 사용하는 것과 같은 불편함이 있을 수 있다.
  • 설정을 변경하고 싶은 경우 내부 코드를 살펴봐야하는 불편함이 있을 수 있다.
참고
profile
멋쟁이 개발자가 될꺼야

0개의 댓글