Spring MVC: HTTP Body 처리와 응답 제어

2025. 6. 13. 21:13·SpringBoot

현대적인 REST API는 대부분의 데이터를 HTTP Body에 JSON 형식으로 담아 통신한다. 이번 편에서는 HTTP Body를 처리하는 방법과 서버의 처리 결과를 클라이언트에 효과적으로 전달하는 방법을 알아본다.

HTTP Body 데이터 처리: @RequestBody

@RequestBody는 HTTP 요청의 Body 내용을 읽어 자바 객체로 변환(역직렬화)하는 역할을 한다. JSON 형식의 요청을 처리하는 데 필수적이다.

  • 요청: POST /api/json-user, Content-Type: application/json
  • Body: {"username": "hello", "age": 20}
@RestController
public class RequestBodyJsonController {

    @PostMapping("/api/json-user")
    public String processJsonUser(@RequestBody UserDto userDto) {
        // HTTP Body의 JSON 데이터가 UserDto 객체로 변환되어 바인딩된다.
        return "json user ok: " + userDto.getUsername();
    }
}

@ModelAttribute vs @RequestBody

구분 @ModelAttribute @RequestBody
처리 대상 요청 파라미터, Form 데이터 HTTP Body
데이터 형식 application/x-www-form-urlencoded application/json, application/xml 등
동작 원리 각 파라미터에 해당하는 객체의 setter 호출 HttpMessageConverter가 Body 전체를 객체로 변환
생략 가능 O (복합 타입일 경우) X (불가)

HTTP 응답 처리

@RestController 환경에서는 메서드의 반환 값이 HTTP 응답 Body에 직접 쓰여진다.

자바 객체의 JSON 변환

@RestController의 메서드가 자바 객체를 반환하면, 스프링은 HttpMessageConverter를 사용해 해당 객체를 JSON 문자열로 변환하여 응답한다.

@RestController
public class ResponseBodyController {

    @GetMapping("/api/get-user")
    public UserDto getUser() {
        UserDto user = new UserDto();
        user.setUsername("userA");
        user.setAge(20);
        // 이 UserDto 객체가 JSON으로 변환되어 응답 Body에 담긴다.
        return user;
    }
}

응답 결과:

// HTTP/1.1 200 OK
// Content-Type: application/json
{
    "username": "userA",
    "age": 20
}

응답 상태 제어: ResponseEntity

데이터뿐만 아니라 HTTP 상태 코드나 헤더를 동적으로 제어해야 할 경우 ResponseEntity를 사용한다. 이는 HTTP 응답 전체를 표현하는 객체다.

@RestController
public class ResponseBodyController {

    @PostMapping("/api/create-user")
    public ResponseEntity<UserDto> createUser(@RequestBody UserDto userDto) {
        // ... 사용자 저장 로직 ...

        // 생성 성공을 의미하는 201 Created 상태 코드와 함께 데이터를 반환
        return new ResponseEntity<>(userDto, HttpStatus.CREATED);
    }
}

HttpMessageConverter의 역할

@RequestBody와 @ResponseBody가 동작하는 핵심 원리가 HttpMessageConverter이다. 이는 HTTP 메시지 Body와 자바 객체 사이의 변환을 담당하는 인터페이스다.

  • @RequestBody 동작 시: HTTP 요청 Body → 자바 객체 (역직렬화)
  • @ResponseBody 동작 시: 자바 객체 → HTTP 응답 Body (직렬화)

스프링 부트는 MappingJackson2HttpMessageConverter(JSON 처리), StringHttpMessageConverter(문자열 처리) 등 다양한 구현체를 미리 등록해두고, 요청의 Content-Type 헤더와 컨트롤러 메서드의 파라미터/반환 타입을 보고 적절한 컨버터를 선택하여 사용한다.

'SpringBoot' 카테고리의 다른 글

Spring MVC: 요청 매핑과 파라미터 처리  (0) 2025.06.13
Spring MVC 구조: 어댑터 패턴과 다형성은 왜 중요한가?  (0) 2025.05.20
웹 애플리케이션의 이해  (0) 2025.05.13
RequestScope로 요청별 로그 분리하기  (0) 2025.05.07
스프링 DI: 생존자 주입을 권장하는 이유  (0) 2025.05.05
'SpringBoot' 카테고리의 다른 글
  • Spring MVC: 요청 매핑과 파라미터 처리
  • Spring MVC 구조: 어댑터 패턴과 다형성은 왜 중요한가?
  • 웹 애플리케이션의 이해
  • RequestScope로 요청별 로그 분리하기
moodone
moodone
  • moodone
    무던하게
    moodone
  • 전체
    오늘
    어제
    • 분류 전체보기 (36)
      • Java (7)
      • SpringBoot (24)
      • JavaScript (0)
      • Database (1)
      • Python (0)
      • Git (1)
      • IDE (0)
      • 기타 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    git bash
    git
    오블완
    Repository
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
moodone
Spring MVC: HTTP Body 처리와 응답 제어
상단으로

티스토리툴바