9. 데이터를 Client에 반환하는 방법

2026. 2. 10. 12:56·BackEnd/내일배움캠프

ResponseBody와 JSON 응답

웹 애플리케이션에서 서버와 클라이언트는 주로 JSON 형태의 데이터를 주고받는다. 이 글에서는 Spring MVC에서 JSON 응답을 반환하는 방법과 @ResponseBody, @RestController의 역할을 정리한다.


JSON 응답을 반환해야 하는 이유

클라이언트(브라우저)는 서버에 요청을 보내고, 서버는 그 결과를 응답으로 반환한다.
최근 웹 개발에서는 화면(View)을 서버에서 직접 내려주기보다는, 데이터만 JSON 형태로 전달하고 클라이언트에서 이를 가공하여 화면을 그리는 방식이 일반적이다.

JSON은 JavaScript에서 쉽게 다룰 수 있는 데이터 형식이며, key-value 구조를 가진다.

{
  "name": "Robbie",
  "age": 95
}

ResponseBody의 역할

Spring에서 Controller 메서드의 반환값은 기본적으로 View 이름으로 해석된다.

하지만 HTML이 아닌 **데이터 자체(JSON, 문자열 등)**를 응답으로 반환하고 싶을 때는 @ResponseBody를 사용해야 한다.

@ResponseBody를 사용하면 반환값이 View로 해석되지 않고, HTTP Response Body에 그대로 담겨 클라이언트로 전달된다.


문자열(JSON 형태) 직접 반환하기

@Controller
@RequestMapping("/response")
public class ResponseController {

    // [Response header]
    //   Content-Type: text/html
    // [Response body]
    //   {"name":"Robbie","age":95}
    @GetMapping("/json/string")
    @ResponseBody
    public String helloStringJson() {
        return "{\"name\":\"Robbie\",\"age\":95}";
    }
}

이 방식은 JSON처럼 보이지만, 실제로는 단순 문자열(String) 이다.

  • Content-Type: text/html
  • JSON 형식의 문자열을 직접 만들어 반환

간단한 테스트에는 사용할 수 있지만, 유지보수와 확장성 측면에서는 권장되지 않는다.


Java 객체를 JSON으로 반환하기

먼저 응답으로 사용할 클래스(DTO)를 정의한다.

@Getter
public class Star {
    private String name;
    private int age;

    public Star(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Star() {}
}

이제 Controller에서 객체를 그대로 반환한다.

@Controller
@RequestMapping("/response")
public class ResponseController {

    // [Response header]
    //   Content-Type: application/json
    // [Response body]
    //   {"name":"Robbie","age":95}
    @GetMapping("/json/class")
    @ResponseBody
    public Star helloClassJson() {
        return new Star("Robbie", 95);
    }
}

Spring 내부에서 HttpMessageConverter(Jackson) 가 동작하여

  • Java 객체의 필드명 → JSON Key
  • 필드값 → JSON Value

형태로 자동 변환해 준다.

이때 Response Header의 Content-Type은 application/json으로 설정된다.


@RestController 사용하기

@RestController는 다음 두 어노테이션을 합친 것이다.

@Controller + @ResponseBody

즉, 클래스에 @RestController를 사용하면 모든 메서드에 자동으로 @ResponseBody가 적용된다.

@RestController
@RequestMapping("/response/rest")
public class ResponseRestController {

    @GetMapping("/json/string")
    public String helloStringJson() {
        return "{\"name\":\"Robbie\",\"age\":95}";
    }

    @GetMapping("/json/class")
    public Star helloClassJson() {
        return new Star("Robbie", 95);
    }
}

어노테이션을 반복해서 작성할 필요가 없어 코드가 훨씬 간결해진다.


Controller vs RestController 정리

@Controller

  • 기본 반환값은 View 이름
  • HTML 페이지를 반환해야 할 때 사용
  • JSON 응답 시 메서드마다 @ResponseBody 필요

@RestController

  • 모든 메서드가 ResponseBody로 동작
  • View를 반환하지 않음
  • JSON 기반 API 서버에 적합

실무 관점에서의 사용 방식

최근에는 Client와 Server를 분리하여 개발하는 경우가 대부분이다.

  • 프론트엔드: React, Vue, Next.js 등
  • 백엔드: 데이터 가공 및 API 제공

이런 구조에서는 백엔드에서 HTML을 직접 관리할 일이 거의 없기 때문에,
대부분의 경우 @RestController를 사용하여 JSON 데이터를 반환하는 API 서버를 구성한다.


정리

  • JSON 응답을 반환하려면 @ResponseBody 또는 @RestController가 필요하다.
  • Java 객체를 그대로 반환하면 Spring이 자동으로 JSON으로 변환한다.
  • View가 필요하면 @Controller, 데이터만 반환하면 @RestController를 사용한다.

Spring이 제공하는 이러한 추상화 덕분에 개발자는 데이터 구조와 비즈니스 로직에만 집중할 수 있다.

'BackEnd > 내일배움캠프' 카테고리의 다른 글

11. Path Variable과 Request Param  (0) 2026.02.10
10. Jackson이란 무엇일까?  (0) 2026.02.10
8. 정적 페이지와 동적 페이지  (0) 2026.02.10
7. Controller란?  (0) 2026.02.10
6. MVC 디자인 패턴이란?  (0) 2026.02.09
'BackEnd/내일배움캠프' 카테고리의 다른 글
  • 11. Path Variable과 Request Param
  • 10. Jackson이란 무엇일까?
  • 8. 정적 페이지와 동적 페이지
  • 7. Controller란?
JK-LEE98
JK-LEE98
백엔드 개발자
  • JK-LEE98
    JK-LEE98
    JK-LEE98
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 나의 지식 공유 (4)
      • SQL (4)
      • PS (10)
      • BackEnd (32)
        • Java (3)
        • Spring (4)
        • 내일배움캠프 (20)
        • 프로그래머스 데브코스 (5)
      • 건강한 나 되기🍀 (10)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
JK-LEE98
9. 데이터를 Client에 반환하는 방법
상단으로

티스토리툴바