SpringBoot/웹 애플리케이션 개발

컨트롤러(@RestController, @Controller)

DEVLIB 2025. 4. 14. 10:31
728x90

Controller란?

스프링 MVC에서 Controller는 사용자의 요청(Request)을 받아 처리하고, 적절한 응답(Response)을 돌려주는 역할을 합니다. MVC 구조에서 **"C(Controller)"**에 해당하죠.


@Controller

특징

  • HTML 뷰(View)를 반환할 때 사용
  • 주로 Thymeleaf, JSP 등 템플릿 엔진과 함께 사용
  • 반환 값은 뷰 이름이며, 템플릿에서 해당 파일을 찾아 렌더링함

예시

@Controller
public class HelloController {
    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("name", "단비");
        return "hello"; // → resources/templates/hello.html 렌더링
    }
}

return "hello"는 hello.html 템플릿 파일을 의미합니다.


@RestController

특징

  • JSON, XML 같은 데이터 자체를 응답할 때 사용
  • @Controller + @ResponseBody의 축약형
  • 주로 REST API 개발에 사용

예시

@RestController
public class HelloRestController {
    @GetMapping("/api/hello")
    public String hello() {
        return "안녕하세요!"; // 문자열 자체가 HTTP 응답 본문으로 반환됨
    }

    @GetMapping("/api/user")
    public UserDto user() {
        return new UserDto("홍길동", 25);
    }
}

 

응답 결과 (JSON):

{
  "name": "홍길동",
  "age": 25
}

차이점 요약

구분 @Controller @RestController
목적 뷰 렌더링 데이터(JSON) 반환
반환값 뷰 이름 (ex: "home") HTTP Response Body
사용처 웹 페이지 REST API 서버
내부 구성 + @ResponseBody 필요 자동 적용됨

함께 알아두면 좋은 애너테이션

애너테이션 설명
@GetMapping GET 요청 처리
@PostMapping POST 요청 처리
@RequestParam URL 파라미터 받기
@PathVariable 경로에 있는 값 받기
@RequestBody JSON 본문을 객체로 바인딩
@ResponseBody 반환 데이터를 HTTP 응답으로 변환

실제 사용 시 기준

상황 추천
사용자에게 HTML 페이지 보여줘야 함 @Controller
클라이언트(앱/프론트)와 JSON으로 통신 @RestController
SEO가 중요하고 템플릿 뷰가 필요 @Controller + Thymeleaf
마이크로서비스, SPA와 백엔드 연동 @RestController + JSON API

마무리

핵심 요약 
@Controller: HTML 뷰 반환 (Thymeleaf 등)
@RestController: JSON 등 데이터 반환 (API)
상황에 따라 역할을 명확히 구분해서 사용해야 유지보수 및 협업이 쉬워집니다.
LIST