스프링프레임워크

스프링 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";
}