스프링프레임워크
스프링 MVC 모델, 매핑 설명
잔잔한 물결처럼
2025. 3. 16. 18:29
스프링 MVC는 웹 애플리케이션을 효율적으로 개발하기 위한 프레임워크로, 프런트 컨트롤러 패턴을 기반으로 설계되었습니다. 이 패턴은 모든 클라이언트의 요청을 하나의 컨트롤러가 먼저 수신하고, 요청에 따라 적절한 처리를 담당할 수 있는 컨트롤러로 요청을 분배하는 방식입니다.
스프링 MVC의 주요 기능
주요기능 | 설명 |
화면 전환 관리 | 스프링 MVC는 클라이언트의 요청에 따라 적절한 화면으로 전환하는 기능을 제공합니다. 이는 사용자와의 상호작용을 원활하게 처리하는 데 중요한 역할을 합니다. |
데이터 입출력 관리 | 클라이언트(보통 웹 브라우저)와 서버 간의 데이터 입출력을 용이하게 합니다. 이는 사용자 입력을 처리하고, 서버에서 처리된 결과를 클라이언트에게 전달하는데 필수적입니다. |
프런트 컨트롤러 패턴의 역할
역할 | 설명 |
요청 수신 및 분배 | 모든 클라이언트 요청을 하나의 프런트 컨트롤러가 수신하고, 요청에 따라 적절한 컨트롤러로 분배합니다. |
효율적인 요청 처리 | 클라이언트(보통 웹 브라우저)와 서버 간의 데이터 입출력을 용이하게 합니다. 이는 사용자 입력을 처리하고, 서버에서 처리된 결과를 클라이언트에게 전달하는 데 필수적입니다. |
스프링 MVC의 컴포넌트
요소 | 개요 |
DispatcherServlet | 프런트 컨트롤러입니다. 모든 클라이언트의 요청을 가장 먼저 수신합니다. |
Model | 컨트롤러에서 뷰로 전다로디는 표시 데이터를 저장하는 객체입니다. HttpServletRequest 나 HttpSession 과 유사한 기능을 제공합니다. |
컨트롤러 | 요청에 따라 적절히 처리합니다. |
비즈니스 로직 | 데이터베이스에 대한 접근, 데이터 수집, 가공 등을 담당합니다. 이 부분은 개발자가 설계와 구현을 담당합니다. |
뷰 | 화면 표시를 담당합니다. |
타임리프란?
타임리프는 템플릿 엔진중의 하나로 스프링부트와 결합해 주로 사용되며 스프링에서 처리된 데이터를 화면에 표시하는 작업을 수행하는 역할을 합니다.
스프링 MVC 패턴에서 @Controller 와 @RequestMapping 설명
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/greeting")
public class GreetingViewController {
@GetMapping("/display")
public String displayGreetingPage() {
return "greeting";
}
}
속성 | 개요 |
value 속성 | 매핑할 URL 경로를 지정하며 value는 앞의 /를 생략할 수 있습니다. 여러개의 URL 경로를 지정할 수도 있습니다. |
method 속성 | GET이나 POST 등의 HTTP 메서드를 지정합니다. GET을 지정하려면 RequestMethod.GET 을 사용하고 POST 를 지정하려면 RequestMethod.POST 를 사용합니다. 여러개의 HTTP 메서드를 지정할 수도 있습니다. |
value 속성 지정 방법
// 클래스 레벨에 공통 URL 매핑
@Controller
@RequestMapping("/users")
public class UserController {
// 메서드 레벨에서 특정 URL 매핑
@GetMapping("/list")
public String userList() {
return "userList";
}
// /를 생략할 수도 있습니다.
@GetMapping("detail/{id}")
public String userDetails(@PathVariable("id") Long id) {
return "userDetail";
}
// URL을 여러개 지정할 수도 있습니다.
@GetMapping(value = {"/list", "/users"})
public String userList() {
return "userList";
}
}
// 클래스 레벨에 공통 URL 매핑
@Controller
@RequestMapping("/users")
public class UserController {
// GET 요청 처리
@RequestMapping(method = RequestMethod.GET, value = "/list")
public String userList() {
return "userList";
}
// POST 요청 처리
@RequestMapping(method = RequestMethod.POST, value = "/create")
public String createUser(@ModelAttribute User user) {
// 사용자 생성 로직
return "userCreated";
}
// PUT 요청 처리
@RequestMapping(method = RequestMethod.PUT, value = "/update/{id}")
public String updateUser(@PathVariable("id") Long id, @ModelAttribute User user) {
// 사용자 업데이트 로직
return "userUpdated";
}
// DELETE 요청 처리
@RequestMapping(method = RequestMethod.DELETE, value = "/delete/{id}")
public String deleteUser(@PathVariable("id") Long id) {
// 사용자 삭제 로직
return "userDeleted";
}
}
@GetMapping 은 @RequestMapping 의 GET 요청에 대한 애너테이션입니다.
@PostMapping 은 @RequestMapping 의 POST 요청에 대한 애너테이션과 동일합니다.
@GetMapping 과 PostMapping 예시
@GetMapping("/list")
public String userList() {
return "userList";
}
@PostMapping("/create")
public String createUser(@ModelAttribute User user) {
// 사용자 생성 로직
return "userCreated";
}
@PutMapping("/update/{id}")
public String updateUser(@PathVariable("id") Long id, @ModelAttribute User user) {
// 사용자 업데이트 로직
return "userUpdated";
}
@DeleteMapping("/delete/{id}")
public String deleteUser(@PathVariable("id") Long id) {
// 사용자 삭제 로직
return "userDeleted";
}