반응형
1. 컨트롤러 (Controller)
컨트롤러는 클라이언트의 요청을 받아 비즈니스 로직을 처리하고, 그 결과를 뷰(View)에 전달하는 역할을 하는 스프링 컴포넌트입니다. 스프링 MVC(Model-View-Controller) 구조에서 중요한 요소로, @Controller 어노테이션을 통해 클래스를 컨트롤러로 정의합니다.
주요 기능
- 요청 매핑 (Request Mapping): 특정 URL 요청을 매핑하여 적절한 메서드를 실행합니다. 예를 들어, /users로 들어오는 요청을 getUsers() 메서드로 연결할 수 있습니다.
- 뷰 반환 (View Return): 비즈니스 로직 수행 후 결과를 모델(Model)에 담고, 반환할 뷰의 이름을 리턴합니다.
- 모델 관리 (Model Management): 처리된 데이터를 Model 객체에 담아 뷰로 전달합니다.
예시
@Controller
public class UserController {
@GetMapping("/users")
public String getUsers(Model model) {
// 비즈니스 로직 수행
List<User> users = userService.getAllUsers();
model.addAttribute("users", users);
return "userList"; // 뷰의 이름 반환
}
}
2. 핸들러 (Handler)
핸들러는 스프링에서 HTTP 요청을 처리하는 모든 구성 요소를 의미하며, 일반적으로 특정 컨트롤러 메서드나 특정 요청을 처리하는 객체를 가리킵니다. 스프링의 다양한 요청 처리 메커니즘에서 "핸들러"라는 용어가 사용되며, 컨트롤러도 넓은 의미의 핸들러 중 하나입니다.
주요 기능
- 핸들러 매핑 (Handler Mapping): 들어오는 요청에 대해 적절한 핸들러를 찾고 매핑합니다. 여기서 핸들러는 특정 컨트롤러 메서드일 수도 있고, 다른 타입의 핸들러일 수도 있습니다.
- 핸들러 어댑터 (Handler Adapter): 찾아낸 핸들러를 실행 가능한 형태로 변환하고 실행합니다. 스프링은 다양한 유형의 핸들러(예: 컨트롤러, 핸들러 인터셉터)를 지원하기 위해 여러 핸들러 어댑터를 제공합니다.
예시
// 예를 들어, 스프링은 HandlerMethod라는 클래스를 사용하여
// 특정 메서드를 핸들러로 나타낼 수 있습니다.
public class MyHandlerMethod extends HandlerMethod {
// 핸들러에 대한 로직 구현
}
3. 컨트롤러와 핸들러의 차이점
구분 | 컨트롤러 (Controller) | 핸들러 (Handler) |
정의 | HTTP 요청을 처리하고 뷰를 반환하는 클래스나 메서드 | HTTP 요청을 처리할 수 있는 모든 구성 요소 |
역할 | 요청을 매핑하고 비즈니스 로직을 실행하며 뷰를 반환 | 요청을 처리하기 위한 모든 객체를 의미하며, 컨트롤러도 핸들러의 일종임 |
사용 어노테이션 | @Controller, @RequestMapping, @GetMapping 등 | 특정 어노테이션 없음, 다양한 객체가 핸들러로 사용될 수 있음 |
관련 컴포넌트 | @Controller, @RestController, Model, View 등 | HandlerMapping, HandlerAdapter, Interceptor 등 |
요약
스프링 프레임워크에서 "컨트롤러"와 "핸들러"는 웹 애플리케이션 요청 처리를 담당하는 중요한 개념입니다. 컨트롤러는 클라이언트의 요청을 받아 비즈니스 로직을 처리하고, 그 결과를 뷰에 전달하는 역할을 합니다. 핸들러는 이러한 컨트롤러를 포함해 요청을 처리하는 모든 구성 요소를 의미하며, 요청을 처리할 수 있는 다양한 객체를 가리킵니다.
컨트롤러는 주로 @Controller와 같은 어노테이션으로 정의되며, 요청을 처리하고 뷰를 반환하는 메서드를 포함합니다. 반면, 핸들러는 더 넓은 범위의 개념으로, 스프링의 요청 처리 메커니즘에서 사용되는 모든 구성 요소를 지칭합니다.
반응형
'Spring' 카테고리의 다른 글
DAO의 개인적인 오해 (0) | 2024.12.17 |
---|---|
DTO, VO의 개념 (0) | 2024.12.17 |
spring - handler(핸들러)란 무엇인가? (1) | 2024.08.29 |
JPA Could not write JSON: failed to lazily initialize a collection of role 에러 해결 (0) | 2024.04.04 |
Spring database config bean 다중 설정 예제 by JPA (0) | 2024.04.04 |