(Spring) Controller & RestController란 무엇인가

2024. 10. 23. 23:53·Spring

1. Controller 기본 개념

Spring Framework에서 @Controller와 @RestController는 클라이언트 요청을 처리하기 위한 두 가지 방식입니다.

  1. @Controller
    • 주로 뷰 템플릿(HTML 등)을 반환하는 데 사용됩니다.
    • Thymeleaf와 같은 템플릿 엔진과 결합해 동적인 HTML 페이지를 생성할 수 있습니다.
    • @RequestMapping이나 @GetMapping, @PostMapping 등의 어노테이션을 사용하여 경로를 정의합니다.
  2. @RestController
    • RESTful API를 위한 컨트롤러입니다. @Controller와 달리 JSON, XML 등의 데이터 형식을 반환합니다.
    • 내부적으로 @ResponseBody를 포함하고 있어 별도로 지정할 필요가 없습니다. 이는 HTTP 요청에 대한 응답을 직접 본문(body)에 담아 전달합니다.

2. 주요 기능과 특징

2.1 RequestMapping 중복 방지

  • @RequestMapping 어노테이션을 사용하면 공통 경로를 클래스에 설정할 수 있습니다. 이후 각 메서드는 세부 경로만 정의하면 됩니다.
@RequestMapping("/api/schedules")
public class ScheduleController {
    @GetMapping
    public List<ScheduleDTO> getAllSchedules() { ... }
}

2.2 HTTP 메서드 사용

  • RESTful 서비스에서는 GET, POST, PUT, DELETE와 같은 HTTP 메서드를 활용합니다.
    • GET : 데이터 조회
    • POST : 데이터 생성
    • PUT/PATCH : 데이터 수정
    • DELETE : 데이터 삭제

2.3 Redirect 사용

  • redirect:를 사용하면 서버 주소나 리소스를 다른 경로로 이동시킬 수 있습니다. 보안 목적으로나 페이지 흐름을 제어할 때 유용합니다.

3. 데이터를 클라이언트에 반환하는 방법

  1. View 반환 : @Controller를 통해 템플릿 엔진에 의해 렌더된 HTML 파일을 반환합니다.
  2. JSON 반환 : @RestController를 사용하면 JSON 형식으로 데이터를 직접 클라이언트에게 전달합니다. 프론트엔드와 백엔드를 쉽게 통합할 수 있는 장점이 있습니다.

4. Thymeleaf와 템플릿 사용법

  • templates 디렉토리에 HTML 파일을 두고 Spring이 이를 렌더링합니다.
  • 뷰 이름만 반환하면 되며, 확장자 .html은 생략 가능합니다:
@GetMapping("/home")
public String home() {
    return "index"; // index.html 파일을 반환
}

5. TIP & 정리

▶ @Controller와 @RestController 함께 사용하기

  • 일부 요청은 뷰 페이지로, 일부는 JSON 응답으로 처리해야 할 때 두 어노테이션을 혼합 사용할 수 있습니다.
    • 예를 들어, 페이지 이동은 @Controller로 처리하고, API 호출은 @RestController로 처리합니다. 이를 통해 프론트엔드와 백엔드의 명확한 분리가 가능합니다.

▶ 정리

Spring에서 @Controller와 @RestController의 차이와 사용 목적을 이해하면 서버와 클라이언트 간의 데이터 흐름을 유연하게 설계할 수 있습니다. @RestController를 통해 쉽게 REST API를 구축할 수 있으며, 템플릿 엔진을 활용해 뷰와 데이터를 모두 처리할 수 있습니다. 프로젝트 상황에 따라 두 방식을 적절히 조합해 활용하는 것이 중요합니다.

저작자표시 비영리 변경금지

'Spring' 카테고리의 다른 글

(Spring) Jackson과 Spring에서의 활용  (0) 2024.10.28
(Spring) 삭제 관련 Cascade 사용 여부에 따른 정리  (0) 2024.10.24
(Spring) DI와 IOC 이해하기  (0) 2024.10.18
(Spring) Servlet & DispatcherServlet 개념  (0) 2024.10.14
(Spring) MVC와 Spring MVC  (0) 2024.10.11
'Spring' 카테고리의 다른 글
  • (Spring) Jackson과 Spring에서의 활용
  • (Spring) 삭제 관련 Cascade 사용 여부에 따른 정리
  • (Spring) DI와 IOC 이해하기
  • (Spring) Servlet & DispatcherServlet 개념
lastdove
lastdove
lastdove 님의 블로그 입니다.
  • lastdove
    lastdove 님의 블로그
    lastdove
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • Spring (16)
      • JAVA (17)
      • JAVA 알고리즘 (20)
      • Project (5)
      • SQL 문제풀이 (17)
      • Git&Linux (2)
      • Web development(입문) (2)
      • Sparta (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
lastdove
(Spring) Controller & RestController란 무엇인가
상단으로

티스토리툴바