0. 개요
- 이전 포스팅에서 Front Controller의 동작을 Annotation을 이용하여 적용하는 방법에 대해서 알아보았다.
- 이번 포스팅에서는 Spring Boot가 지원하는 다양한 URL 매핑 방식 및 annotation에 대해서 알아보자.
1. URL 매핑 형식 지원
- 백엔드에서 URL을 매핑하는 작업은 굉장히 중요한 작업이다.
- 매핑 URL에 오타가 있다면 완전히 다른 주소가 되기 때문이다.
@RequestMapping("/springmvc/view")
@ReqeustMapping("/springmvc/view/")
- 사실 "/springmvc/view"와 "/springmvc/view/"는 엄연히 다른 URL이다.
- 그러나 Spring Boot에서는 위의 예시에 나온 URL을 동일한 주소로 처리해준다.
2. @PathVariable
- 최근 사용되는 URL 매핑 방식이다.
- Spring Boot에서 지원하는 기능으로 URL 자체에 변수를 할당하여 사용하는 방식이다.
- @PathVariable을 사용하면 URL parameter를 꺼내서 사용할 수 있다.
- URL parameter를 편리하게 사용할 수 있으며, URL을 깔끔하게 작성 및 매핑할 수 있다.
// @PathVariable의 이름과 이를 받아오는 변수명이 동일하면 생략이 가능하다.
@GetMapping("/mapping/{userId}")
public String mappingPath(@PathVariable String userId) {
log.info("mappingPath userId = {}", userId);
return "PathVariable";
}
// 다중 PathVariable 선언
@GetMapping("/mapping/users/{userId}/orders/{orderId}")
public String mappingPath(
@PathVariable String userId,
@PathVariable Long orderId)
{
log.info("mappingPath userId={}, orderId={}", userId, orderId);
return "multi-pathVariable";
}
- @PathVariable의 이름과 이를 받아오는 변수명이 동일하다면 생략할 수 있다.
@PathVariable("userId") String data ==> @PathVariable String userId
3. URL parameter를 이용한 조건 매핑
- @PathVariable의 사용으로, 요즘은 잘 사용하지 않는 방식이다.
- URL에 특정 parameter를 설정하여, URL을 요청할 때 반드시 특정 parameter와
parameter의 값이 유효한 경우에만 요청을 허락하는 URL 매핑 방식이다.
- @RequestMapping 또는 축약형(@GetMapping, @PostMapping, etc)에서 사용할 수 있다.
- params라는 옵션으로 특정 URL parameter를 설정할 수 있다.
@GetMapping(value = "/mapping-param", params = "mode=debug")
public String mappingParam() {
}
- 위의 예시의 경우, URL이 반드시 "mapping-param?mode=debug"의 형태로 들어와야 한다.
- 만약 특정 parameter와 그 값을 만족하지 않는 경우, 상태 코드 400(bad request)을 Client에게 반환한다.
4. Header 값을 이용한 조건 매핑
- URL parameter를 이용하여 URL 매핑에 조건을 부여한 것과 같은 방식으로 Header 값을 사용할 수 있다.
- Header 값을 이용하여 조건을 설정하는 방법은 header 옵션을 이용한다.
- 동일하게 @RequestMapping 또는 축약형(@GetMapping, @PostMapping, etc)에서 사용할 수 있다.
@GetMapping(value = "/mapping-header", headers = "mode=debug")
public String mappingHeader() {
log.info("mappingHeader");
return "ok";
}
5. Content Type을 이용한 조건 매핑(Server)
- Client로부터 전달받는 데이터의 미디어 타입(MIME Type)을 이용한 조건 매핑 방식이다.
- Header에 포함된 미디어 타입을 이용한 방식으로, consume 옵션을 사용한다.
- 옵션의 이름이 consume인 이유는, Client가 전달한 데이터를 Server에서 사용/소비하기 때문이다.
- consume 옵션을 사용하여 Server가 받을 수 있는 데이터 타입의 제약을 설정할 수 있다.
- 특정 데이터 타입 외의 데이터를 포함한 요청은 거절되기 때문이다.
@PostMapping(value = "/mapping-consume", consumes = "application/json")
public String mappingConsumes() {
return "ok";
}
6. Content Type을 이용한 조건 매핑(Client)
- Client가 받을 수 있는 데이터 타입의 제약을 설정하는 매핑 방식이다.
- Server가 Client에게 전달하는 HTTP response에 담긴 데이터 타입을 설정하는 것이다.
- Client가 요청을 보낼 때, header의 accept 속성을 설정한다.
- accept 속성에는 Client가 소화할 수 있는 미디어 타입이 value로 명시된다.
- 매핑 옵션으로 produce를 사용한다.
- 옵션의 이름이 produce인 이유는, Server가 보낸 데이터를 이용하여 Client는 웹 페이지를 생성하기 때문이다.
@PostMapping(value = "/mapping-produce", produces = "text/html")
public String mappingProduces() {
return "ok";
}
7. HTTP 요청 메서드에 따른 매핑
- 동일한 URL에 대해서 HTTP 요청 메서드에 따라 다른 처리를 수행하도록 설정할 수 있다.
- 다음 예시를 보면 이해가 쉬울 것이다.
@GetMapping("/users")
public String searchUser() {} // 회원 목록 조회 기능
@PostMapping("/users")
public String saveUser() {} // 회원 등록 기능
@GetMapping("/users/{userId}")
public String searchUser() {} // 특정 회원 검색 기능
@PatchMapping("/users/{userId}")
public String updateUser() {} // 특정 회원의 정보수정 기능
@DeleteMapping("/users/{userId}")
public String deleteUser() {} // 특정 회원 삭제 기능
- 이처럼 동일한 URL을 매핑했지만, 요청 메서드에 따라 다른 비즈니스 로직을 수행하도록 설정할 수 있다.
'Back-end > Spring MVC 개념' 카테고리의 다른 글
15. Request - message Body 조회방법 (0) | 2022.03.15 |
---|---|
14. Request - URL parameter 조회방법 (0) | 2022.03.14 |
12. Annotation 기반의 Spring MVC (0) | 2022.03.09 |
11. Spring MVC의 특징 (0) | 2022.03.08 |
10. Front Controller(2) (0) | 2022.03.07 |
댓글