스프링과 스프링부트

김운채·2024년 3월 9일
0

Spring

목록 보기
2/10

Spring 과 Springboot 의 차이를 알아보는 글이긴한데,
단순히 스프링을 더 쉽게 사용할 수 있게 한 것이 스프링부트다~ 라는 설명은 간지가 안나서 좀 더 자세히 알아보려한다.

Spring Framwork & Spring Boot

Spring과 Spring Boot는 모두 스프링 프레임워크를 기반으로 한 자바 웹 개발 프레임워크이다.

프레임워크
'FRAME 프레임(틀, 규칙or법칙)'+'WORK 워크(일, 소프트웨어의 목적)' 로, 어떤 개발이나 소프트웨어든 일종의 규칙이 있고, 그 규칙을 정하는 일이다.
밀키트처럼 주어진 재료만 써서 가이드대로 만들면 요리가 완성 되도록 한 것처럼, 프레임워크는 목적에 따라 효율적으로 구조를 짜놓은 개발 방식이다.

Spring

스프링은 Java 기반 애플리케이션 개발을 지원하는 오픈소스 애플리케이션 프레임워크로, 성의있는 풀네임은 Spring framework 이다.

옛날옛날에는 EJB(Enterprise Java Bean) 방식의 기술을 이용해서 웹 애플리케이션을 서비스했었다. 하지만 특정 회사의 EJB 컨테이너 없이는 기술 구현이나 프로그래밍 모델의 복잡성, 테스트 자동화가 어려운 단점을 가지고 있었다.

그래서 EJB 요것이 불필요하게 복잡했기 때문에 이것을 해결하기 위해 나온게 스프링이다.
스프링이 지향하는 목적은 단순하고 명쾌한 접근, 단순한 객체지향적인 개발 모델인 POJO 프로그래밍이다.

POJO(Plain Old Java Object)
특정한 규약이나 프레임워크에 종속되지 않는 간단하고 순수한 자바 객체를 의미한다.
객체지향 개발원칙에 충실한 객체를 말하며, 특정한 제약이나 요구사항에 종속되지않고 확장 가능한 코드를 작성할 수 있도록 한다.

Spring 공식 문서의 일부분을 보면 Spring의 뜻은 '봄'으로, 개발자에게 겨울은 끝나고 봄이 왔다 라는 내용이 있다. 거의 전쟁을 끝내러온 정상전쟁 샹크스 급

Whatever happened next, the framework needed a name. In the book it was referred to as the “Interface21 framework” (at that point it used com.interface21 package names), but that was not a name to inspire a community. Fortunately Yann stepped up with a suggestion: “Spring”. His reasoning was association with nature (having noticed that I'd trekked to Everest Base Camp in 2000); and the fact that Spring represented a fresh start after the “winter” of traditional J2EE. We recognized the simplicity and elegance of this name, and quickly agreed on it.

스프링은 다양한 모듈과 설정 옵션을 제공하여 개발자가 필요한 기능을 선택하고 구성할 수 있도록 한다.

유연성과 확장성이 뛰어나, 여러 프레임워크를 함께 사용하게 해주는 접착 프레임워크라고도 불린다. ex)JUnit, Mockito

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

스프링의 특징

스프링은 다음과 같은 특징들을 가지고있다.
스프링을 사용한다는 것은 이 세가지 요소를 활용해서 개발한다는 뜻이기도 하다. 이는 POJO 프로그래밍을 IoC/DI, AOP, PSA를 통해서 달성할 수 있다는 뜻이다.
이 글에서는 자세하게 다루지는 않고 간단히만 설명한다.

1.IoC/DI

  • IoC(Inversion of Control): 제어의 역전이라는 의미로, 애플리케이션 흐름의 주도권이 뒤바뀐 것을 말한다. 쉽게 말해 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.
  • DI(Dependency Injection): 의존성 주입이라는 의미로, 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입 시켜주는 방법을 말한다.

2. PSA
Portable Service Abstraction, 하나의 추상화로 여러 서비스를 묶어둔 것, 환경의 변화와 관계없이 일관된 방식으로 기술에 접근할 수 있는 환경을 제공하려는 추상화 구조를 말한다.

3. AOP
Aspect Oriented Programming, 관점 지향 프로그래밍
어떤 로직을 기준으로 핵심적인 관점, 공통적인 관점(부가적인 관점)으로 나누어서 보고 그 관점을 기준으로 모듈화하겠다는 의미이다.

스프링의 단점

스프링은 많은 설정과 구성을 필요로 한다.
개발자가 직접 설정파일을 작성하여 스프링 컨테이너를 구성하고, 필요한 빈 객체를 등록하고, 객체간의 의존성을 설정해줘야 한다.

단점들을 나열해보자면

1. 설정의 복잡성
말했듯이 스프링은 개발유연성이 좋고 기능이 많은 대신, 초기에 많은 설정과 구성이 필요하다.

2. 의존성 관리 문제
의존성 주입(Dependency Injection)을 구현하기 위해 XML 설정 파일에 많은 수의 빈을 등록해야 한다. 이는 코드의 가독성을 떨어뜨릴 수 있고, 의존성 관리가 어려워질 수 있다.

3. 별도 WAS 서버 구성의 번거로움
스프링을 웹상에서 사용하기 위해서는 별도의 Web Application Server(WAS)를 설치하고, 설정해야한다.
또한, 애플리케이션을 서비스하기 위해서 별도의 서버에 수동으로 배포해야 하는 번거로움이 있다.

이런것들이 초보자에게는 진입장벽이 높다고 느껴질 수 있다.

이런 단점들을 해결하기 위해 스프링부트가 등장하게 된다.

Spring Boot

스프링 부트는 위와 같은 스프링의 문제점을 해결해 주기 위해 개발된 스프링의 프레임워크다. 개발자들이 더 쉽고 빠르게 스프링 애플리케이션을 개발하도록 도와주기 위해 개발되었다.
다음과 같이 스프링의 단점을 하나하나 반박해주는 스프링부트의 장점을 살펴보자.

1. 설정 단순화
스프링 부트에서는 개발자가 직접 설정 파일을 작성할 필요 없이, 프로젝트의 설정과 라이브러리 의존성을 자동으로 처리해주는 기능을 제공한다. 이를 통해 개발자들이 빠르게 개발할 수 있도록 지원한다.

2. 내장 서버
또한, 내장 서버를 사용하여 별도의 WAS를 설치할 필요 없이 애플리케이션을 실행할 수 있다.

3. 의존성 관리 간소화
애증의 XML을 사용하지 않아도 starter 를 통해 의존성을 관리 할 수 있다.

Spring boot starter
starter란 특정 목적을 달성하기 위한 의존성 그룹이라고 생각하면 이해하기 쉽다.
starter는 간편하게 dependency를 제공해주는데, 만약 우리가 JPA가 필요하다면 prom.xml(메이븐)이나 build.gradle(그레이들)에 'spring-boot-starter-data-jpa'만 추가해주면 spring boot가 그에 필요한 라이브러리들을 알아서 받아온다.

또한, 스프링에서는 각각의 의존성에 호환되는 버전을 일일히 맞춰주어야 했는데 이제 starter 가 대부분의 의존성을 관리해주기 때문에 버전 관리도 편리해졌다.
써비스로 스프링 부트에서는 Actuator 기능으로 애플리케이션의 상태를 모니터링하고, 필요한 조치를 취할 수 있도록 해준다.

Conclusion

스프링과 스프링 부트에 대한 차이를 알아봤는데, 이러한 차이들은 이 둘의 사용목적과 방식을 따라 선택지를 준다.

스프링은

  • 스프링 프레임워크를 보다 세밀하게 제어하고자 하는 경우

스프링 부트는

  • 스프링 프레임워크를 보다 세밀하게 제어하고자 하는 경우
  • 빠르고 간단하게 스프링 애플리케이션을 개발하고자 하는 경우

0개의 댓글