Files
2021-12-13 21:23:43 +09:00

3.1 KiB

API

  • API방식은 데이터를 바로 내려주는 방식이다.

@ResponseBody

  • http의 통신 프로토콜에서 headerbody 중에서 body에 응답 데이터를 직접 넣어주겠다는 의미이다.
  • 메서드에서 리턴하는 문자가 요청하는 클라이언트에 그대로 전달된다.
  • 템플릿 엔진과의 차이는 View와 같은 것들이 없이 문자가 그대로 전달되는 것이다.
  • 즉, html 태그와 같은 것들이 하나도 없다...

static class

  • static class로 만들면 class 내부에서 사용할 수 있다.

인텔리제이 단축키

  • ctrl + shift + enter를 누르면 코드의 세미콜론을 자동완성해준다.

JSON

  • 키(key)값(value)으로 이루어진 구조이다.
  • {키 : 값}의 형식을 가진다.
  • 과거에는 XML도 많이 쓰였다(<HTML></HTML>과 같은 것들).
  • 최근에는 JSON으로 거의 통일되었다(거의 jsondefault로 세팅되어 있다).

자바 빈 규약

  • getter, setter를 자바 빈 규약이라고 하며, 프로퍼티 접근 방식이라고 하기도 한다.
  • private 필드값인 name에 메서드를 통해서 접근하게 된다.

@ResponseBody 사용 원리(보통 API를 사용하는 방식)

@ResponseBody 사용 원리

  • 웹 브라우저에서 localhost:8080/hello-api로 접근.
  • 톰캣 내장 서버가 스프링에 던짐.
  • 스프링이 hello-api에 매핑된 메서드를 찾음.
  • 근데 @ResponseBody라는 어노테이션이 붙어있네? 이럴 경우에는 리턴된 데이터를 응답으로 그대로 HTTPBODY에 반환하도록 동작한다(view 없이).
    • 그런데! 문자가 아니라 객체일 경우에는 json 형식으로 데이터를 만들어서 HTTP응답에 반환하는 것이 기본정책이다.
  • @ResponseBody가 있으면 우선, HttpMessageConverter라는 녀석이 동작한다(기존에는 viewResolver가 동작했었다).
    • 단순 문자일 경우에는 StringConverter가 동작한다.
      • 기본 문자처리 : StringHttpMessageConverter
    • 객체일 경우에는 JsonConverter가 동작해서 json 형식으로 바꿔서 요청한 웹 브라우저 또는 서버로 반환한다.
      • 기본 객체처리 : MappingJackson2HttpMessageConverter
  • 실무에서는 Jackson, Gson 라이브러리를 자주 보게되는데, 스프링에서는 Jackson 라이브러리를 기본으로 사용한다(물론 변경 가능하다).
  • 객체를 Jackson이라는 라이브러리로 json으로 바꾸는 것을 MappingJackson2HttpMessageConverter가 수행한다.
  • 이렇게 나오는 json 데이터를 HTTPBODY에 실어서 웹 브라우저 또는 클라이언트 등에 반환한다.
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있다.

참고사항

  • 클라이언트의 HTTP Accept 헤더서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter가 선택된다.