HTTP Method와 URL 패턴
Spring Web MVC에서 사용하는 HTTP Method 매핑 방법과 URL 패턴에 대해 알아본다.
- 먼저 자주 사용하는 HTTP Method에 대해서 알아보자.
HTTP Method
GET
- 클라이언트가 서버의 리소스를 요청할 때 주로 사용하는 메서드이다.
- 브라우저에 기록이 남으며 URL에 전송하는 데이터가 표시되므로 민감한 데이터를 보내면 안 된다.
- 멱등성 O, 캐시 가능
HEAD
- GET 요청과 같지만 응답에 본문이 없고 헤더만 존재한다.
- 헤더를 통해 본문 정보를 유추할 때나 응답 상태 코드를 확인만 필요할 때도 유용하다.
- 멱등성 O, 캐시 가능
POST
- 클라이언트가 서버의 리소스를 수정하거나 새로 만들 때 사용한다.
- 서버에 리소스를 수정하거나 새로 만들 때 보내는 데이터를 POST 요청 본문에 담는다.
- 브라우저에 기록이 남지 않는다.
- 프락시는 POST 요청을 바로 서버로 통과시키는 성질이 있다.
- 멱등성 X, 캐시 가능
PUT
- URL에 해당하는 리소스를 새로 만들거나 수정할 때 사용한다.
- 특정 URL에 해당하는 데이터를 다루는 것이므로 POST와는 조금 다르다.
- 멱등성 O, 캐시 불가능
DELETE
- 요청 URL로 지정한 리소스를 삭제할 때 사용한다.
- HTTP 명세는 서버가 클라이언트에게 알리지 않고 요청을 무시하는 것을 허용하므로 삭제를 보장하지 못한다.
- 그러므로 응답을 통해 삭제에 대한 확인을 받는 게 좋다.
- 멱등성 O, 캐시 불가능
PATCH
- PUT은 전체 리소스를 수정할 때 주로 사용되며, PATCH는 해당 자원의 일부를 수정하는 의미로 사용된다.
- 멱등성 X, 캐시 가능
OPTIONS
- 웹 서버에게 여러 가지 종류의 지원 범위에 대해 물어보는 메서드
- 허용하는 HTTP Method, 요청 등을 응답으로 보내준다.
- CORS요청 시 Preflight Request에서 사용된다.
멱등성(Idempotent)
- 특정 메서드를 여러 번 요청해도 한 번 요청할 때와 결과가 같다는 뜻이다.
- GET, PUT, DELETE 같은 경우 해당 URL에 똑같은 요청을 보낼 경우 결과는 같다.
- POST는 리소스에 따라 결과가 달라지므로 멱등성을 지키지 못한다.
HTTP method 매핑하기
테스트 코드
- 해당 테스트 코드를 실행시켜가며 HTTP Method 매핑에 대해 알아볼 것이다.
@RequestMapping
- @RequestMapping시 따로 HTTP Method를 설정하지 않으면 모든 Method를 허용하게 된다.
- GET, POST 요청 모두 테스트가 성공하는 것을 알 수 있다.
@GetMapping
- @GetMapping을 사용할 경우 GET METHOD만 허용한다.
- 테스트 중 POST 요청은 실패한 것을 알 수 있다.
@RequestMapping에서 메서드 설정
- @RequestMapping으로 특정 메서드만 설정할 수도 있다.
Controller에 Http Method 설정하기
- Class단에도 @RequestMapping을 붙여 메서드를 설정할 수 있다.
- SampleController는 오직 GET Method만 허용할 것이다.
URL 패턴들
여러 가지의 URL 설정
- @RequestMapping에 여러 가지 URL을 설정할 수 있다.
요청을 식별자로 매핑하기
- ?를 사용하면 한 글자만 매핑해준다.
- /hello/3으로 요청하였을 때 테스트가 성공한 것을 알 수 있다.
- *, ** 등도 존재한다.
- (/hello/*) 이렇게 설정하면 /hello/123123 이렇게 여러 글자까지 매핑해준다.
- (/hello/**) 이렇게 설정하였다면 /hello/123/321/12 이렇게 여러 패스까지 매핑해준다.
Class @RequestMapping
- 클래스의 RequestMapping에 URI를 설정하면 해당 컨트롤러 내의 URL의 기본 패스가 추가된다.
- Controller에 /hello로 설정하였으므로 /hello/* 로 요청을 하여야 한다.
정규 표현식 활용
- 정규 표현식을 활용할 수도 있다.
- name이 a ~ z 문자여야 하고 + 는 한번 이상 존재해야 한다는 뜻이다.
- 즉 name이 문자이면서 한 글자 이상 존재하는 경우에만 매핑이 된다.
- 테스트를 보면 master는 통과하지만 @@는 통과되지 않는 것을 알 수 있다.
URI 패턴이 중복될 때
- 가장 구체적으로 매핑되는 핸들러를 선택한다.
- 그러므로 "hello test"를 리턴하는 메서드에 매핑될 것이다.
'스프링 > 스프링 MVC' 카테고리의 다른 글
Spring MVC HEAD, OPTIONS HTTP Method (0) | 2019.12.22 |
---|---|
Spring MVC 미디어타입, 헤더, 매개변수 매핑 (0) | 2019.12.22 |
전역 컨트롤러: @(Rest)ControllerAdvice (0) | 2019.12.12 |
예외 처리 핸들러: @ExceptionHandler (0) | 2019.12.12 |
데이터 바인더: @InitBinder (0) | 2019.12.11 |