HTTP (HyperText Transfer Protocol)
클라이언트와 서버 간에 데이터를 전송하기 위한 프로토콜이다. HTTP는 주로 웹 브라우저와 웹 서버 간에 사용되며, 클라이언트가 서버로 요청을 보내고, 서버가 클라이언트에게 응답을 보내는 데 사용된다.
이러한 요청과 응답은 다양한 HTTP 메서드(Method)를 사용하여 이루어진다. 그 중에서 많이 사용하는 메서드를 스프링 컨트롤러 요청받는 방법을 알아보자.
HTTP 요청 메서드 대응 어노테이션
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping은 Spring MVC에서 HTTP 요청 메서드에 대응하는 어노테이션이다. 각각 GET, POST, PUT, DELETE HTTP 메서드를 처리하는 핸들러 메서드에 적용된다. 아래는 각 어노테이션을 사용한 예제 코드다.
@GetMapping
GET 메서드는 서버로부터 데이터를 요청하는 데 사용된다.
주로 URL을 통해 데이터를 전송한다. 요청된 데이터는 URL의 쿼리 문자열(query string)에 포함된다.
GET 요청은 요청된 데이터를 URL의 일부로 포함시키기 때문에 보안적인 측면에서는 덜 안전하다.
- 요청예시)
- /page?param1=value1¶m2=value2
- /api/user/1
@RestController
@RequestMapping("/api")
public class GetMappingController {
@GetMapping("/greet")
public String greet() {
return "Hello from GET request!";
}
@GetMapping("/user/{id}")
public String getUser(@PathVariable Long id) {
return "Retrieving user with ID: " + id;
}
}
위 예제에서는 /api/greet 경로에 대한 GET 요청을 처리하는 greet 메서드와 /api/user/{id} 경로에 대한 GET 요청을 처리하는 getUser 메서드가 있다.
@PostMapping
POST 메서드는 서버에 데이터를 입력또는 추가하는 데 사용된다.
POST 요청은 데이터를 request의 body에 포함시켜 전송한다. 따라서 GET 요청에 비해 더 많은 양의 데이터를 전송할 수 있다.
POST 요청은 데이터가 URL에 직접 노출되지 않기 때문에 보안적인 측면에서 GET 요청보다 더 안전하다.
- 요청예시)
- POST /api/create
Content-Type: application/json
{ "name": "John Doe", "age": 30, "email": "john@example.com" }
- POST /api/create
@RestController
@RequestMapping("/api")
public class PostMappingController {
@PostMapping("/create")
public String createUser(@RequestBody User user) {
return "User created: " + user.getName();
}
}
위 예제에서는 /api/create 경로에 대한 POST 요청을 처리하는 createUser 메서드가 있다. @RequestBody 어노테이션을 사용하여 요청 본문에서 User 객체를 생성하고 사용하고 있다.
@PutMapping
@RestController
@RequestMapping("/api")
public class PutMappingController {
@PutMapping("/update/{id}")
public String updateUser(@PathVariable Long id, @RequestBody User user) {
return "Updating user with ID " + id + " to name: " + user.getName();
}
}
위 예제에서는 /api/update/{id} 경로에 대한 PUT 요청을 처리하는 updateUser 메서드가 있다. @PathVariable 어노테이션을 사용하여 경로 변수 id를 추출하고, @RequestBody 어노테이션을 사용하여 요청 본문에서 User 객체를 생성하고 사용하고 있다.
@DeleteMapping
@RestController
@RequestMapping("/api")
public class DeleteMappingController {
@DeleteMapping("/delete/{id}")
public String deleteUser(@PathVariable Long id) {
return "Deleting user with ID: " + id;
}
}
위 예제에서는 /api/delete/{id} 경로에 대한 DELETE 요청을 처리하는 deleteUser 메서드가 있다. @PathVariable 어노테이션을 사용하여 경로 변수 id를 추출하고 사용하고 있다.
이러한 어노테이션들은 각각의 HTTP 메서드에 맞게 핸들러 메서드를 정의할 때 사용되며, 더 간결하고 가독성 있는 코드를 작성할 수 있도록 도와준다.
rfc 문서 참고하기
https://www.w3.org/Protocols/rfc2616/rfc2616.txt
에서 9.1부분을 확인하면 Method들에 대한 규약을 확인할 수 있다.
파라미터 처리
@PathVariable, @RequestParam, @RequestBody는 Spring MVC에서 사용되는 파라미터 처리 어노테이션으로, 각각 경로 변수, 요청 파라미터, 요청 본문(body)을 처리하는데 사용됩니다. 아래는 각 어노테이션을 사용한 예제 코드다.
@PathVariable
URL 자체에 값을 담아 요청할 때 사용하는 어노테이션 이다.
@RestController
@RequestMapping("/api")
public class PathVariableController {
@GetMapping("/greet/{name}")
public String greet(@PathVariable String name) {
return "Hello, " + name + "!";
}
}
위 예제에서는 /api/greet/{name} 경로에 대한 GET 요청을 처리하는 greet 메서드가 있다. @PathVariable 어노테이션을 사용하여 경로 변수인 name을 추출하여 사용하고 있다.
위 예제처럼 사용하려면 변수의 이름을 동일하게 맞춰야 합니다. 동일하게 맞추기가 힘들다면 따로 설정이 필요하다.
@RestController
@RequestMapping("/api")
public class PathVariableController {
@GetMapping("/greet/{name}")
public String greet(@PathVariable("name") String n) {
return "Hello, " + n + "!";
}
}
@PathVariable에는 변수의 이름을 특정할 수 있는 value 요소가 존재해, 이를 정의하여 매개변수와 매핑할 수 있다.
@RequestParam
URL 경로에 값을 담아 요청을 보내는 방식이 아닌 쿼리 형식으로 값을 전달할 때 사용하는 어노테이션이다.
@RestController
@RequestMapping("/api")
public class RequestParamController {
@GetMapping("/welcome")
public String welcome(@RequestParam String name) {
return "Welcome, " + name + "!";
}
}
위 예제에서는 /api/welcome 경로에 대한 GET 요청을 처리하는 welcome 메서드가 있습니다. @RequestParam 어노테이션을 사용하여 요청 파라미터인 name을 추출하여 사용하고 있습니다.
@RequestBody
POST나 PUT 요청에서는 일반적으로 리소스를 담기위해 HTTP Body에 값을 넣어 전송하는데 이때 사용하는 어노테이션 입니다.
@RestController
@RequestMapping("/api")
public class RequestBodyController {
@PostMapping("/create")
public String createUser(@RequestBody User user) {
// User 객체는 요청 본문에서 파싱되어 생성됩니다.
return "User created: " + user.getName();
}
}
class User {
private String name;
// Getter, Setter 생략
}
위 예제에서는 /api/create 경로에 대한 POST 요청을 처리하는 createUser 메서드가 있습니다. @RequestBody 어노테이션을 사용하여 Request Body에서 User 객체를 생성하고 사용하고 있습니다. Request Body는 JSON 형식으로 제공되어야 합니다.
이러한 어노테이션들을 적절히 조합하여 원하는 요청과 응답 처리를 수행할 수 있습니다.
'spring > spring' 카테고리의 다른 글
[Spring][Error][Swagger]documentationPluginsBootstrapper (0) | 2024.02.11 |
---|---|
[스프링 부트 핵심 가이드] Logback 설정 (0) | 2024.02.01 |
[스프링 부트 핵심 가이드] pom.xml (0) | 2024.02.01 |
[Spring] @Transactional (0) | 2024.02.01 |
[Spring] 프로젝트 구조 알아보기 (0) | 2024.01.30 |