안녕하세요! 오늘은 Spring Controller에서 사용되는 HTTP 메소드별 특화 어노테이션에 대해 자세히 알아보겠습니다.
HTTP 메소드 어노테이션이란? 🤔
HTTP 메소드 어노테이션은 Spring MVC에서 각 HTTP 요청 방식을 처리하기 위한 특별한 어노테이션입니다. 마치 우체통에 편지를 넣는 것처럼, 각각의 요청을 알맞은 메소드로 전달해주는 역할을 합니다!
기본 어노테이션 살펴보기 📬
1. @GetMapping
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
- 데이터 조회에 사용
- URL에 파라미터가 노출됨
- 브라우저 히스토리에 기록됨
- 북마크 가능
2. @PostMapping
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody UserDto userDto) {
User savedUser = userService.save(userDto);
return ResponseEntity.created(URI.create("/users/" + savedUser.getId()))
.body(savedUser);
}
- 새로운 리소스 생성
- Request Body에 데이터 포함
- 멱등성이 보장되지 않음
- 캐시되지 않음
3. @PutMapping
@PutMapping("/users/{id}")
public User updateUser(@PathVariable Long id, @RequestBody UserDto userDto) {
return userService.update(id, userDto);
}
- 리소스 전체 업데이트
- 멱등성 보장
- 없는 리소스라면 새로 생성 가능
4. @DeleteMapping
@DeleteMapping("/users/{id}")
public ResponseEntity<?> deleteUser(@PathVariable Long id) {
userService.delete(id);
return ResponseEntity.noContent().build();
}
- 리소스 삭제
- 멱등성 보장
- 보통 204 No Content 응답
5. @PatchMapping
@PatchMapping("/users/{id}")
public User partialUpdateUser(@PathVariable Long id,
@RequestBody Map<String, Object> updates) {
return userService.partialUpdate(id, updates);
}
- 리소스 부분 업데이트
- 변경이 필요한 필드만 전송
- PUT보다 네트워크 효율적
실용적인 사용 예시 💡
1. 검색 API
@GetMapping("/users/search")
public List<User> searchUsers(@RequestParam String keyword,
@RequestParam(defaultValue = "0") int page) {
return userService.search(keyword, page);
}
2. 파일 업로드
@PostMapping("/users/{id}/profile-photo")
public ResponseEntity<?> uploadPhoto(@PathVariable Long id,
@RequestParam MultipartFile file) {
String photoUrl = userService.uploadPhoto(id, file);
return ResponseEntity.ok().body(Map.of("photoUrl", photoUrl));
}
3. 벌크 작업
@PostMapping("/users/bulk")
public ResponseEntity<?> bulkCreate(@RequestBody List<UserDto> users) {
List<User> createdUsers = userService.bulkCreate(users);
return ResponseEntity.ok(createdUsers);
}
주의사항 ⚠️
적절한 HTTP 상태 코드 사용
- 200: 성공
- 201: 생성 성공
- 204: 성공적인 삭제
- 400: 잘못된 요청
- 404: 리소스 없음
URL 설계 규칙
- 명사형 사용
- 계층 구조 반영
- 버전 관리 고려
보안 고려사항 🔒
@PostMapping("/users")
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<?> createUser(@Valid @RequestBody UserDto userDto) {
// 구현
}
References:
- Spring Framework Documentation: https://docs.spring.io/spring-framework/docs/current/reference/html/web.html
- Spring Web MVC: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html
- RESTful Web Services: https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
728x90
'300===Dev Framework > Spring' 카테고리의 다른 글
Spring에서의 Builder 패턴 완벽 가이드 🏗️ (0) | 2024.11.28 |
---|---|
Spring @Options와 FlushCache 정책 😋 (1) | 2024.11.21 |
Spring Controller 완벽 가이드 🎯 (3) | 2024.11.14 |
Spring Data JDBC: JPA보다 가벼운 ORM의 대안 🚀 (1) | 2024.11.14 |
Spring @Transactional 완벽 가이드 🎯 (0) | 2024.11.14 |