1. Controller 기본 개념
Spring Framework에서 @Controller
와 @RestController
는 클라이언트 요청을 처리하기 위한 두 가지 방식입니다.
@Controller
- 주로 뷰 템플릿(HTML 등)을 반환하는 데 사용됩니다.
- Thymeleaf와 같은 템플릿 엔진과 결합해 동적인 HTML 페이지를 생성할 수 있습니다.
@RequestMapping
이나@GetMapping
,@PostMapping
등의 어노테이션을 사용하여 경로를 정의합니다.
@RestController
- RESTful API를 위한 컨트롤러입니다.
@Controller
와 달리 JSON, XML 등의 데이터 형식을 반환합니다. - 내부적으로
@ResponseBody
를 포함하고 있어 별도로 지정할 필요가 없습니다. 이는 HTTP 요청에 대한 응답을 직접 본문(body)에 담아 전달합니다.
- RESTful API를 위한 컨트롤러입니다.
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. 데이터를 클라이언트에 반환하는 방법
- View 반환 :
@Controller
를 통해 템플릿 엔진에 의해 렌더된 HTML 파일을 반환합니다. - 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 |