Spring Boot 기반의 REST API 개발에서 가장 자주 마주치는 어노테이션 중 하나가 @RequestBody와 @ResponseBody입니다. 이 두 어노테이션은 클라이언트와 서버 간의 JSON 기반 데이터 통신을 단순하고 직관적으로 처리할 수 있게 해주며, Spring의 HttpMessageConverter와 밀접한 연관이 있습니다.
1. @RequestBody: 요청 본문(Body)을 객체로 변환
@RequestBody
는 HTTP 요청의 본문(body)에 담긴 JSON 데이터를 자바 객체로 매핑할 때 사용합니다. 일반적으로 POST, PUT, PATCH 요청에서 사용되며, JSON -> 객체 변환은 내부적으로 Jackson
라이브러리를 통해 수행됩니다.
예시
@PostMapping("/users")
public String createUser(@RequestBody UserDto userDto) {
System.out.println("이름: " + userDto.getName());
System.out.println("이메일: " + userDto.getEmail());
return "ok";
}
요청 예시:
POST /users
Content-Type: application/json
{
"name": "홍길동",
"email": "hong@example.com"
}
주의사항:
- Content-Type이
application/json
이 아니면 매핑 실패 - 기본 생성자와 getter/setter가 필요
- 입력값 검증 시
@Valid
또는@Validated
와 함께 사용
2. @ResponseBody: 객체를 응답 본문으로 직렬화
@ResponseBody
는 컨트롤러 메서드에서 리턴한 자바 객체를 JSON 형식의 응답 본문으로 변환해 클라이언트에 전달할 때 사용됩니다. 뷰를 렌더링하지 않고 데이터를 직접 응답할 때 활용되며, REST API의 핵심 구성요소입니다.
예시
@GetMapping("/users/{id}")
@ResponseBody
public UserDto getUser(@PathVariable Long id) {
return new UserDto(id, "홍길동", "hong@example.com");
}
응답 결과:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"name": "홍길동",
"email": "hong@example.com"
}
주의사항:
- Spring Boot에서는
@RestController
사용 시@ResponseBody
생략 가능 - Jackson 라이브러리를 통해 객체 → JSON으로 직렬화됨
3. @RestController = @Controller + @ResponseBody
Spring Boot에서는 REST API 컨트롤러를 만들 때 @RestController
를 사용하는 것이 일반적입니다. 이는 @Controller
에 @ResponseBody
가 자동으로 포함된 축약형입니다.
@RestController
public class UserController {
@PostMapping("/users")
public UserDto createUser(@RequestBody UserDto userDto) {
// 처리 로직...
return userDto;
}
}
4. 실무 팁
- 프론트엔드와 JSON 통신 시에는 거의 항상
@RequestBody
,@ResponseBody
조합을 사용합니다. application/x-www-form-urlencoded
전송 시엔@ModelAttribute
가 자동 사용됨- JSON 매핑 실패 시에는 400 Bad Request 발생 → 예외 처리 필요
5. 결론
@RequestBody
와 @ResponseBody
는 Spring Boot 기반 REST API 개발의 핵심입니다. 이 두 어노테이션의 역할과 차이를 정확히 이해하고 활용하면, 클라이언트와 서버 간의 JSON 기반 데이터 통신을 훨씬 간결하게 처리할 수 있습니다. 실무에서는 @RestController
로 구성해 생산성과 가독성을 함께 확보하는 것이 일반적인 패턴입니다.
'개발 > JAVA' 카테고리의 다른 글
Lombok으로 코드 간결하게 작성하기: 실무 개발자가 말하는 장단점과 주의점 (0) | 2025.10.03 |
---|---|
DTO와 Entity 분리하기: 왜, 어떻게, 어디까지? (0) | 2025.10.02 |
@RequestParam과 @PathVariable 사용법: Spring에서의 URL 파라미터 처리 (0) | 2025.09.30 |
Spring MVC 요청 처리 흐름 이해하기 (0) | 2025.09.29 |
Postman vs Insomnia: API 테스트 도구 완전 정복 (0) | 2025.09.28 |