[7강]

2023. 1. 30. 14:37Spring 강의/section2

API

정적 컨텐츠를 제외하면 2가지 방식만 기억하면 된다.

  •  html로 내리기
  •  API 방식으로 데이터를 바로 내리기

 

hello-string이라는 컨트롤러를 추가해보자.

 

@ResponseBody : http의 헤더부와 바디부에서 html을 거치지 않고 바디부에 직접 데이터를 넣어주겠다.

이전 템플릿 엔진과의 차이점은 view가 없다는 것이다 -> name에 넣은 값이 그대로 들어간다.

 

localhost:8080/hello-string?name=spring!!!

name에 넣은 spring!!!이 그대로 출력되었다.

 

페이지 소스를 확인해보면 html 태그들은 없다.

 

이전 html로 내리는 방식의 페이지 소스

API를 사용하는 진짜 이유는 이처럼 문자가 아니라 데이터를 내놓을 때다.

 

먼저, HelloController 클래스 안에 static 클래스인 Hello 클래스를 만들었다.

(static 클래스로 만들면 HelloController 클래스 안에서 Hello라는 클래스를 쓸 수 있다.)

 

 

그리고 HelloController 안에 Hello 타입의 helloApi 컨트롤러를 만든다.

hello라는 Hello 객체를 만들었고

@RequestParam으로 받은 값을 setName에 넣어주고 hello 객체 자체를 넘겼다.

 

확인해보자

페이지소스

이는 json으로 이루어진 구조이다.

json - {key : value}

 

과거에는 xml 방식을 많이 썼었는데 이는 무겁고 태그를 열고 닫아야 하는 단점이 있어서

최근에는 간단한 json 방식으로 통일이 됐다.

 

@ResponseBody 사용 원리

localhost:8080/hello-api로 들어가면 내장 톰캣 서버가 스프링으로 던져준다.

스프링은 hello-api 컨트롤러로 매핑시켜준다.

그런데 @ResponseBody 어노테이션이 붙어있다.

만약 안 붙어있다면 viewResolver한테 던져서 맞는 템플릿을 돌려달라고 할 텐데

붙어있는 경우에는 Http의 응답에 이 데이터를 그대로 넘겨버린다.

만약 문자를 넘기는 것이라면 끝인데 지금은 문자가 아닌 객체.

 

객체일 때는 디폴트로  json 형식으로 데이터를 만들어서 http 응답에 반환한다.

@ResponseBody라고 오면 HttpMessageConverter가 동작한다.

단순 문자였다면 StringConverter가 동작하고

객체라면 JsonConverter가 동작한다.

그러면 객체를 Json 형태로 바꾼다 {key : value}

  • @ResponseBody를 사용하면 ViewResolver를 사용하지 않는다.
  • Http의 body에 문자 내용을 직접 반환한다.
  • 기본 문자 처리 : 'StringHttpMessageConverter'
  • 기본 객체 처리 : 'MappingJackson2HttpMessageConverter'
  • byte 처리 등등 깅타 여러 HttpMessageConverter가 기본으로 등록되어 있음

 

최종 정리!

정적 컨텐츠 : 파일을 그대로 내려준다

MVC와 템플릿 엔진 : 템플릿 엔진을 Model, View, Controller로 쪼개서 View를 템플릿 엔진으로 html을 좀 더 프로그래밍 한 걸로 렌더링 -> 그 html을 클라이언트에게 전달해준다.

API : 객체 반환하는 것. HttpMessageConverter를 통해 json으로 바꿔 반환해주는 것

         view 없이 그냥 바로 HttpResponse에 값을 넣어서 반환해주는 것

 

'Spring 강의 > section2' 카테고리의 다른 글

5강 + 6강  (0) 2023.01.25