Spring Web은 HTTP 기반 웹 애플리케이션 개발을 지원하는 스프링 프레임워크의 모듈입니다. Spring Boot는 Spring Web을 간소화하고 설정을 자동화하여 더 빠르고 효율적인 웹 애플리케이션 개발 환경을 제공합니다.
Spring Boot는 Spring Web 모듈을 내장하여 설정 작업을 자동화합니다. 즉, 개발자는 최소한의 설정만으로도 HTTP 서버, REST API, HTML 렌더링 등을 쉽게 구현할 수 있습니다.
| 구성 요소 | 설명 |
|---|---|
| Controller | 클라이언트의 요청을 처리하고, 데이터를 반환하거나 뷰(View)로 전달. |
| Model | 컨트롤러와 뷰 사이에서 데이터를 전달. |
| View | 클라이언트에 표시할 UI를 생성 (예: Thymeleaf, JSP, Mustache 등). |
Spring Web은 RESTful 서비스 개발을 위한 다양한 기능을 제공합니다.
| 구성 요소 | 설명 |
|---|---|
@RestController | HTTP 요청 처리 및 JSON, XML 데이터를 반환. |
@RequestMapping | URL과 HTTP 메서드(GET, POST, PUT, DELETE 등) 매핑. |
@RequestParam, @PathVariable | 요청 매개변수와 경로 변수를 처리. |
@ResponseBody | 응답 데이터를 JSON 또는 XML로 직렬화하여 반환. |
Spring Boot 프로젝트에서 Spring Web을 사용하려면 다음 의존성을 추가합니다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
Spring Boot는 기본적으로 Tomcat 웹 서버를 내장하고 있습니다.
localhost:8080에서 애플리케이션이 실행됩니다.application.properties에 설정합니다.server.port=9090
Spring Web은 @RestController와 @Controller를 통해 HTTP 요청을 처리합니다.
예제: 간단한 REST API
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello(@RequestParam(value = "name", defaultValue = "World") String name) {
return "Hello, " + name + "!";
}
}
@RestController:@GetMapping:@RequestParam:URL 호출:
<http://localhost:8080/hello?name=Spring>
응답 결과:
Hello, Spring!
| 어노테이션 | 설명 |
|---|---|
@Controller | HTML 렌더링을 처리하는 일반적인 컨트롤러. |
@RestController | REST API 요청을 처리하며 JSON 또는 XML 데이터를 반환. |
@GetMapping | HTTP GET 요청을 특정 메서드에 매핑. |
@PostMapping | HTTP POST 요청을 특정 메서드에 매핑. |
@RequestParam | 쿼리 파라미터를 메서드 파라미터로 매핑. |
@PathVariable | URL 경로의 변수 값을 메서드 파라미터로 매핑. |
@RequestBody | 요청 본문을 객체로 매핑 (주로 JSON 요청 처리). |
@ResponseBody | 메서드의 반환값을 JSON 또는 XML로 변환하여 클라이언트에 반환. |
Spring Web은 클라이언트 요청 → 컨트롤러 처리 → 응답 반환의 기본 구조를 따릅니다. 이를 시각적으로 표현하면 다음과 같습니다:
graph TD
A["HTTP Request"] --> B["DispatcherServlet: 요청 분배"]
B --> C["Controller: 요청 처리"]
C --> D["Service Layer: 비즈니스 로직 처리"]
D --> E["Model: 데이터 반환"]
E --> F["View: UI 렌더링 또는 JSON 반환"]
F --> G["HTTP Response"]