@ResponseBody의 역할과 사용 목적

젼이·2024년 10월 21일

@ResponseBody의 역할과 사용 목적


ResponseBodySpring Framework에서 사용되는 어노테이션으로, 컨트롤러의 반환 값을 HTTP 응답 본문(body)에 직접 담아 보내도록 설정한다.
주로 JSON이나 XML 같은 데이터를 반환할 때 사용한다.
웹 애플리케이션에서 프론트와 백엔드 간에 데이터를 주고받는 API 구현에서 자주 사용된다.



1. @ResponseBody가 하는일

  • Spring MVC에서는 기본적으로 컨트롤러의 메서드가 뷰(HTML 페이지)를 반환하도록 설계된다.
  • 그러나 ResponseBody를 사용하면, 메서드의 반환 값을 HTTP 응답 본문에 직접 포함시킨다.
  • 예를 들어, 자바 객체를 반환하면, Spring에서 자동으로 JSON 형식으로 변환해 응답에 포함한다.

2. @ResponseBody와 JSON 변환의 관계

  • Spring Boot에서는 Jackson 라이브러리가 포함되어 있어, 자바 객체를 JSON 형식으로 변환해주는 직렬화(Serialization) 작업이 자동으로 수행된다.
  • 아래와 같은 코드는 List객체를 JSON으로 변환해 클라이언트에 응답한다.

@GetMapping("/api/example")
@ResponseBody
public List<String> getExampleData() {
    return Arrays.asList("Spring", "Java", "Backend");
}

위 응답의 결과 (JSON):


["Spring", "Java", "Backend"]


3. 주로 사용되는 상황

  1. REST API 개발
  • 서버가 프론트엔드에 JSON 형식의 데이터를 제공할 때 사용된다.
  • 예를 들어, 모바일 앱이나 JavaScript로 동작하는 프론트엔드가 Ajax 요청을 통해 서버 데이터를 가져올 때 자주 사용된다.
  1. Ajax 요청에 대한 응답 처리
  • 비동기 요청(예: 검색 결과 갱신, 필터링 데이터 제공 등)에서 서버가 데이터를 JSON 응답으로 반환할 때 사용된다.
  1. 데이터 직렬화(Serialization) 필요
  • 자바 객체를 JSON이나 XML로 직렬화해서 응답해야 할 때 사용한다.
  1. 페이지를 새로 렌더링하지 않고 일부 데이터만 업데이트 할 때
  • 예를 들어, Chart.js와 같은 라이브러리에서 서버 데이터를 받아와 동적으로 차트를 업데이트 할 때 사용된다.


4. ResponseBody와 RestController의 관계

  • @RestController 어노테이션은 @Controller@ResponseBody를 합친 어노테이션이다.
    즉, @RestController가 사용된 컨트롤러에서는 모든 메서드에 자동으로 @ResponseBody가 적용된다.

@RestController
public class ExampleController {

    @GetMapping("/api/data")
    public List<String> getData() {
        return Arrays.asList("Data1", "Data2", "Data3");
    }
}

위처럼 @RestController를 사용하면, 메서드 반환 값이 자동으로 HTTP 응답 본문에 담긴다.



5. 주의 사항

  • 뷰(HTML) 반환과 혼용이 불가능하다. 만약 특정 메서드에서 HTML 페이지를 반환하고 싶다면, @ResponseBody를 사용하지 않아야 한다.
  • 만약 특정 요청에 따라 동적 데이터와 뷰를 모두 제공해야 한다면, 뷰는 타임리프 같은 템플릿 엔진을 사용하고, 데이터는 API로 별도로 제공하는 방식이 좋다.


6. 예시: Ajax 요청과 응답 처리

<button id="loadDataBtn">데이터 로드</button>
<div id="result"></div>

<script>
    document.getElementById('loadDataBtn').addEventListener('click', function () {
        fetch('/api/example')
            .then(response => response.json())
            .then(data => {
                document.getElementById('result').innerHTML = data.join(', ');
            })
            .catch(error => console.error('데이터 로드 오류:', error));
    });
</script>

@GetMapping("/api/example")
@ResponseBody
public List<String> getExampleData() {
    return Arrays.asList("Spring", "Java", "Backend");
}


7. 결론

  • @ResponseBody는 주로 JSON 데이터를 반환해야 할 때 사용한다.
  • 뷰 렌더링 대신 데이터 전송이 목적일 때, 특히 Ajax 요청이나 API 구현에 유용하다.
  • 동적 UI를 구현할 때, 비동기로 데이터를 받아와 화면을 갱신하는 데 많이 사용된다.

@ResponseBody를 사용하면, 백엔드와 프론트엔드 간의 데이터 통신이 효율적으로 이루어지며, RESTful API 설계에 필수적인 어노테이션이다.

profile
신입 개발자 임니당 : > (2025.02.05~)

0개의 댓글