Spring과 Spring Boot는 뭐가 다른 걸까요? Boot가 없던 시절에는 어떻게 개발했을까요?

스프링 부트란 무엇일까요 ?

스프링부트는 스프링 프레임워크를 좀 더 손쉽게 사용할 수 있게 스프링 프레임워크의 불편함을 해소하고 기타 편의 기능을 제공하는 프레임워크입니다.

키워드

자동 설정(Auto Configuration)

스프링부트 프로젝트를 생성하면 기본적으로 spring-boot-starter 의존성이 추가되어 있습니다. 이것을 통해 spring-core 라이브러리와 logging, yaml, jarkarta.annotation.api 와 같은 여러 라이브러리를 사용할 수 있습니다.

이러한 기본 라이브러리만으로는 WAS 를 만들 수 없기때문에 spring-boot-starter-web, spring-boot-starter-security 과 같은 스타터를 추가하면 WAS 를 만들기 위해 필요한 Dispatcher Servlet, 내장 톰캣, 포트 설정 등의 여러 설정이 자동으로 적용됩니다. 개발자는 해당 설정을 그대로 사용할 수 있으며 편의에 따라 재정의하여 사용할 수도 있습니다.

WS(Web Server), WAS(Web Application Server)

구분역할예시
WS (Web Server)클라이언트에 정적인 파일(HTML, CSS 등)을 제공하는 서버Nginx, Apache HTTP Server
WAS (Web Application Server)클라이언트가 전송한 요청을 동적으로 처리한 후, 응답을 주는 서버Tomcat, Jetty, Undertow

스프링부트는 내장 톰캣을 통해 클라이언트가 전송한 요청을 동적으로 처리한 후 응답을 주는 웹 애플리케이션 서버를 쉽게 만들 수 있게 해주는 프레임워크입니다.

스프링 프레임워크는 객체 관리, 트랜잭션 관리, 의존성 주입 등의 다양한 기능을 제공해 자바로 복잡한 웹 애플리케이션을 만들 수 있게 도와주는 프레임워크 로 외장 톰캣 등 WAS 를 배포해서 사용해야하며 자체적으로 WAS 의 역할을 수행하지는 않습니다.

독립 실행형 애플리케이션

스프링부트는 내장 톰캣을 지원하므로, 프로젝트를 빌드하면 생성되는 .jar 파일에 톰캣이 포함되어 있습니다. 이 .jar 파일을 실행하기만 해도 별도의 서버 설치 없이 웹 애플리케이션 서버(WAS)로 사용할 수 있습니다. 반면, 외부 톰캣과 같은 WAS에 배포하려면 .war 파일로 빌드해야 하며, 이 경우 내장 톰캣이 아닌 외부 WAS에서 애플리케이션을 실행하게 됩니다.

빌드 형식내장 톰캣 포함 여부실행 방식
.jar포함java -jar app.jar로 독립 실행
.war미포함외부 WAS(Tomcat 등)에 배포

Properties 또는 YAML 설정

스프링 프레임워크는 환경 설정을 주로 XML 설정 파일을 통해 구성했지만, 스프링부트는 .properties.yml 파일을 사용하여 보다 간편하게 환경 설정을 구성할 수 있습니다.

주의할 점

1. 자동 설정이 의도치 않은 빈을 등록할 수 있다

스프링부트는 클래스패스에 있는 라이브러리를 감지하여 자동으로 빈을 구성합니다. 예를 들어 spring-boot-starter-data-jpa를 추가하면 DataSource가 자동 구성되는데, DB 접속 정보를 설정하지 않으면 Failed to configure a DataSource 에러로 시작이 실패합니다. 아직 사용하지 않는 스타터는 의존성에 추가하지 않거나 exclude로 명시적으로 제외해야 합니다.

2. application.yml과 application.properties를 동시에 사용하면 우선순위 문제가 생긴다

같은 디렉토리에 application.ymlapplication.properties가 모두 있으면 .properties 파일이 우선합니다. 한쪽에서 설정한 값이 다른 쪽에 의해 덮어써지는데, 두 파일을 동시에 확인하지 않으면 원인을 찾기 어렵습니다. 하나의 형식만 사용하는 것이 혼란을 방지합니다.

댓글 로딩 중...