Spring과 Spring Boot 차이

essssk___·2024년 1월 4일

Spring

목록 보기
1/2

2023년 5월, 유지보수가 아닌 처음으로 직접 개발에 참여하게 되었다.
회사에서 개발한 프로그램의 기본 환경은 Spring인데, 5월에 참여했던 프로젝트에서는 Spring boot를 활용했다.

왜 Spring Boot를 사용했는가?

우리회사에서는 웹프로젝트를 스프링으로 사용하지만, 타 회사나 프로젝트 등에서는 스프링 부트를 많이 활용한다고 들었다.(그렇다고 우리회사에서 스프링부트를 전혀 사용하지 않는 것은 아니다...) 스프링부트가 주는 장점이 있다고 생각했기 때문에 이번 프로젝트를 기회로 발판삼아 활용해보기로 했다.

스프링에 대한 개념은 김영한 님의 강의를 참고하여 정리했다.
(언제나 좋은 강의 감사합니다..❤️)

Spring?

객체 지향언어인 자바의 특징을 잘 살려낸 프레임워크
좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크

스프링이라는 단어는 문맥에 따라 다르게 사용한다.

  • 스프링 DI 컨테이너 기술
  • 스프링 프레임 워크
  • 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계

핵심 기술: 스프링 DI컨테이너, AOP, 이벤트, 기타
웹 기술: 스프링 MVC, 스프링 WebFlux

스프링 프레임워크를 사용하면 자바 기반의 어플리케이션 제작, 개발자들은 비즈니스 로직에 집중할 수 있다.

이후 스프링 프레임워크의 다양한 기능들, 다양한 오픈 소스 등 외부 라이브러리를 함께 사용할 일이 많아졌다. 결국 스프링으로 개발을 시작할 때 직접 해야하는 설정이 너무 많아지고 복잡해져 진입장벽이 높다.

Spring boot 등장

스프링 부트를 사용하면 스프링 기반의 어플리케이션을 쉽게 만들 수 있다.

Spring, Spring boot 차이

  • 내장서버
  • 편리한 의존성 & 권장 버전 관리
  • 자동 설정

어떻게 편리한걸까?

스프링으로 만든 웹 애플리케이션을 배포하기위해서는

1. WAS 설치
2. 코드를 War로 빌드
3. 빌드한 War파일을 WAS 하위 폴더로 이동
4. WAS 실행

하는 과정을 거쳐야 한다.

1. WAS설치

스프링 부트는 서버가 내장되어있기 때문에 따로 Tomcat을 설치하거나 매번 버전을 관리해 주어야 하는 수고로움을 덜어준다.(Embed Tomcat)

2. 편리한 의존성

기존에 스프링은 전체적으로 의존성 관리에 어려움이 있었다.
라이브러리들이 서로 영향을 미치기 때문에 호환하는 버전을 하나하나 맞춰야했기 때문이다. 혹여나 버전을 올려야 한다면 개발이 아닌 세팅에도 시간을 많이 써야한다.
하지만 스프링부트는 starter라는 기본 라이브러리 묶음을 제공한다. 호환 버전을 일일히 맞추지 않아도 호환되는 라이브러리 묶음을 의존하면 되는 것이다.

핵심 기술: 스프링 DI컨테이너, AOP, 이벤트, 기타
웹 기술: 스프링 MVC, 스프링 WebFlux
데이터 접근 기술: 트랜잭션, JDBC, ORM 지원, XML 지원
기술 통합: 캐시, 이메일, 원격접근, 스케줄링
테스트: 스프링 기반 테스트 지원
언어: 코틀린, 그루비
-> 최근에는 스프링 부트를 통해 스프링 프레임워크의 기술들을 편리하게 사용

기술적 부분은 추후에 하나씩 정리해나갈 예정.

스프링 부트의 장점

  1. 단독으로 실행 가능한 스프링 애플리케이션을 쉽게 만들 수 있기 때문에 최근에는 기본으로 사용하는 경우가 많다.
  2. 손쉬운 빌드 구성을 위한 starter 종속성을 제공한다.
  3. 별도의 웹서버를 설치하지 않아도 된다.(내장 웹 서버를 지원한다.)

설정파일을 직접 확인해보면?

프로젝트에는 spring boot 2.7.11(maven) 버전을 사용했다.
pom.xml에 를 살펴보면 스타터 의존성을 확인할 수 있다.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>

위는 https://start.spring.io/에서 기본으로 설정되는
의존성이다.

<dependency>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
        <exclusion>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
    <version>3.1.1</version>
</dependency>

... 이하 생략.
그리고 기본적인 스타터 외에 필요한 의존성을 추가했다.
(web, log, jpa, websorket ... 등등)

마무리하며

스프링 부트는 스프링 프레임워크와 별도로 사용하는 것이 아니며, 부트가 스프링프레임워크를 기본적으로 당겨오고 그 외에 필요한 기능들을 편리하게 사용할 수 있도록 중간역할을 한다고 한다.

해당 프로젝트의 세팅은 직접 진행한게 아니기때문에 따로 직접 환경세팅을 해서 적용하는 시간을 가져봐야한다.

스프링프레임워크와 스프링 부트와의 차이점 기준으로 간략하게 특징위주로 정리했는데, 스프링만 하더라도 알아야할 내용들이 어마어마하게 많다. 세부적인 내용들도 추후에 차근차근 알아봐야겠다.

profile
웹개발 성장 일기

0개의 댓글