Backend

[Spring Boot] @RestController와 @Controller의 차이점

min_ee 2025. 1. 22. 23:51

 

스프링 입문 실습 후 과제를 진행하기 위해 문항을 봤다.

 

"기본 웹 페이지를 설정하고 @RestController를 사용하여 간단한 REST API 엔드포인트를 구현합니다.

예를 들어, “Hello, World” 메시지를 반환하는 API를 만듭니다.

엔드포인트 실행 결과 스크린샷 및 코드를 결과물로 제출합니다."

 

수업들었던 것 참고하려는데 수업에서는 @Controller를 사용했는데 과제는 @RestController?

무슨 차이지 하면서 찾아보게 되었다.

 

 

@RestController란?

@RestController는 Spring MVC에서 RESTful 웹 서비스를 개발하기 위한 어노테이션이다.

Spring은 반환 값을 JSON 또는 XML로 변환해 클라이언트에 전달하고, 

@Controller와 @ResponseBody를 합친 형태로 동작하기에 별도의 @ResponseBody 어노테이션을 추가할 필요가 없다.

주로 RESTful API를 설계하거나 JSON 데이터를 직접 반환하는데 적합하다고 한다.

 

예시

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

결과 화면

 

@Controller란?

Spring MVC에서 뷰 템플릿 렌더링을 위한 어노테이션이다.

클라이언트에게 랜더링 된 HTML을 제공하고,

메서드의 반환 값을 뷰 이름으로 판단한다.

HTML 페이지를 반환하거나 포워딩할 때 적합하다.

데이터 응답을 본문에 직접 쓰고 싶다면 @ResponseBody 어노테이션을 추가해야한다.

예시

@Controller
public class HelloController {
    @GetMapping("/hello")
    public  String hello() {
        return "hello";
    }
}

결과화면

작성하면서 봤는데 실습할때 

Controller + ResponseBody를 사용한 것도 있었다.

이게 RestController이였군..

머쓱

그래서 실습해봄

 

@Controller + @ResponseBody 실습

@Controller
public class HelloController {

	@GetMapping("hello-api")
	@ResponseBody
	public Hello helloAPI(@RequestParam("name") String name) {
		Hello hello = new Hello();
		hello.setName(name);
		return hello;
	}

	static class Hello {
		private String name;

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}
	}
}

결과화면

 

약간 나의 오해?로 생긴 블로그 글쓰기였다.

그래도 앞으론 확실하게 구분할 수 있을 듯

유익한 오해였다.