본문 바로가기
Backend/Spring

Spring : @Controller와 @RestController 어노테이션에 대해서

by 코딩쥐 2024. 10. 26.

@Controller 

@Controller 어노테이션은 스프링의 MVC(Model-View-Controller) 패턴에서 컨트롤러 역할을 수행한다. 클라이언트로부터 들어오는 HTTP 요청을 특정 메서드와 연결하여 요청을 처리하고, 요청 처리 결과에 따라 적절한 응답(주로 view)을 반환한다. 뷰를 반환할 때는 JSP와 같은 템플릿 파일을 함께 사용하여 HTML페이지를 반환할 수 있다. 컨트롤러에서도 데이터를 반환할 수 있는데, 반환하기 위해서는 @ResponseBody 어노테이션을 사용해야 한다. @ResponseBody를 사용하면 @Controller 어노테이션의 반환 값이 뷰로 렌더링 되지 않고 JSON, XML, 텍스트 등의 형태로 전달할 수 있다.

 

Controller의 내부에는 아래의 사진에 포함된 어노테이션이 포함되어 있다.

 

(+) MVC 패턴은 웹 애플리케이션의 구조를 세 가지 주요 구성 요소로 나누어 관리하는 디자인 패턴이다. 모델의 경우 데이터베이스와 상호작용을 통해 데이터를 조화, 저장, 수정한다. 뷰는 사용자에게 보여지는 UI 요소로 모델 데이터를 표시하고 사용자 입력을 받을 수 있다. 컨트롤러는 클라이언트의 요청을 처리하고 모델과 뷰를 연결하는 역할을 수행한다. 처리 결과를 모델에 담아 뷰에 전달하는 역할을 한다.

 

@Controller 예시

package com.example.project2.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

// 문자열 반환 예시
@Controller
public class HomeController {

    // RequestMapping : 특정 URL 패턴과 HTTP 메서드를 매핑
    // HTTP메서드는 RequestMethod.GET | POST | PUT | PATCH | DELETE 가능하다.
    @RequestMapping(value = "/", method = RequestMethod.GET) // 루트 URL에 대한 GET 요청 처리
    @ResponseBody // 메서드 반환값을 HTTP 응답 본문에 직접 포함
    public String home() {
        return "<h2>반갑습니다! 여긴 코딩쥐의 티스토리입니다.(Controller) </h2>"; // 응답으로 문자열 반환
    }
}

 

 

@RestController 

@RestController는 @Controller와 @ResponseBody의 조합으로, 클라이언트에게 데이터를 직접 반환하는 데 사용된다. 반환되는 데이터는 JSON, XML 등의 형식으로 직렬화되어서 전달된다. @Controller의 경우 모델과 뷰 정보를 함께 담고 있는 ModelAndView 객체를 반환하는 반면, @RestController의 경우 뷰를 반환하지 않고 데이터만 반환한다. @RestController의 경우에는 메서드의 반환 값이 HTTP 응답 본문에 직접 포함된다. 따라서 RESTful 웹 서비스(HTTP 프로토콜을 기반으로 클라이언트와 서버 간의 상호작용을 정의한다.)를 구현하는 데 적합하다. 

 

RestController의 내부에는 아래의 사진에 포함된 어노테이션이 포함되어 있다.

 

(+) RESTful 웹 서비스는 URI로 식별되는 데이터 객체인 리소스 중심으로 설계된다. 각 리소스는 HTTP메서드를 사용하여 조회(GET), 생성(POST), 대체(PUT), 수정(PATCH), 삭제(DELETE)할 수 있다. 리소스는 JSON, XML 등의 형식으로 표현된다. 

 

@RestController 예시

package com.example.project2.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

// 문자열 반환 예시
@RestController
public class HomeController {
    // RequestMapping : 특정 URL 패턴과 HTTP 메서드를 매핑
    // HTTP메서드는 RequestMethod.GET | POST | PUT | PATCH | DELETE 가능하다.
    @RequestMapping(value = "/", method = RequestMethod.GET) // 루트 URL에 대한 GET 요청 처리
    //RestController는 ResponseBody가 필요 없다. 
    public String home() {
        return "<h2>반갑습니다! 여긴 코딩쥐의 티스토리입니다.(RestController) </h2>"; // 응답으로 문자열 반환
    }
}