HTTP
- HTTP 메서드는 클라이언트가 서버에 요청을 보낼 때 사용하는 방식으로, CRUD(생성, 읽기, 업데이트, 삭제) 작업과 연결됩니다.
- HTTP 메서드는 서버가 클라이언트로부터 "무엇을 하길 원하는지"를 이해하도록 돕는 명령어입니다.
* 주요 HTTP 메서드
- GET : 서버에서 데이터를 조회합니다.
- POST : 서버에 데이터를 생성하거나 추가합니다.
- PUT : 서버의 데이터를 수정하거나 업데이트합니다.
- DELETE : 서버에서 데이터를 삭제합니다.
특징
- 명확한 역할 분담: 요청의 의도를 명확히 나타냄으로써, 서버와 클라이언트 간의 의사소통을 표준화합니다.
- 유지보수 용이성: 의도가 명확하면 개발자들이 코드를 이해하고 수정하기 쉬워집니다.
- 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 메서드 처리 가능 | 상황에 따라 다름 |
'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 |