@RequestMapping
@RequestMapping은 Spring Framework에서 컨트롤러 메서드에 대한 매핑을 지정하는 데 사용되는 어노테이션입니다. 이 어노테이션은 클래스 수준 또는 메서드 수준에서 사용될 수 있습니다. 클래스 수준에서 사용할 경우, 해당 클래스의 모든 메서드에 적용됩니다.
@Controller
@RequestMapping("/example")
public class ExampleController {
@RequestMapping("/hello")
public String hello() {
return "helloPage";
}
}
// 위에 코드에서 클라이언트에서 "/example/hello" 경로에 요청을 보내면
// 서버에서는 hello 메서드가 실행되면서 클라이언트한테 helloPage를 반환합니다.
'@RequestMapping' 에서는 아래와 같은 다양한 속성을 설정할 수 있습니다.
- value 또는 path: 매핑할 URI를 지정합니다.
- method: 요청 메서드를 지정합니다 (GET, POST, 등).
- params: 요청 파라미터를 지정하여 특정 조건을 만족시킬 수 있습니다.
- headers: 헤더를 기반으로 요청을 매핑할 수 있습니다.
@RequestMapping(value = "/example", method = RequestMethod.GET, params = "id=1")
public String exampleMethod() {
// 메서드 내용
}
// 위에 메서드는 "/example" 경로로의 GET 요청 중에 파라미터 'id' 가 1인 경우에만 실행됩니다.
@GetMapping, @PostMapping ...
'@GetMapping' 및 '@PostMapping'은 '@RequestMapping'의 특수한 케이스로, 각각 HTTP GET 및 POST 요청에 대한 매핑을 간소화한 것입니다. 해당 어노테이션에 대한 차이점은 '@RequestMapping'은 클래스와 메서드에 대해서 사용할 수 있지만, '@GetMapping' 및 '@PostMapping', 등의 어노테이션은 메서드에 대해서만 사용할 수 있다. [Spring 4.3 버전부터 추가된 기능]
@GetMapping("/example")
public String exampleGet() {
// GET 요청에 대한 처리
}
@PostMapping("/example")
public String examplePost() {
// POST 요청에 대한 처리
}
@RequestMapping의 처리 과정
1. 스프링 프레임워크에서는 스프링 컨테이너를 통해 객체(bean)을 관리합니다. 여기서 스프링 컨테이너가 'ApplicationContext'인데, 애플리케이션이 실행되면 사용될 객체(bean)를 담을 'ApplicationContext'를 생성하고 초기화합니다.
2. '@Controller' 어노테이션이 붙은 클래스들은 먼저 스프링 IoC 컨테이너에 빈으로 등록 됩니다. 이 과정에서 해당 클래스의 메서드들에 있는 '@RequestMapping' 어노테이션도 함께 스캔되어 매핑됩니다.
3. 그 후 'RequestMappingHandlerMapping'이 빈에 등록됩니다. 등록 된 'RequestMappingHandlerMapping'은 '@Controller' 클래스들 및 그 안의 '@Requestmapping' 어노테이션이 있는 메서드들의 매핑 정보를 사용하여 요청과 컨트롤러 메서드를 매핑합니다.
4. 클라이언트에서 '@RequestMapping'에 명시된 URL로 HTTP 요청을 보내면, 스프링에서는 해당 요청을 처리할 컨트롤러을 스캔합니다. 해당하는 메서드가 호출되고, 메서드는 비지니스 로직을 처리하고, 결과를 클라이언트에게 반환합니다.