브라우저를 통해 HTML, CSS, JS 파일을 반환하는 것이 서버의 주 업무일까?
➡️ ❌. HTML이 아니라 MySQL 같은 데이터베이스 서버에서 받아온 데이터를 Client에 반환해주면 Client에서 해당 데이터를 가지고 브라우저를 통해 사용자에게 어떠한 결과 값을 보여주는 식으로 발전해가고 있음.
그래서 요즘은 JSON 형태로 정보를 많이 반환하고 있음.
- 클라이언트에서 최소 Request를 하면 정적 혹은 동적 HTML 반환
- 그 이후에는 AJAX 를 통해 비동기적으로 서버쪽으로 요청이 들어옴
- 서버는 해당 요청에 맞게 JSON형태로 데이터 반환
(JSON 형태의 타입은 자바에서 존재하지 않음. 그래서 JSON 형태로 클라이언트에 반환해줘야 함.)
JSON 형태로 클라이언트에 반환해주는 법
public String helloStringJson() {
return "{\"name\":\"Robbie\",\"age\":95}";
}
- String 문자열의 내부 모양이 JSON 형태로 생긴 것을 리턴
- HTTP에서는 텍스트 형태라고 인지함. (Content-Type: text/html)
@GetMapping("/json/class")
@ResponseBody
public Star helloClassJson() {
return new Star("Robbie", 95);
}
- 자바 객체를 그대로 반환해주면 JS에서는 이해 불가(자바 언어이기 때문에)라 JSON 형태로 반환됨
- 스프링 내부적으로 자바의 객체를 JSON 형태로 변환해줌 (Content-Type: application/json)
@RestController
: @Controller + @ResponseBody
- @Controller 사용시 메서드마다 @ResponseBody를 붙여줘야 했었는데, @RestController를 Controller annotation 자리에 넣어주게 되면 메서드마다 @ResponseBody를 붙여주지 않아도 자동으로 적용됨
@RestController를 사용하는 경우
- 최초 요청시 HTML을 반환해야 하는 경우, 클래스 내에서 View를 반환해야하기 때문에 해당 클래스에는 @Controller annotation이 달려있고, 데이터 반환시에 메서드마다 @ResponseBody 작성해줌
- 전체 메서드가 HTML이 아닌 JSON형태의 데이터를 반환하는 클래스에서는 @RestController annotation을 작성해줌
용어 정리
- AJAX
: JS의 한 라이브러리
'내일배움캠프(Sparta) > Spring' 카테고리의 다른 글
HTTP 데이터를 객체로 처리하는 방법 (0) | 2023.11.02 |
---|---|
[Spring] Jackson / Path Variable / Request Param (1) | 2023.11.02 |
[Spring] Controller / 정적 페이지 / 동적 페이지 (0) | 2023.11.02 |
[Spring] Spring MVC / Front Controller (1) | 2023.11.01 |
[Spring] 테스트 코드 / Lombok / application.properties (1) | 2023.11.01 |