@GetMapping과 @PostMapping은 Spring Framework에서 HTTP 요청을 특정 메서드에 매핑할 때 사용하는 애노테이션이야. 주로 RESTful API를 설계할 때 사용되며, 각각 GET과 POST HTTP 메서드와 매핑돼. 이 애노테이션들은 Spring MVC에서 사용되며, 요청을 처리할 컨트롤러 메서드를 정의할 때 매우 중요한 역할을 해.
1. @GetMapping
@GetMapping은 HTTP GET 요청을 처리하는 메서드에 적용돼. GET 요청은 서버에서 데이터를 조회하거나 리소스를 가져올 때 사용돼.
기본 구조:
@GetMapping("/path")
public String someMethod() {
// 요청 처리
return "data";
}
특징:
• 데이터 조회: 주로 서버에서 데이터를 조회할 때 사용돼. 예를 들어, 특정 리소스 목록을 가져오거나, 특정 ID로 식별되는 리소스를 가져올 때.
• 쿼리 파라미터나 경로 변수를 통해 요청 데이터를 전달할 수 있어.
• GET 요청은 상태 변형을 일으키지 않는 요청으로 간주돼. 즉, 서버의 상태나 데이터를 변경하지 않아야 해.
예시 1: 기본 GET 요청
@GetMapping("/hello")
public String sayHello() {
return "Hello, World!";
}
이 예시는 /hello로 GET 요청이 들어오면 “Hello, World!” 문자열을 응답으로 반환하는 메서드야.
예시 2: 쿼리 파라미터 사용
@GetMapping("/user")
public String getUser(@RequestParam String name) {
return "User: " + name;
}
• /user?name=John으로 요청을 보내면, name 파라미터 값을 받아서 “User: John”이라는 응답을 반환해.
• **@RequestParam**을 사용해 쿼리 파라미터 값을 메서드의 인수로 전달할 수 있어.
예시 3: 경로 변수 사용
@GetMapping("/user/{id}")
public String getUserById(@PathVariable int id) {
return "User ID: " + id;
}
• /user/1처럼 요청하면, id를 경로 변수로 받아서 “User ID: 1”을 반환해.
• **@PathVariable**을 사용해 경로에서 변수를 받아 메서드 인수로 전달할 수 있어.
2. @PostMapping
@PostMapping은 HTTP POST 요청을 처리하는 메서드에 적용돼. POST 요청은 서버에 데이터를 전송하거나 새로운 리소스를 생성할 때 주로 사용돼.
기본 구조:
@PostMapping("/path")
public String someMethod() {
// 요청 처리
return "result";
}
특징:
• 데이터 생성 및 전송: POST 요청은 주로 클라이언트에서 서버로 데이터를 보낼 때 사용돼. 예를 들어, 폼 제출, 파일 업로드, 새로운 리소스 생성 등이 포함돼.
• 서버의 데이터나 상태를 변경할 수 있어. (예: 데이터베이스에 새로운 사용자 생성 등)
• **HTTP 본문(body)**에 데이터를 담아 전송할 수 있어. 클라이언트가 보낸 데이터는 보통 JSON, XML, 폼 데이터로 전달돼.
예시 1: 기본 POST 요청
@PostMapping("/greet")
public String greetUser(@RequestParam String name) {
return "Hello, " + name;
}
• 클라이언트가 폼 데이터를 POST로 보내면, 서버에서 name 값을 받아 “Hello, name”을 반환해.
예시 2: JSON 데이터 처리
@PostMapping("/user")
public String createUser(@RequestBody User user) {
return "User created: " + user.getName();
}
• **@RequestBody**를 사용하면 HTTP 본문에 담긴 JSON 데이터를 객체로 변환해 사용할 수 있어.
• 클라이언트가 다음과 같은 JSON 데이터를 POST 요청으로 보내면:
{
"name": "John",
"email": "john@example.com"
}
서버에서 User 객체로 변환하고, “User created: John”이라는 응답을 반환해.
@GetMapping과 @PostMapping 비교
특징 | @GetMapping | @PostMapping |
---|---|---|
사용 HTTP 메서드 | GET | POST |
주요 목적 | 데이터 조회 | 데이터 전송, 새로운 리소스 생성 |
데이터 전송 방법 | URL 경로, 쿼리 파라미터 | HTTP 본문(body)에 데이터 전송 (JSON, XML, 폼 데이터) |
안전성 | GET 요청은 서버 상태를 변경하지 않음 (안전) | POST 요청은 서버 상태를 변경함 (안전하지 않음) |
Idempotent | GET 요청은 동일한 요청을 여러 번 보내도 동일한 결과 | POST 요청은 동일한 요청을 여러 번 보내면 다른 결과 가능 |
데이터 용량 | URL에 데이터가 제한되기 때문에 적은 양의 데이터 전송 | 본문에 데이터를 담아 대량의 데이터 전송 가능 |
더 심화된 예시
GET과 POST 함께 사용
@RestController
@RequestMapping("/api")
public class MyController {
// GET 요청: 사용자 정보 조회
@GetMapping("/user/{id}")
public User getUser(@PathVariable int id) {
return userService.getUserById(id);
}
// POST 요청: 새로운 사용자 생성
@PostMapping("/user")
public String createUser(@RequestBody User user) {
userService.saveUser(user);
return "User created: " + user.getName();
}
}
이 예시에서는 /api/user 경로에서 GET과 POST 요청을 처리하는 두 개의 메서드를 정의하고 있어:
• GET: /api/user/{id}로 요청을 보내면, 특정 ID에 해당하는 사용자 정보를 조회해.
• POST: /api/user로 새로운 사용자 데이터를 POST로 보내면, 서버에 새로운 사용자 데이터를 저장해.
요약:
• @GetMapping: 클라이언트가 데이터를 조회할 때 사용되며, 서버 상태를 변경하지 않아야 함. 주로 URL 경로와 쿼리 파라미터를 통해 데이터를 전달.
• @PostMapping: 클라이언트가 데이터를 서버로 전송하거나 리소스를 생성할 때 사용. 주로 본문에 데이터를 담아 전송하며, 서버의 상태나 데이터를 변경함.
주요 애노테이션📚
- @RequestMapping은 HTTP 요청 경로를 컨트롤러 메서드와 연결하는 애노테이션이야. 요청이 들어왔을 때, 어떤 메서드가 처리할지를 정하는 역할을 해.
- @PathVariable은 Spring에서 URL 경로의 변수를 메서드의 인자로 받아 처리할 때 사용하는 애노테이션이야. 즉, URL의 일부를 동적으로 받아와 메서드에서 사용할 수 있게 해줘.
- @ResponseStatus는 Spring에서 HTTP 응답 상태 코드를 설정하는 애노테이션이야. 특정 메서드가 실행된 후, 해당 메서드의 응답으로 어떤 상태 코드를 반환할지를 지정할 수 있어. 주로 예외 처리나 특정 응답을 반환할 때 사용돼.
- @RequestBody는 Spring에서 **HTTP 요청의 본문(body)**에 담긴 데이터를 Java 객체로 변환해주는 애노테이션이야. 주로 POST나 PUT 요청에서 클라이언트가 JSON, XML 등의 데이터를 보낼 때, 그 데이터를 객체로 변환해 컨트롤러 메서드의 인자로 사용할 수 있게 해줘.
'Apache Tomcat' 카테고리의 다른 글
Enable MVC Configuration (0) | 2024.10.15 |
---|---|
@RequestMapping handler method (0) | 2024.10.11 |
@RestController, View Resolver, RESTful API (0) | 2024.10.08 |
Spring MVC, SessionFactory Bean, ContextLoaderListener, ServletContextListener (1) | 2024.10.08 |
Apache Tomcat Server (1) | 2024.10.07 |