Apache Tomcat / / 2024. 10. 8. 11:46

@GetMapping, @PostMapping

@GetMapping@PostMapping은 Spring Framework에서 HTTP 요청을 특정 메서드에 매핑할 때 사용하는 애노테이션이야. 주로 RESTful API를 설계할 때 사용되며, 각각 GETPOST HTTP 메서드와 매핑돼. 이 애노테이션들은 Spring MVC에서 사용되며, 요청을 처리할 컨트롤러 메서드를 정의할 때 매우 중요한 역할을 해.

 

1. @GetMapping

 

@GetMappingHTTP 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

 

@PostMappingHTTP 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 경로에서 GETPOST 요청을 처리하는 두 개의 메서드를 정의하고 있어:

 

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 등의 데이터를 보낼 때, 그 데이터를 객체로 변환해 컨트롤러 메서드의 인자로 사용할 수 있게 해줘.
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유