본문 바로가기
Spring

핸들러 메서드(Handler Method) - 컨트롤러

by xogns93 2024. 10. 10.

핸들러 메서드(Handler Method)스프링 MVC에서 HTTP 요청을 처리하는 메서드를 의미합니다. 클라이언트가 특정 URL로 요청을 보내면, 해당 요청을 처리하기 위해 컨트롤러에서 작성한 메서드가 실행되며, 이 메서드를 핸들러 메서드라고 부릅니다.

핸들러 메서드는 클라이언트의 요청을 받아, 비즈니스 로직을 처리한 후 그 결과를 뷰(HTML)데이터(JSON, XML 등) 형태로 클라이언트에게 응답하는 역할을 합니다. 스프링 MVC에서는 컨트롤러 클래스의 메서드가 핸들러 메서드가 되며, 각 메서드는 특정 HTTP 요청에 매핑됩니다.

핸들러 메서드의 역할

  • 요청 처리: 클라이언트가 서버로 보낸 HTTP 요청(GET, POST, PUT, DELETE 등)을 처리합니다.
  • 데이터 처리: 요청 데이터를 기반으로 비즈니스 로직을 수행하고, 필요 시 데이터를 조회하거나 수정합니다.
  • 응답 반환: 처리 결과를 데이터(JSON, XML)로 변환하여 클라이언트에게 반환합니다.

핸들러 메서드의 구성 요소

  1. 요청 매핑: 핸들러 메서드는 특정 URL 경로 및 HTTP 메서드(GET, POST 등)에 매핑되어 요청을 처리합니다. 이를 위해 @RequestMapping, @GetMapping, @PostMapping 같은 애노테이션이 사용됩니다.
  2. 매개변수(아규먼트): 핸들러 메서드는 요청 파라미터, URL 경로 변수, 요청 본문 등을 매개변수로 받아 처리합니다. 스프링 MVC는 다양한 방법으로 요청 데이터를 메서드 파라미터에 바인딩할 수 있습니다.
  3. 반환 값: 핸들러 메서드는 처리 후 뷰 이름(HTML 페이지) 또는 데이터(JSON, XML 등)를 반환합니다.

예시: 핸들러 메서드

아래는 스프링 MVC에서 @Controller를 사용한 핸들러 메서드의 예시입니다.

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.Model;

@Controller
public class GreetingController {

    // GET 요청을 처리하는 핸들러 메서드
    @GetMapping("/greet")
    public String greet(@RequestParam String name, Model model) {
        // 요청에서 name 파라미터를 받아 모델에 추가
        model.addAttribute("name", name);

        // 뷰 이름을 반환 (greet.html이 렌더링됨)
        return "greeting";
    }
}

핸들러 메서드의 주요 특징

  1. 애노테이션을 통한 매핑:
    • @RequestMapping, @GetMapping, @PostMapping 등의 애노테이션을 사용하여 특정 URL과 HTTP 메서드에 매핑됩니다.
    • 예를 들어, /greet 경로에 대한 GET 요청을 처리하기 위해 @GetMapping("/greet")을 사용합니다.
  2. 매개변수 바인딩:
    • 핸들러 메서드는 다양한 방식으로 요청 데이터를 매개변수로 받을 수 있습니다. 예를 들어, URL의 쿼리 스트링, 폼 데이터, 요청 본문, 쿠키, 헤더 등을 받을 수 있습니다.
    • @RequestParam, @PathVariable, @RequestBody 등의 애노테이션을 사용하여 매개변수에 데이터를 바인딩합니다.
  3. 반환 값:
    • 핸들러 메서드는 뷰 이름을 반환하거나 JSON 등 데이터를 반환할 수 있습니다. 뷰 이름을 반환하면 뷰 리졸버(View Resolver)가 해당 뷰를 찾아 렌더링합니다.
    • @RestController와 함께 사용하면 핸들러 메서드가 JSON 데이터를 바로 반환할 수 있습니다.

다양한 핸들러 메서드 예시

  1. @RequestParam을 사용한 쿼리 파라미터 처리:
    • 클라이언트 요청: /users?name=John
    • name 파라미터가 메서드 매개변수로 전달됨.
  2. @GetMapping("/users") public String getUser(@RequestParam String name, Model model) { model.addAttribute("name", name); return "userProfile"; }
  3. @PathVariable을 사용한 경로 변수 처리:
    • 클라이언트 요청: /users/123
    • id123으로 매핑되어 메서드에서 사용됨.
  4. @GetMapping("/users/{id}") public String getUserById(@PathVariable Long id, Model model) { model.addAttribute("id", id); return "userProfile"; }
  5. @PostMapping을 사용한 폼 데이터 처리:
  6. @PostMapping("/users") public String createUser(@RequestParam String name, @RequestParam String email, Model model) { model.addAttribute("name", name); model.addAttribute("email", email); return "userProfile"; }
  7. @RequestBody를 사용한 JSON 요청 처리:
    • 클라이언트 요청 본문: 
    • { "name": "John Doe", "email": "john@example.com" }
    • JSON 본문이 User 객체로 자동 변환되어 매개변수로 전달됨.
  8. @PostMapping("/users") public String createUser(@RequestBody User user) { // 요청 본문에서 JSON 데이터를 User 객체로 매핑 return "User created: " + user.getName(); }
  9. @RestController와 함께 JSON 응답 반환:
    • 클라이언트가 /users/123 요청 시, JSON 형식으로 사용자 정보가 반환됩니다.
    • 응답 본문:
      {
        "id": 123,
        "name": "John Doe",
        "email": "john@example.com"
      }
  10. @RestController public class UserController { @GetMapping("/users/{id}") public User getUser(@PathVariable Long id) { return new User(id, "John Doe", "john@example.com"); } }

핸들러 메서드의 응답 방식

핸들러 메서드는 여러 방식으로 클라이언트에 응답할 수 있습니다.

  1. 뷰 이름 반환:
    • 컨트롤러에서 문자열로 뷰 이름을 반환하면, 스프링은 해당 뷰를 찾아 렌더링합니다.
    return "home"; // home.html 또는 home.jsp 파일이 렌더링됨
  2. 데이터(JSON, XML) 반환:
    • @RestController를 사용하거나 @ResponseBody를 붙이면, 데이터를 바로 클라이언트에게 반환할 수 있습니다.
    @GetMapping("/api/user")
    public User getUser() {
        return new User("John", "Doe");
    }
  3. 리다이렉트:
    • 다른 URL로 리다이렉트할 때는 redirect: 접두어를 사용합니다.
    return "redirect:/login";

요약

  • 핸들러 메서드스프링 MVC에서 클라이언트의 요청을 처리하는 메서드입니다.
  • HTTP 요청(예: GET, POST 등)에 대한 처리를 수행하고, 그 결과를 뷰나 데이터로 응답합니다.
  • @RequestMapping, @GetMapping, @PostMapping 등의 애노테이션을 사용하여 URL과 HTTP 메서드에 매핑됩니다.
  • 다양한 방식으로 요청 데이터를 메서드 매개변수로 전달할 수 있으며, 처리 후 뷰 또는 데이터를 반환합니다.

핸들러 메서드는 컨트롤러의 핵심 기능을 담당하며, 클라이언트의 요청에 맞춰 비즈니스 로직을 수행하고 적절한 응답을 생성하는 중요한 역할을 합니다.