[Spring] 데이터를 Client에 반환하는 방법

thingzoo·2023년 6월 24일
0

Spring

목록 보기
13/54
post-thumbnail

Response 트렌드의 변화

과거에는 서버가 주로 요청을 받아 html/css/js 파일을 반환해주곤 했다.


하지만 최근의 경향은 다르다.

웹 생태계가 고도화 되는 과정중에 상대적으로 프론트엔드와 백엔드가 각각 따로 발전하게 되면서, 느슨하게 결합하는 방식을 더 많이 채택하게 되었다.

그래서 최근에는 서버가 직접 뷰(html/css/js)를 반환하기 보다는 요청에 맞는 특정한 정보만 반환하는 것을 조금 더 선호하기도 한다.

서버에서는 데이터 교환 포맷 중 주로 JSON 형태로 데이터를 반환한다.

따라서 초기 html 파일 요청을 제외하고는 JSON 데이터를 요청하는 API를 통해 브라우저에서 html을 조작하여 반영하는 식으로 개발한다.

이런 방식으로 개발하면 프론트와 서버를 분리해서 개발할 수 있다.
html 반환하는 API 코드는 없고 html을 관리하는 서버는 프론트엔드에서 따로 운영을 한다.
백엔드에서는 JSON 데이터 요청을 받고 데이터를 가공해서 JSON형태로 바꾼 다음 Client에 반환하는 서버만 개발한다.

JSON 데이터 반환하는 방법

  • 앞서 배웠듯이 템플릿 엔진이 적용된 SpringBoot에서는 Controller에서 문자열을 반환하면 templates 폴더에서 해당 문자열의 .html 파일을 찾아서 반환해준다.
  • 따라서 html 파일이 아닌 JSON 데이터를 브라우저에 반환하고 싶다면 해당 메서드에 @ResponseBody 애너테이션을 추가해줘야한다!

반환값: String

  • html 파일이 아닌 그냥 String만 반환하기 위해서 해당 메서드에 @ResponseBody 애너테이션을 추가한다.
  • Java는 JSON 타입을 지원하지 않기 때문에 JSON 형태의 String 타입으로 변환해서 사용한다.
@GetMapping("/response/json/string")
@ResponseBody
public String helloStringJson() {
    return "{\"name\":\"Robbie\",\"age\":95}";
}

반환값: String외 자바 객체 ✨

  • 해당 메서드에 @ResponseBody 애너테이션을 추가하고
  • 자바 객체를 반환하면 자동으로 JSON으로 변환된다.
@GetMapping("/response/json/class")
@ResponseBody
public Star helloClassJson() {
    return new Star("Robbie", 95);
}

👀 이 작업은 Spring 라이브러리 JacksonObject mapper가 가능하게 해준다. 다음 벨로그에서 알아보쟈!!!

@RestController

= @Controller + @ResponseBody

  • @RestController를 사용하면 해당 클래스의 모든 메서드에 @ResponseBody 애너테이션이 추가되는 효과를 부여할 수 있다!
profile
공부한 내용은 바로바로 기록하자!

0개의 댓글