무던하게
Published 2024. 11. 18. 22:07
Spring Boot: 스프링 MVC 패턴 SpringBoot

스프링 MVC는 웹 애플리케이션 개발을 위한 Model-View-Controller(MVC) 패턴을 기반으로 동작하는 프레임워크입니다. 이 단원에서는 MVC 패턴의 기본 개념과 함께 스프링 MVC에서 제공하는 주요 어노테이션의 동작과 예제를 살펴봅니다.


1.1 MVC 패턴의 개념

MVC 패턴은 애플리케이션의 구조를 Model, View, Controller로 분리하여 관심사의 분리를 통해 유지보수성과 확장성을 높이는 데 목적이 있습니다.

  • Model: 애플리케이션의 데이터 및 비즈니스 로직을 처리합니다. 데이터베이스와의 상호작용 및 상태를 관리합니다.
  • View: 사용자에게 보여지는 UI를 담당합니다. HTML, JSP, Thymeleaf 등의 템플릿 엔진이 View에 해당합니다.
  • Controller: 사용자의 요청을 처리하고 적절한 비즈니스 로직을 실행한 후, 결과를 View에 전달합니다.

스프링 MVC는 이 패턴을 프레임워크 차원에서 강력하게 지원하며, 이를 통해 개발자는 보다 효율적으로 웹 애플리케이션을 설계할 수 있습니다.


1.2 스프링 MVC의 동작 원리

스프링 MVC는 클라이언트의 요청을 처리하기 위해 아래의 과정을 따릅니다.

  1. 클라이언트 요청: 사용자가 HTTP 요청을 보냅니다.
  2. DispatcherServlet: 요청을 중앙에서 제어하며, 적절한 처리기를 찾습니다.
  3. HandlerMapping: 요청 URL과 매핑된 Controller를 찾아 DispatcherServlet에 전달합니다.
  4. Controller 실행: 요청을 처리하고 필요한 비즈니스 로직을 실행한 후, 결과를 반환합니다.
  5. ViewResolver: Controller에서 반환한 View 이름에 따라 적절한 View를 결정합니다.
  6. 응답 반환: 최종적으로 View가 렌더링되어 클라이언트에게 응답이 반환됩니다.

1.3 주요 어노테이션

스프링 MVC는 간단한 어노테이션을 통해 요청 처리와 데이터 바인딩을 지원합니다. 아래에서 주요 어노테이션과 사용 예제를 살펴보겠습니다.


1. @Controller

@Controller는 클래스를 컨트롤러로 정의하며, 주로 View를 반환할 때 사용합니다.

@Controller
@RequestMapping("/greeting")
public class GreetingController {

    @GetMapping
    public String greetingPage(Model model) {
        model.addAttribute("message", "Welcome to Spring MVC!");
        return "greeting"; // View 이름 반환 (greeting.html)
    }
}
  • 설명:
    • 클라이언트의 요청을 처리하는 클래스에 선언합니다.
    • View 이름(예: greeting)을 반환하여 사용자에게 응답합니다.
    • Model 객체를 사용해 데이터를 View에 전달할 수 있습니다.

2. @RestController

@RestController는 JSON 또는 XML 형태의 데이터를 반환하는 API 컨트롤러에 사용합니다. 이는 @Controller@ResponseBody의 조합입니다.

@RestController
@RequestMapping("/api/users")
public class UserController {

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return new User(id, "John Doe", "john@example.com"); // JSON으로 반환
    }
}
  • 설명:
    • RESTful API 개발에 사용됩니다.
    • 반환값은 자동으로 JSON 또는 XML로 직렬화됩니다.

3. @RequestMapping

@RequestMapping은 클래스나 메서드에 URL 요청을 매핑합니다. GET, POST, PUT, DELETE 등 다양한 HTTP 메서드를 지원합니다.

@Controller
@RequestMapping("/users")
public class UserController {

    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public String userList(Model model) {
        model.addAttribute("users", List.of("John", "Jane", "Smith"));
        return "userList";
    }
}
  • 설명:
    • 요청 URL을 처리할 메서드에 매핑합니다.
    • method 속성을 사용하여 HTTP 메서드를 명시할 수 있습니다.

4. @GetMapping, @PostMapping, @PutMapping, @DeleteMapping

HTTP 메서드별로 요청을 처리하는 축약형 어노테이션입니다.

@RestController
@RequestMapping("/api/items")
public class ItemController {

    @GetMapping("/{id}")
    public String getItem(@PathVariable Long id) {
        return "Item ID: " + id;
    }

    @PostMapping
    public String createItem(@RequestBody Item item) {
        return "Item created: " + item.getName();
    }
}
  • 설명:
    • @GetMapping: GET 요청 처리
    • @PostMapping: POST 요청 처리
    • @PutMapping: PUT 요청 처리
    • @DeleteMapping: DELETE 요청 처리

5. @RequestParam

@RequestParam은 요청 파라미터 값을 메서드 파라미터에 바인딩합니다.

@RestController
@RequestMapping("/search")
public class SearchController {

    @GetMapping
    public String search(@RequestParam String keyword) {
        return "Searching for: " + keyword;
    }
}
  • 설명:
    • 요청 URL의 쿼리 파라미터를 처리합니다.
    • 기본값이나 필수 여부를 설정할 수 있습니다.

6. @PathVariable

@PathVariable은 URL 경로에 포함된 값을 메서드 파라미터로 바인딩합니다.

@RestController
@RequestMapping("/products")
public class ProductController {

    @GetMapping("/{id}")
    public String getProduct(@PathVariable Long id) {
        return "Product ID: " + id;
    }
}
  • 설명:
    • URL 경로의 동적 값을 처리할 때 사용합니다.

7. @ModelAttribute

@ModelAttribute는 요청 데이터를 객체에 바인딩하고 View에 데이터를 전달할 때 사용합니다.

@Controller
@RequestMapping("/form")
public class FormController {

    @GetMapping
    public String showForm(Model model) {
        model.addAttribute("user", new UserForm());
        return "form";
    }

    @PostMapping
    public String submitForm(@ModelAttribute UserForm userForm, Model model) {
        model.addAttribute("user", userForm);
        return "formResult";
    }
}
  • 설명:
    • 요청 데이터를 객체에 자동으로 매핑합니다.
    • Model에 데이터를 추가하는 역할도 수행합니다.

1.4 주요 개념 요약

  1. @Controller@RestController를 사용해 클라이언트 요청을 처리합니다.
  2. 요청 매핑은 @RequestMapping, @GetMapping, @PostMapping 등을 사용해 설정합니다.
  3. 요청 파라미터는 @RequestParam, 경로 변수는 @PathVariable로 처리합니다.
  4. @ModelAttribute를 사용하면 폼 데이터를 객체로 바인딩할 수 있습니다.

결론

스프링 MVC는 간단한 어노테이션을 통해 클라이언트 요청을 처리하고, 데이터를 View 또는 JSON 형태로 응답할 수 있도록 강력한 지원을 제공합니다. 주요 어노테이션의 동작 원리를 이해하고 실습하면 MVC 패턴을 효과적으로 활용할 수 있습니다.

profile

무던하게

@moodone

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!