Java Framework/Spring

[Spring] HTTP Method

annovation 2025. 2. 7. 08:50

HTTP

  • HTTP 메서드는 클라이언트가 서버에 요청을 보낼 때 사용하는 방식으로, CRUD(생성, 읽기, 업데이트, 삭제) 작업과 연결됩니다.
  • HTTP 메서드는 서버가 클라이언트로부터 "무엇을 하길 원하는지"를 이해하도록 돕는 명령어입니다.

* 주요 HTTP 메서드

  1. GET : 서버에서 데이터를 조회합니다.
  2. POST : 서버에 데이터를 생성하거나 추가합니다.
  3. PUT : 서버의 데이터를 수정하거나 업데이트합니다.
  4. DELETE : 서버에서 데이터를 삭제합니다.

특징

  1. 명확한 역할 분담: 요청의 의도를 명확히 나타냄으로써, 서버와 클라이언트 간의 의사소통을 표준화합니다.
  2. 유지보수 용이성: 의도가 명확하면 개발자들이 코드를 이해하고 수정하기 쉬워집니다.
  3. RESTful 설계의 핵심 요소: HTTP 메서드는 RESTful API 설계에서 데이터 작업(Create, Read, Update, Delete)을 나타냅니다.

GET : 데이터 조회

  • @GetMapping은 데이터를 조회할 때 사용됩니다.
  • URL 경로에 따라 특정 데이터를 가져올 수 있습니다.
  • Thymeleaf와 함께 사용하면 조회 결과를 HTML 페이지로 렌더링할 수 있습니다.

1. 특정 사용자 정보 조회

@Controller
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id, Model model) {
        // 데이터베이스에서 사용자 조회 로직
        User user = userService.findUserById(id);
        model.addAttribute("user", user);
        return "userDetails"; // Thymeleaf 템플릿 파일명
    }
}
  • @PathVariable : URL 경로의 변수를 매핑합니다.
  • Model : 조회한 데이터를 Thymeleaf로 전달합니다.

2. Thymeleaf 템플릿 userDetails.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>사용자 정보</title>
</head>
<body>
    <h1>사용자 정보</h1>
    <p>이름: <span th:text="${user.name}"></span></p>
    <p>이메일: <span th:text="${user.email}"></span></p>
</body>
</html>

POST : 데이터 생성

  • @PostMapping은 데이터를 생성하거나 추가할 때 사용됩니다.
  • 주로 JSON 형식의 데이터를 요청 본문(body)으로 받지만, Thymeleaf 폼 데이터를 처리할 수도 있습니다.

1. 새로운 사용자 생성

@Controller
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public String createUser(@ModelAttribute User user, Model model) {
        // 데이터베이스에 사용자 저장 로직
        userService.saveUser(user);
        model.addAttribute("message", "사용자가 성공적으로 생성되었습니다.");
        return "userConfirmation"; // Thymeleaf 템플릿 파일명
    }
}
  • @ModelAttribute : HTML 폼 데이터를 객체로 바인딩합니다.

2. Thymeleaf 템플릿 userForm.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>사용자 생성</title>
</head>
<body>
    <form action="/users" method="post">
        <label for="name">이름:</label>
        <input type="text" id="name" name="name">

        <label for="email">이메일:</label>
        <input type="email" id="email" name="email">

        <button type="submit">제출</button>
    </form>
</body>
</html>

 

GET VS POST

 

  • GET 방식은 단순한 데이터 조회 작업(검색, 페이지 이동)에 적합합니다.
  • POST 방식은 데이터 변경 작업(로그인, 게시글 작성)에 적합합니다.
    • 검색이나 페이지 이동에 POST 방식을 사용하면, 뒤로 가기 새로 고침 시 브라우저가 중복 요청을 방지하려고 "페이지가 만료되었습니다" 오류를 표시합니다.

 


PUT : 데이터 수정

@PutMapping은 데이터를 전체적으로 업데이트할 때 사용됩니다. 기존 리소스를 대체하는 성격을 가집니다.

* 사용자 정보 업데이트

@RestController
@RequestMapping("/users")
public class UserController {

    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        // 기존 데이터 업데이트 로직
        return userService.updateUser(id, user);
    }
}
  • 기존 데이터가 없을 경우, 리소스를 새로 생성할 수도 있습니다.

DELETE : 데이터 삭제

  • @DeleteMapping은 데이터를 삭제할 때 사용됩니다.
  • 주로 URL 경로에 삭제할 리소스의 식별자를 포함합니다.

* 사용자 삭제

@RestController
@RequestMapping("/users")
public class UserController {

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        // 데이터 삭제 로직
        userService.deleteUser(id);
    }
}
  • 성공적으로 삭제되면 일반적으로 HTTP 상태 코드 204(No Content)를 반환합니다.

PATCH : 데이터 일부 수정

  • @PatchMapping은 데이터의 일부를 수정할 때 사용됩니다.
  • PUT과 달리 전체 데이터를 대체하지 않고 필요한 부분만 업데이트합니다.

* 사용자 이메일 주소 수정

@RestController
@RequestMapping("/users")
public class UserController {

    @PatchMapping("/{id}")
    public User updateUserEmail(@PathVariable Long id, @RequestBody Map<String, String> updates) {
        // 이메일 주소만 업데이트 로직
        return userService.updateEmail(id, updates.get("email"));
    }
}

요약

Spring 메서드 HTTP 메서드 설명 자주 사용하는 상태 코드
@GetMapping GET 데이터 조회를 처리 200 OK (요청 성공), 404 NOT FOUND (리소스 없음)
@PostMapping POST 데이터 생성 또는 서버에서의 작업 요청 201 CREATED (리소스 생성됨), 400 BAD REQUEST (잘못된 요청)
@PutMapping PUT 데이터 전체 업데이트 200 OK (업데이트 성공), 204 NO CONTENT (업데이트 완료, 본문 없음)
@PatchMapping PATCH 데이터 일부 업데이트 200 OK (업데이트 성공), 204 NO CONTENT
@DeleteMapping DELETE 데이터 삭제를 처리 200 OK (삭제 성공), 204 NO CONTENT, 404 NOT FOUND
@RequestMapping(Custom) GET/POST/PUT/DELETE 커스텀 매핑을 지정해 다양한 HTTP 메서드 처리 가능 상황에 따라 다름

출처

OpenAI ChatGPT (https://openai.com)

 

'Java Framework > Spring' 카테고리의 다른 글

[Spring] 바인딩 (Binding)  (0) 2025.02.09
[Spring] Validation Library 데이터 유효성 검사  (0) 2025.02.08
[Spring] @Autowired  (1) 2025.02.02
[Spring] @GetMapping  (0) 2025.01.31
[Spring] @Transactional  (0) 2025.01.30