3.2 HTTP 메서드 (GET, POST, PUT, DELETE)
REST API 설계의 핵심은 "동작(행위)은 URL에 표시하지 않고, HTTP 메서드로 구분한다" 는 점입니다. 스프링 부트는 이 HTTP 메서드를 직관적인 애너테이션으로 매핑할 수 있도록 지원합니다.
1. HTTP 메서드 매핑 애너테이션
과거에는 @RequestMapping(value = "/users", method = RequestMethod.GET) 처럼 길고 복잡하게 적었습니다. 하지만 현재는 각 용도에 맞게 직관적으로 축약된 전용 애너테이션을 사용합니다.
단순히 브라우저 주소창에 URL을 입력하고 엔터를 치는 것은 무결점의 GET 요청입니다.
| HTTP 메서드 | 스프링 애너테이션 | 서버에 요구하는 주요 역할 |
|---|---|---|
| GET | @GetMapping | 자원의 ** 조회**(Read). 데이터를 요구할 때 사용. |
| POST | @PostMapping | 자원의 ** 생성**(Create). 새로운 데이터를 서버에 저장할 때 사용. |
| PUT / PATCH | @PutMapping / @PatchMapping | 자원의 ** 수정**(Update). 기존 데이터를 통째로 변경하거나 일부만 수정할 때 사용. |
| DELETE | @DeleteMapping | 자원의 ** 삭제**(Delete). 데이터를 지울 때 사용. |
2. REST API 컨트롤러 예시
하나의 사용자(User) 정보를 다루는 완벽한 REST 컨트롤러 예시입니다. 동일하게 /api/users라는 URL을 사용하더라도, 프론트엔드에서 어떤 HTTP 메서드를 보내느냐에 따라 실행되는 자바 코드가 완전히 달라집니다.
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/users")
public class UserController {
// 1. 조회 (GET /api/users)
@GetMapping
public String getUsers() {
return "사용자 목록 100명을 조회하여 반환합니다.";
}
// 2. 등록 (POST /api/users)
@PostMapping
public String createUser() {
return "새로운 사용자를 데이터베이스에 성공적으로 생성했습니다.";
}
// 3. 수정 (PUT /api/users)
@PutMapping
public String updateUser() {
return "기존 사용자 정보를 업데이트했습니다.";
}
// 4. 삭제 (DELETE /api/users)
@DeleteMapping
public String deleteUser() {
return "사용자를 강제로 삭제했습니다.";
}
}
이처럼 동일한 자원(URL)에 대해 행위(메서드)만 다르게 설계하는 방식을 RESTful 설계 라고 부릅니다.
3. URL 내의 변수 캐치하기 (@PathVariable)
"모든 사용자 조회가 아니라, 5번 사용자만 조회하고 싶다면요?"
이때는 URL 경로 자체에 변수(파라미터)를 실어서 보내는 방식을 사용하며, 이를 @PathVariable이라는 애너테이션으로 매개변수에 받아올 수 있습니다.
@RestController
@RequestMapping("/api/users")
public class UserController {
// GET /api/users/5
@GetMapping("/{id}")
public String getUserById(@PathVariable("id") Long id) {
return id + "번 사용자 단건 조회 성공";
}
}
경로에 가변적인 값을 넣을 때는 중괄호 { }를 사용하며, 이 이름과 @PathVariable("이름")이 정확히 일치해야 자바 코드 안으로 값이 넘어옵니다.