안녕하세요, 도토리입니다.
잘못된 정보가 있거나 오류가 있으면 언제든지 댓글로 이야기 해주세요!! 😅
흔히들 많은 백엔드 어플리케이션으로 구동되고 있는 스프링 부트..!
그러나 간혹가다 보이는 스프링..! 하지만 둘이 이름도 비슷하고 뭐... 스프링 프레임워크에서 더 쉽게 쓰게끔 만들어진게 스프링 부트이고 스프링 부트가 더 가볍니 뭐니 이런 이야기만 알고 있었다.
그래서 이번 기회에 공부하는겸 둘이 비교해서 정리를 해보려고 한다!
한줄 요약
스프링 프레임워크에서 관례로 설정되던 것을 미리 세팅하여 개발된 프레임워크가 스프링 부트이며,
또한 스프링 부트는 내장 톰켓 was 서버를 가지고 있다!
스프링 프레임워크?!?
스프링은 왜 스프링일까?
과거에 스프링 프레임 워크가 나오기 전에는 자바개발자들이 Enterprise JavaBeans라는 EJB 프레임워크를 사용했다고한다.
이게 어플리케이션을 개발하는 데 힘든점들이 많아 사용하기 어려운 프레임워크였다고 한다.
반면에, 스프링은 EJB와 달리 특정 기술(인터페이스나 추상 클래스)을 구현하는 일 없이 순수 자바 프로그래밍을 하듯 개발하면 된다.
물론 스프링도 프레임워크라서 관례나 프레임워크에서 제공하는 방식을 사용해야하나, 중요한것은 EJB와 달리 프로엠워크의 코드와 개발자의 코드가 복잡하게 얽히는 일은 없다는 것이다.
어쨌던 이 뒤로 스프링이 개발되었다. 여담으로 스프링의 이름이.. 힘들었던 EJB시절(winter)이 지나고 따뜻한 봄이 온다고 해서 Spring이라고 이름을 지은것이라고 한다. (ㅋㅋㅋ 진짜 힘들었나보다..)
스프링 프레임워크의 큰 특징들을 잠깐 짚고 넘어가자면..
- POJO(Plain Old Java Object) 기반의 경량 컨테이너 제공
- 복잡한 비즈니스 영역의 문제를 쉽게 개발하고 운영하기 위한 철학
- 여러 개의 개별 단위로 구성되어 있는 모듈식 프레임워크
- 높은 확장성 및 범용성, 광범위한 생태계 시스템
- 엔터프라이즈 애플리케이션에 적합한 경량급 오픈 소스 프레임워크
등이 있다.
디테일한 부분은 다음에 한번 정리해야겠다.
크게 알아두면 좋은것은 모듈식 프레임워크라는 것인데, 기능들을 성격에 따라 분류해서 모듈이란 단위로 관리하고있다. 그래서 개발자는 필요한 모듈을 조합해서 필요한 기능만 사용할 수 있다...
그러나, EJB에 비해 간단하였지.. 스프링도 물론 간단한 프레임워크는 아니였다.
스프링이 복잡한 어플리케이션을 위해 다양한 기능들을 제공하기 때문에 더 느리고 더 많은 메모리를 사용할 수 있고, 사용하기 쉽다고해도 프레임워크를 설정하는 시간과 노력이 많이 필요하고 경험도 많이 필요했다.
이러하여 스프링을 기반으로 개발된 스프링 부트가 나오게되었다.
스프링 부트?!?
스프링 부트는 스프링 프레임워크를 쉽게 사용할 수 있도록 여러 편의 기능을 제공하는 프레임워크다.
그러나 스프링 프레임워크와 스프링 부트는 목적이 완전히 다르다. 스프링 부트는 가능한 빠르게 애플리케이션을 개발하고 서비스하는 것을 우선시한다. 빠르게 해야해서 스프링 부트 프로젝트에서는 가장 보편적으로 많이 사용하는 형태로 스프링 어플리케이션을 미리 설정해 놓았다.
즉, 사람들이 매번 세팅하는것이 비슷하니 대부분이 사용하는 세팅법으로 미리 맞춰놓고 빠르게 개발을 하고 서비스 할 수 있도록 해놓은 것이다. 이러하여 세팅없이 빠르게 개발할 수 있는것이 아주 큰 장점이 된것이다.
기존 스프링 프레임워크로 개발할 때는 필요한 라이브러리 찾고, 어플리케이션에 적합한 버전을 선택하여 이를 설정하고 테스트하는데도 시간이 많이 걸렸으나, 스프링 부트는 이러한 것들이 자동설정(Auto Configure) 되어서 시간을 줄이는데 매우 적합하다.
또한, 스프링 부트의 큰 장점은 단독 실행 가능한 스프링 어플리케이션이다.
스프링 부트는 빌드 플러그인(gradle, maven..)을 제공하여 단독 실행 가능한 Jar 파일을 만들 수 있다.
그리고 java 명령어와 -jar 옵션을 사용하여 간단하게 어플리케이션을 실행할 수 있다.
이로인해, jar 파일을 image로 말아서 ECR에 저장하고 해당 이미지로 dev, stg, prod 환경에 쉽게 배포할 수 있는 등 빠르게 환경을 구축하는데 도움이 되었다.
마지막으로 가장 큰 장점은 어플리케이션에 내장된 톰캣 서버 (WAS)이다.
스프링 부트의 spring-boot-starter-web 스타터를 이용하여 웹 어플리케이션을 개발한 경우에는 톰캣이 내장되어있다. 물론 설정으로 undertow나 다른 was 서버로 변경할 수 있으나 처음에 starter을 이용하여 세팅된 기본은 톰캣이다.
이 내장된 was 서버와 실행 가능한 jar 때문에 dev, stg, prd 환경에서 일관된 실행환경을 가질 수 있게된것도 아주 큰 행복이다..
마무리
스프링의 모든 기능을 기반으로 개발된 프레임 워크가 스프링 부트이므로, 스프링의 장점을 모두 가지고 있으니 스프링 부트를 쓰지 않을 이유는 없다고 본다.
또한, 자동 설정이 지금 같이 빠르게 개발하고 MVP 모델을 만들어서 현업에 리뷰를 거쳐 빠른 피드백을 받는 애자일 문화가 만연한 개발 세상에 스프링부트는 당연한 프레임워크가 되어 버렸다.
내장된 톰켓과 jar 파일로 일관된 실행환경을 가질 수 있다는 말을 마지막에 했는데.. 이 말을 하고나니, 회사에서 CI/CD 환경 구축하면서 Single Source Of Truth를 지키기 위해 떠올린 배포 방법 등을 정리하는 글을 다음에는 써봐야겠다. (더 까먹기전에... ㅋㅋ)
'JAVA > Spring-boot' 카테고리의 다른 글
[Java] 내가 짠 Java코드를 컴퓨터가 어떻게 읽을까? (feat. JIT compiler) (1) | 2024.02.18 |
---|---|
[Spring boot] 3.xx 버전에서 2.xx버전으로 낮추기 (0) | 2024.01.26 |
Transactional readOnly에 대한 고찰 및 주의 사항(feat. JPA Entity Manager) (0) | 2023.11.17 |
[Spring boot] AOP 적용 사례 (feat. AOP로 회원 인증을 구현해보자!) (0) | 2023.08.29 |