
무슨 요청인지 알고 Mapping으로 들어오니?
Mapping 종류만 다르고 URI 같으면 어쩔려고?
물은우리는 답을 알고있다.
서버에 요청을 해봤다면 모두가 아는 사실.
GetMapping해두면 요청보낼때 METHOD : GET 으로 보내면됨~
당연한 소리이다. 간단한 예로
const res = fetch('http://localhost:8080/uri', {
method: "GET",
});
위 코드처럼 HTTP 요청을 보낼 때 method를 정의해주면 아래와 같이 요청이 전송된다.
GET /uri HTTP/1.1
Host: localhost:8080
그리고 요청의 결과를 아래와 같이 돌려준다.
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 34
{
"username": "hyeon",
"age": 20
}
그렇다면 전송하는 방식은 어떤게 있을까
- HTTP Method
| GET | 리소스 조회 메서드 (Read), 캐싱 가능 |
| POST | 전달한 데이터 처리/생성 요청 메서드 (Create), 주로 신규 등록 |
| PUT | 리소스를 대체(덮어쓰기 수정)하는 메서드 (Update), 없으면 새로 생성 |
| PATCH | 리소스 일부를 변경하는 메서드 (Update) |
| DELETE | 리소스 제거 메서드 (Delete) |
기본적으로 많이 사용되는 5가지이다. 이외에 HEAD, TRACE, OPTION, CONNECT 가 있지만 직접적으로 사용한 적 없기에 생략한다.
그렇다면 Spring Boot에서 해당 메서드를 어떻게 받아서 사용하는가?
- Spring Boot에서 HTTP 요청 받기
위에서 작성한 GET 요청을 받는 컨트롤러를 만들어보자.
@RestController
public class GetController {
@RequestMapping(method = RequestMethod.GET, path = "/uri")
public ResponseEntity getResponse() {
return ResponseEntity.ok("response");
}
}
해당 컨트롤러에서 GET method의 /uri path 요청을 받도록 설정했다. 하지만 딱 봐도 매번 저렇게 적어주기 귀찮을거 같으니 뭔가 간소화된 절차를 만들지 않았을까? 라는 의문을 가질 수 있다. 그래서 준비했다.
@RestController
public class GetController {
@GetMapping("/uri")
public ResponseEntity getResponse() {
return ResponseEntity.ok("response");
}
}
이렇게 요청이 들어오길 원하는 HTTP 요청의 method를 Mapping앞에 붙여주어 위의 과정을 간소화 시킬 수 있다. 각각의 요청은 Handler Mapping에서 처리해서 넘겨주기 때문에 우리는 Controller에 간단한 몇 글자만 적어주면 되는 것이다.
하지만, 같은 uri에 대해 여러 메서드를 사용해야한다면
@RestController
@RequestMapping("/uri")
public class GetController {
@GetMapping("")
public ResponseEntity getResponse() {
return ResponseEntity.ok("response");
}
@PostMapping("")
public ResponseEntity postResponse() {
return ResponseEntity.ok("post success");
}
@DeleteMapping("")
public ResponseEntity deleteResponse() {
return ResponseEntity.ok("delete success");
}
}
해당 코드와 같이 class 자체를 맵핑해주어 /uri path로 들어오는 경로를 컨트롤러 자체에 설정해준다. 이렇게하면 /uri로 들어온 요청중 Get, Post, Delete에 따라 해당 메서드로 이동시켜준다. 또한, 실수로 같은 uri와 method의 맵핑이 중복이 될 경우 컴파일 에러를 띄워주기 때문에 빠르게 해당 부분을 수정할 수 있다.
'Back-End > Spring Boot' 카테고리의 다른 글
| [Spring Boot] Controller vs RestController (0) | 2025.05.13 |
|---|---|
| [Spring Boot] 순환 참조 해결하기 (2) | 2025.05.13 |
| [Spring Boot] 의존성 주입, @Autowired vs @RequiredArgsConstructor (0) | 2025.05.13 |
| [Spring Boot] IntelliJ Spring Boot Project 생성 파일 분석 (0) | 2025.05.13 |
| [Spring Boot] FFmpeg + 스프링부트 연동 및 사용하기 (0) | 2025.05.12 |