HTTP란 대표적인 서버 / 클라이언트 간의 요청/응답 프로토콜입니다. 현재 대부분의 웹 서비스들이 HTTP 통신을 하고 있습니다. 스프링 프레임워크 기반의 웹 애플리케이션들도 대부분 HTTP로 요청을 받아 처리합니다.
특정 요청을 받아 처리하는 것을 Handler라고 합니다. 그렇다면 HTTP 요청을 받아 처리하는 것은 HTTP Handler라고 하겠죠? 그렇다면 스프링에서 HTTP Handler를 어떻게 구성하고, 또 HTTP 요청을 처리하는지 알아보겠습니다.
HTTP 요청 처리하기 - ① HTTP Method 맵핑
HTTP 요청의 종류
HTTP 요청을 처리하기에 앞서, HTTP 요청의 종류에 무엇이 있는지 알아보겠습니다. 웹 서비스들을 개발해 본 경험이 있는 사람들이라면, POST나 GET이라는 단어를 많이 들어보셨을 텐데요. 이 둘이 대표적인 HTTP 요청의 종류입니다.
저도 처음에는 HTTP 요청이 POST와 GET 두 가지밖에 없는 줄 알았는데요. 공부해 보니 생각보다 다양한 종류의 HTTP 요청들이 있었습니다.
- GET : GET method는 서버로부터 특정 리소스의 출력을 요청합니다. GET 요청은 데이터를 검색할 때 사용합니다. 데이터를 캐싱할 수 있고, URL에 데이터가 노출되기 때문에 민감한 데이터 전송 시에는 사용하지 않는 게 좋습니다.
- HEAD : HEAD method는 GET 요청과 동일한 응답을 요청하지만, 응답 본문(Response Body)은 제외합니다.
- POST : POST method는 서버에 데이터(엔티티)를 제출(송신)합니다. 클라이언트가 서버 리소스를 수정하거나 새로 만들 때 사용합니다.
- PUT : PUT method는 클라이언트가 서버 리소스를 수정하거나 새로 만들 때 사용하는데, 현재 리소스를 전송한 데이터로 전부 교체합니다.(변경되는 부분만 보냄)
- DELETE : 서버의 특정 리소스를 삭제하는 요청입니다.
대부분이 GET과 POST method만 아는 이유는 나머지 요청들이 사실 잘 쓰이지 않기 때문입니다. 스프링의 HTTP Handler는 이 요청들을 어떻게 처리하는지 코드로 알아봅시다.
HTTP 요청 Method 맵핑
스프링 프레임워크에서 HTTP method를 맵핑하는 방법은, @RequestMapping이라는 어노테이션을 사용하면 됩니다. 컨트롤러 클래스나 메서드 위에 선언하면 됩니다.
@Controller
public class SampleController {
@RequestMapping(method = RequestMethod.GET, value = "/hello")
public String getHello(){
return "Hello GET Reqeust";
}
//다양한 method를 처리하고 싶을때는 배열로 선언
@RequestMapping(method = {RequestMethod.GET, RequestMethod.POST}, value="/multipleHello")
public String multipleHello(){
return "Hello Multiple Request method";
}
}
@RequestMapping에 method를 선언하는 방식은 조금 귀찮다는 느낌이 들죠? 그래서 스프링은 조금 더 간단하게 HTTP method를 맵핑할 수 있는 어노테이션을 제공합니다. 그게 바로 @GetMapping, @PostMapping... 등등의 어노테이션입니다. 방식은 마찬가지로 핸들러 클래스나, 메서드에 해당 어노테이션을 선언해 주면 됩니다.
@Controller
public class SampleController {
@PostMapping(value="/hello")
public String postHello(){
return "Hello POST Request";
}
@GetMapping(value="/gethello")
public String getHello(){
return "Hello GET Request";
}
}
이전 글: Spring Bean의 초기화와 종료
[Spring Framework]Spring Bean의 초기화와 종료
어떤 인스턴스를 사용하다 보면 인스턴스 생성 시 생성자에서 처리해야 할 일들이 있고, 객체의 소멸(인스턴스 해제) 전에 처리해야 할 작업들이 있습니다. 예를 들면 네트워크 소켓이나 DB에 연
belklog.tistory.com
'코딩log > Spring Framework' 카테고리의 다른 글
[Spring Framework]HTTP요청 처리하기 - ② URI Pattern Mapping (2) | 2023.08.06 |
---|---|
[Spring Framework]Spring Bean의 초기화와 종료 (1) | 2023.04.20 |
[Spring Framework]Autowired와 자동 의존관계 주입의 옵션들 (0) | 2023.04.17 |
[Spring Framework]ComponentScan과 자동 의존관계 주입 (1) | 2023.04.11 |
[Spring Framework]@Configuration과 Singleton (0) | 2023.03.19 |
댓글