Spring 관련 포스팅 목록
Spring Framework vs Spring MVC
Spring MVC vs 스프링 부트(Spring Boot)
1. Spring Framework
Java 기반의 웹 애플리케이션 개발을 위한 오픈소스 프레임워크
2. Spring MVC
웹 애플리케이션 개발에 있어 MVC 패턴을 적용할 수 있도록 Spring에서 제공하는 프레임워크
3. Spring Boot
Spring 설정들을 자동화하는 Spring 기반의 프레임워크
스프링 부트는 클래스패스상에 사용가능한 프레임워크와 이미있는 환경설정을 바라봅니다.
이것들을 기반으로 스프링 부트는 애플리케이션을 이 프레임워크들과 함께 구성하는데 필요한 기본 환경설정을 제공합니다.
이것을 자동 설정 (Auto Configuration) 이라고 부릅니다
Spring MVC 와 Spring Boot 은 모두 Spring 기반의 프레임 워크입니다
Spring MVC 와 Spring Boot 의 가장 큰 차이는 설정의 자동화입니다
Spring MVC구조의 경우 XML파일들에 Dispatcher Servlet Handler Mapping View Resolver 설정들을 해줘야하는데.
Spring Boot 의 경우 @ 만 적절하게 명시해주면 됩니다.
뿐만아니라 이 둘은 WAS 내장 여부 차이도 있습니다. Servlet 기반의 프로그램을 실행하기 위해서는 WAS 가 필요한데, Spring MVC 프로젝트의 경우 따로 Tomcat 과 같은 WAS 서버를 설치해줘야 합니다다. 반면 Spring Boot 에는 Tomcat 이 내장되있어 별도의 웹 애플리케이션 설치가 필요 없습니다.
예를 들어 다시 하나의 웹 어플리케이션을 만든다고 가정해보면. 해당 어플리케이션의 규모가 작아 돈을 주고 서버에 WAS 설치하게 된다면 이는 전혀 효과적이라고 할 수 없지만. Spring Boot의 경우 embeded container에서 자기의 어플리케이션을 실행하는 구조로 돼있어 JAVA만 설치해도 어플리케이션을 만들 수 있습니다. 이는 Spring Boot의 또 다른 장점이지만 단점이 될 수 있습니다.
주요 차이점 비교
비교 항목 | Spring MVC | Spring Boot |
설정 방식 | XML 및 Java 기반 설정 필요 | 자동 설정 (Auto Configuration) |
내장 서버 | 기본적으로 없음 (Tomcat, Jetty 등을 수동 설정) | 기본적으로 내장 서버(Tomcat, Jetty, Undertow 포함) |
빌드 및 실행 | 수동으로 WAS(Tomcat 등) 설정 후 배포 | main() 메서드 실행으로 바로 실행 가능 |
의존성 관리 | 수동으로 dependencies 추가 필요 | spring-boot-starter-* 의존성 관리 제공 |
프로젝트 설정 | Spring Initializr 없이 수동 설정 | Spring Initializr로 빠르게 프로젝트 생성 |
배포 방식 | WAR 파일로 패키징하여 WAS에 배포 | JAR 파일 자체로 실행 가능 (독립 실행) |
기본 설정 | 대부분 직접 설정해야 함 | 자동 설정 제공 (예: DataSource, Jackson, Security 등) |
복잡도 | 복잡한 설정 및 환경 구성 필요 | 설정이 단순하고 코드량이 적음 |
마이크로서비스 | 모놀리식(Monolithic) 아키텍처에 적합 | 마이크로서비스(Microservices) 개발에 최적화 |
주요 특징 비교
(1) 설정 방식
Spring MVC
Spring MVC는 많은 설정이 필요하며, XML 또는 Java 기반 설정을 사용해야 한다.
예제: XML 설정 기반
<!-- web.xml 설정 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
예제: Java 기반 설정
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example")
public class WebConfig {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
- 위와 같이 XML 또는 Java 설정을 명시적으로 작성해야 함.
Spring Boot
Spring Boot는 @SpringBootApplication과 자동 설정을 제공하여 설정을 최소화한다.
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
- 내장 서버(Tomcat)가 포함되어 있어 별도의 설정 없이 실행 가능.
- application.properties 또는 application.yml을 통해 간단하게 설정 관리.
(2) 내장 서버
Spring MVC
- Spring MVC는 기본적으로 내장 서버가 없음.
- 개발자가 Tomcat, Jetty 등을 설정하고 배포해야 한다.
- WAR 파일을 만들어 WAS(Web Application Server)에 배포해야 실행 가능.
Spring Boot
- Spring Boot는 기본적으로 내장 서버(Tomcat, Jetty, Undertow 포함)를 제공.
- spring-boot-starter-web을 추가하면 자동으로 내장 서버 실행 가능.
- JAR 파일 자체로 실행 가능 (java -jar myapp.jar).
(3) 프로젝트 설정 및 의존성 관리
Spring MVC
- Spring MVC 프로젝트는 pom.xml에서 수동으로 필요한 의존성을 추가해야 한다.
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
Spring Boot
- Spring Boot는 spring-boot-starter-* 의존성 관리 기능을 제공하여 설정이 간편하다.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- spring-boot-starter-web을 추가하면 Spring MVC, 내장 Tomcat, Jackson(JSON 변환) 등 필요한 모든 라이브러리가 자동 포함된다.
(4) 실행 방식
Spring MVC
- Tomcat, Jetty 등의 WAS를 직접 실행.
- war 파일을 빌드하여 WAS에 배포.
- 실행 과정이 번거롭고 설정이 많음.
Spring Boot
- main() 메서드 실행으로 바로 애플리케이션 실행.
- java -jar myapp.jar로 실행 가능.
- 내장 서버 포함으로 빠르게 실행 가능.
(5) Spring Boot의 자동 설정(Auto Configuration)
Spring Boot는 Spring MVC, JPA, Security 등의 설정을 자동으로 구성해준다.
예제: Spring Boot에서 자동 설정을 이용한 REST API
@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
}
- 별도의 설정 없이 실행 가능.
4. Spring Boot가 Spring MVC를 포함하는가?
✅ Yes!
Spring Boot는 Spring MVC를 포함하고 있으며, Spring MVC를 더 편리하게 사용할 수 있도록 도와주는 프레임워크이다.
즉, Spring Boot는 Spring MVC의 상위 개념이며, Spring MVC의 모든 기능을 사용할 수 있다.
Spring Boot = Spring MVC + 자동 설정(Auto Configuration) + 내장 서버(Embedded Server) + 간편한 의존성 관리
5. 언제 Spring MVC와 Spring Boot를 사용할까?
상황 | Spring MVC | Spring Boot |
기존 레거시 시스템 유지 | ✅ 적합 | ❌ 불필요한 기능이 많을 수 있음 |
대규모 엔터프라이즈 시스템 | ✅ 적합 | ✅ 가능하지만, Spring Cloud를 함께 사용하는 것이 좋음 |
빠른 개발(Prototype, MVP, Startup) | ❌ 설정이 많아 불편 | ✅ 빠르게 개발 가능 |
마이크로서비스(Microservices) | ❌ 설정이 복잡함 | ✅ Spring Boot + Spring Cloud 사용 권장 |
배포 및 실행 편리성 | ❌ WAS 설정 필요 | ✅ JAR 파일로 실행 가능 |
6. 결론
- Spring MVC는 전통적인 방식으로, 설정이 많지만 기존 시스템과의 연계나 엔터프라이즈 환경에서 사용하기 좋다.
- Spring Boot는 설정을 자동화하여 빠르게 개발할 수 있도록 도와주며, 마이크로서비스, REST API 개발 등에 적합하다.
- Spring Boot는 Spring MVC를 포함하고 있으며, 보다 쉽게 Spring MVC 기반 애플리케이션을 개발할 수 있도록 지원한다.
- Spring Boot를 사용하면 설정을 줄이고, 내장 서버를 활용하여 빠르게 배포할 수 있어 생산성이 크게 향상된다.
연관된 글 :
참고:
gpt
- https://velog.io/@hellonayeon/springmvc-vs-springboot
- https://m.blog.naver.com/sthwin/221271008423
- https://dzone.com/articles/spring-boot-vs-spring-mvc-vs-spring-how-do-they-compare
- https://kyun-s-world.gitbook.io/nowstart/spring/springframeworkcore/0-spring-vs-spring-boot
'개발 > Spring' 카테고리의 다른 글
[Spring] QueryDSL (0) | 2023.02.20 |
---|---|
[Spring] Spring Boot (0) | 2023.02.10 |
[Spring] Spring Framework (0) | 2023.02.10 |
[Spring] Spring Framework vs Spring MVC (0) | 2022.12.26 |
[Spring] Spring MVC vs Struts2 (0) | 2022.12.26 |