Categories: Spring

Spring 스프링 MVC 컨트롤러 Controller 의 역할

Controller 란?

스프링 MVC에서 컨트롤러(Controller)는 웹 애플리케이션의 핵심 요소 중 하나로, 클라이언트로부터의 HTTP 요청을 처리하고 응답을 관리하는 구성 요소입니다. MVC(Model-View-Controller) 아키텍처의 일부로서, 컨트롤러는 사용자 인터페이스와 비즈니스 로직을 연결하는 중간자 역할을 수행합니다.

스프링 MVC 패턴에서 컨트롤러는 사용자의 요청을 받아 처리한 후 적절한 응답을 반환합니다. 스프링에서는 @Controller와 @RestController 어노테이션을 통해 이러한 컨트롤러를 정의합니다. @Controller는 전통적인 웹 페이지 기반의 컨트롤러를 정의하는 반면, @RestController는 RESTful 웹 서비스를 위한 JSON이나 XML 형태의 데이터를 반환하는 컨트롤러를 만듭니다.

Controller 의 역할

스프링 MVC 프레임워크에서 컨트롤러(Controller)는 HTTP 요청을 받고, 요청에 대한 처리 로직을 실행한 후 결과를 뷰에 전달합니다. 이 과정에서 컨트롤러는 요청 데이터를 파싱하고, 필요한 서비스나 컴포넌트를 호출하며, 데이터 모델을 조작할 수 있습니다. 적절한 뷰를 선택하고 뷰에 모델 데이터를 전달하는 것도 컨트롤러의 책임입니다.

  1. HTTP 요청 수신: 컨트롤러는 클라이언트로부터 오는 HTTP 요청을 받습니다. 각 요청은 URL, HTTP 메서드(예: GET, POST), 그리고 필요에 따라 요청 매개변수 또는 본문을 포함합니다.
  2. 요청 매핑: 스프링의 @RequestMapping 어노테이션 또는 그와 유사한 어노테이션(@GetMapping, @PostMapping 등)을 사용하여 특정 HTTP 요청을 컨트롤러의 특정 메서드에 매핑합니다. 이렇게 함으로써 어떤 URL과 HTTP 메서드가 어떤 메서드에 의해 처리되는지 정의합니다.
  3. 요청 파라미터 처리: 컨트롤러는 HTTP 요청의 파라미터를 추출하고, 이들을 메서드의 매개변수로 바인딩합니다. @RequestParam, @PathVariable, @RequestBody 등의 어노테이션을 사용하여 요청 데이터를 메서드의 매개변수에 매핑할 수 있습니다.
  4. 비즈니스 로직 실행: 요청을 처리한 후, 컨트롤러는 필요한 비즈니스 로직을 실행하기 위해 서비스 레이어나 비즈니스 로직을 호출합니다. 이는 데이터를 처리하고, 데이터베이스와 상호 작용하며, 필요한 계산이나 처리를 수행하는 데 사용됩니다.
  5. 모델 데이터 설정: 컨트롤러는 뷰에 전달할 데이터를 모델 객체에 설정합니다. 스프링은 컨트롤러에서 반환된 모델 객체를 뷰에 전달하여 사용자에게 최종 결과를 표시할 수 있게 합니다.
  6. 뷰 선택 및 응답 반환: 컨트롤러는 처리 결과를 표시할 뷰를 결정합니다. 이는 JSP, HTML, PDF, JSON 등 다양한 형태의 응답을 생성할 수 있습니다. RESTful API를 구축하는 경우, 컨트롤러는 보통 JSON이나 XML 형식의 데이터를 직접 HTTP 응답으로 반환합니다.
  7. 예외 처리: 컨트롤러 내에서 발생하는 예외는 @ExceptionHandler 어노테이션을 사용한 메서드로 처리할 수 있습니다. 이를 통해 예외 상황을 적절히 관리하고 사용자에게 의미 있는 응답을 제공할 수 있습니다.

Controller 주요 어노테이션

어노테이션설명
@Controller이 어노테이션은 클래스가 스프링 MVC의 컨트롤러 역할을 함을 나타냅니다. 이를 통해 클래스는 웹 요청을 처리하는 데 사용될 수 있으며, 일반적으로 뷰를 반환합니다.
@RestController@Controller와 @ResponseBody의 조합으로, 클래스가 RESTful 웹 서비스의 컨트롤러임을 나타냅니다. 이 어노테이션을 사용하면 메서드에서 반환하는 데이터가 바로 응답 본문으로 사용됩니다.
@RequestMapping특정 HTTP 요청(URL, HTTP 메서드)을 클래스 또는 메서드에 매핑합니다. 이를 통해 해당 요청이 매핑된 메서드에 의해 처리됩니다.
@GetMapping@RequestMapping의 특수 형태로, GET 요청을 처리하기 위해 사용됩니다. 보다 간결한 구문으로 GET 요청에 응답하는 메서드를 지정합니다.
@PostMapping@RequestMapping의 특수 형태로, POST 요청을 처리하기 위해 사용됩니다. 주로 데이터를 제출할 때 사용됩니다.
@PutMapping@RequestMapping의 특수 형태로, PUT 요청을 처리합니다. 주로 데이터를 업데이트할 때 사용됩니다.
@DeleteMapping@RequestMapping의 특수 형태로, DELETE 요청을 처리합니다. 리소스를 삭제할 때 주로 사용됩니다.
@PathVariable메서드 매개변수를 URL 경로의 일부로 사용하도록 합니다. 동적인 URL 경로에서 데이터를 캡처하는 데 유용합니다.
@RequestParam요청 파라미터를 메서드의 매개변수로 바인딩합니다. 주로 쿼리 매개변수 또는 폼 데이터를 처리할 때 사용됩니다.
@RequestBodyHTTP 요청의 본문을 Java 객체로 매핑합니다. 주로 POST 또는 PUT 요청에서 JSON 또는 XML 데이터를 받을 때 사용됩니다.
@ResponseBody메서드에서 반환되는 객체를 HTTP 응답 본문으로 직접 매핑합니다. 주로 JSON 또는 XML 형식의 데이터를 반환할 때 사용됩니다.
@RequestHeaderHTTP 요청 헤더를 메소드의 파라미터로 바인딩합니다. 특정 헤더 정보를 필요로 할 때 사용합니다.
@ModelAttribute요청 파라미터를 객체로 바인딩합니다. 주로 POST 요청에서 폼 데이터를 객체로 매핑할 때 사용됩니다.
@SessionAttributes모델 속성을 HTTP 세션에 저장합니다. 여러 요청에 걸쳐 모델 속성을 유지해야 할 때 사용합니다.
@CookieValue요청에 포함된 쿠키 값을 메소드의 파라미터로 바인딩합니다. 쿠키 데이터를 읽을 때 사용합니다.
@ExceptionHandler컨트롤러 내에서 발생하는 예외를 처리합니다. 특정 예외 유형에 대한 처리 로직을 정의할 때 사용됩니다.

Controller 작성 예시

스프링 MVC에서 컨트롤러를 작성하는 방법에 대해 설명하겠습니다. 스프링 MVC는 Model-View-Controller 아키텍처를 기반으로 하는 웹 프레임워크입니다. 여기서 컨트롤러는 웹 요청을 받아 처리하고, 결과를 뷰에 전달하는 역할을 합니다.

스프링 MVC 컨트롤러 생성

클래스에 @Controller 어노테이션 추가: 클래스를 스프링의 컨트롤러로 정의합니다.

Java
@Controller
public class MyController {
    // 메소드 정의
}
Java

핸들러 메소드 정의: 각 웹 요청을 처리할 메소드를 정의합니다. 이 메소드들은 일반적으로 @RequestMapping 또는 그와 유사한 어노테이션(@GetMapping, @PostMapping 등)을 사용하여 특정 HTTP 요청에 매핑됩니다.

Java
@GetMapping("/hello")
public String sayHello(Model model) {
    model.addAttribute("message", "Hello from Spring MVC");
    return "hello"; // 뷰 이름 반환
}
Java

요청 매핑

  • URI와 메소드 연결: @RequestMapping을 사용하여 URI와 메소드를 연결합니다. @GetMapping, @PostMapping 등은 @RequestMapping의 특화된 형태입니다.
  • 경로 변수 사용: @PathVariable을 사용하여 URL의 일부를 메소드 파라미터로 추출할 수 있습니다.
  • 요청 파라미터 접근: @RequestParam으로 요청 파라미터에 접근할 수 있습니다.

데이터 전달 및 뷰 렌더링

  • 모델을 통한 데이터 전달: 메소드의 파라미터로 Model을 사용하여 뷰에 데이터를 전달합니다.
  • 뷰 선택: 메소드가 반환하는 문자열은 보통 뷰의 이름을 나타냅니다. 스프링은 이 이름을 사용해 뷰를 찾고 렌더링합니다.

폼 데이터 처리

  • 폼 제출 처리: @PostMapping을 사용하여 폼 제출을 처리할 수 있습니다.
  • 데이터 바인딩: @ModelAttribute를 사용하여 요청 파라미터를 객체에 바인딩할 수 있습니다.

예외 처리

  • 예외 핸들링: @ExceptionHandler를 사용하여 컨트롤러 내의 특정 예외를 처리할 수 있습니다.

예시 코드

Java
@Controller
public class MyController {

    @GetMapping("/greeting")
    public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "greeting"; // 뷰 이름
    }

    @PostMapping("/submitForm")
    public String submitForm(@ModelAttribute UserForm userForm, Model model) {
        // 폼 데이터 처리
        model.addAttribute("user", userForm);
        return "formResult";
    }

    @ExceptionHandler(Exception.class)
    public String handleException() {
        // 예외 처리 로직
        return "error";
    }
}
Java

이렇게 스프링 MVC에서 컨트롤러를 작성하면, HTTP 요청을 효과적으로 처리하고 응답을 구성할 수 있습니다. 실제 사용 시에는 프로젝트의 요구 사항과 구조에 따라 약간의 변형이 필요할 수 있습니다.

결론

스프링 MVC에서 컨트롤러(Controller)는 웹 애플리케이션의 중추적인 구성 요소로서, 클라이언트로부터의 HTTP 요청을 받아 해당 요청에 맞는 비즈니스 로직을 수행하고, 그 결과를 뷰에 전달하는 역할을 수행합니다. 이 과정에서 컨트롤러는 요청 매핑, 요청 파라미터 처리, 모델 데이터 설정, 뷰 선택 및 응답 반환, 그리고 예외 처리와 같은 다양한 작업을 합니다.

스프링 프레임워크는 @Controller와 @RestController 어노테이션을 통해 다양한 유형의 컨트롤러를 지원합니다. @Controller는 주로 뷰를 반환하는 웹 페이지 기반 컨트롤러를 정의하는 데 사용되고, @RestController는 RESTful API를 구축하는 데 적합하며 주로 JSON이나 XML 같은 데이터 형식을 HTTP 응답으로 직접 반환합니다.

컨트롤러의 핵심 작업은 다음과 같습니다.

  1. HTTP 요청 수신 및 매핑: URL과 HTTP 메소드에 기반한 요청을 적절한 메소드에 매핑합니다.
  2. 요청 파라미터 처리: @RequestParam, @PathVariable, @RequestBody 등을 사용하여 요청 데이터를 처리합니다.
  3. 비즈니스 로직 실행: 필요한 서비스나 컴포넌트를 호출하여 비즈니스 로직을 수행합니다.
  4. 모델 데이터 설정 및 뷰 반환: 처리 결과를 모델 객체에 설정하고, 적절한 뷰를 선택하여 응답을 반환합니다.
  5. 예외 처리: @ExceptionHandler를 사용하여 예외 상황을 적절히 관리합니다.

스프링 MVC의 컨트롤러를 효과적으로 사용하면, 웹 애플리케이션의 요청 처리와 응답 구성을 유연하고 효율적으로 관리할 수 있습니다.

suover

Recent Posts

Java 자바 Set – HashSet, TreeSet, LinkedHashSet 정리

소개 자바에서 Set은 중복을 허용하지 않는 데이터 집합을 의미합니다. List와 달리 동일한 요소를 여러 번…

1개월 ago

Java 자바 Hash 해시 제대로 이해하기

해시(Hash)란 무엇인가? 해시(Hash)는 자바 프로그래밍에서 빠르고 효율적인 데이터 저장 및 검색을 위한 핵심적인 개념입니다. 이…

2개월 ago

Java 자바 리스트 (List) 정리

List란 무엇인가? List는 자바 컬렉션 프레임워크의 핵심 인터페이스 중 하나로, 순서가 있는 데이터를 다루는 데…

2개월 ago

Java 자바 LinkedList 동작 원리와 사용법

LinkedList란 무엇인가? LinkedList는 자바에서 유용하게 사용되는 자료구조 중 하나로, 연결 리스트 방식을 이용하여 데이터를 관리하는…

2개월 ago

Java 자바 ArrayList 동작 원리와 사용법

ArrayList란 무엇인가? ArrayList는 자바에서 가장 널리 사용되는 컬렉션 중 하나로, 가변 크기의 배열을 구현한 클래스입니다.…

2개월 ago

Java 자바 제네릭(Generic) 개념과 문법 알아보기

제네릭(Generic)이란? 자바 제네릭은 코드의 재사용성을 높이고 타입 안전성을 보장하는 중요한 개념입니다. 이 블로그 글에서는 자바…

2개월 ago