Spring 비동기 통신

채상혁·2022년 2월 20일
0

Spring

목록 보기
17/18
post-custom-banner

비동기 통신: AJAX

ajax란 : 즉 JavaScript를 사용한 비동기 통신, 클라이언트와 서버간의 XML 데이터를 주고 받는 기술이라고 할 수있다.

$.ajax({
  type	: "GET", //요청 메소드 타입
  url		: "url", //요청 경로
  async : true, //비동기 여부
  data  : {key : value}, //요청 시 포함되어질 데이터
  processData : true, //데이터를 컨텐트 타입에 맞게 변환 여부
  cache : true, //캐시 여부
  contentType : "application/json", //요청 컨텐트 타입 "application/x-www-form-urlencoded; charset=UTF-8"
  dataType	: "json", //응답 데이터 형식 명시하지 않을 경우 자동으로 추측
  beforeSend  : function(){
    // XHR Header를 포함해서 HTTP Request를 하기전에 호출됩니다.
  },
  success	: function(data, status, xhr){
    // 정상적으로 응답 받았을 경우에는 success 콜백이 호출되게 됩니다.
    // 이 콜백 함수의 파라미터에서는 응답 바디, 응답 코드 그리고 XHR 헤더를 확인할 수 있습니다.
  },
  error	: function(xhr, status, error){
  	// 응답을 받지 못하였다거나 정상적인 응답이지만 데이터 형식을 확인할 수 없기 때문에 error 콜백이 호출될 수 있습니다.
  	// 예를 들어, dataType을 지정해서 응답 받을 데이터 형식을 지정하였지만, 서버에서는 다른 데이터형식으로 응답하면  error 콜백이 호출되게 됩니다.
  },
  complete : function(xhr, status){
    // success와 error 콜백이 호출된 후에 반드시 호출됩니다.
    // try - catch - finally의 finally 구문과 동일합니다.
  }
});

출처 :https://kdevkr.github.io/understanding-asynchronos-javascript-and-xml-with-spring/

ajax를 사용할 떄는 데이터 형식을 주로 JSON을 사용한다.

Annotations
스프링 컨트롤러에서 사용되는 어노테이션

@RequestMapping
@RequestMapping에는 요청과 응답과 관련한 프로퍼티를 설정할 수 있습니다. produces와 consumes !

method=RequestMethod.GET
method는 어떠한 요청 타입을 처리할 것인가를 결정하는 부분입니다.
produces=MediaType.APPLICATION_JSON_VALUE
produces는 어떠한 데이터 형식으로 응답할 것인가를 결정하는 부분입니다.
consumes=MediaType.APPLICATION_JSON_VALUE
consumes는 어떠한 요청에 대해서 처리할 것인가를 결정하는 부분입니다.
produces와 consumes 프로퍼티는 Spring 3.1에서 부터 지원합니다.

@ModelAttribute, @ReqeustParam
이 두개의 어노테이션은 GET과 DELETE 요청에서 활용할 수 있습니다. 그 이유는 파라미터 값을 확인해서 데이터를 바인딩해주기 때문입니다. @RequestParam은 request.getParameter()로써 가져오는 반면에 @ModelAttribute는 자바 클래스의 Getter, Setter에 의해 데이터를 바인딩시키는 것입니다. 그렇기 때문에 만약 객체 단위로 바인딩하고 싶다면 @ModelAttribute를 이용해야 한다는 것입니다.

@RequestBody
이 어노테이션은 POST와 PUT 처럼 데이터가 HTTP 요청 바디에 포함되는 경우에 이를 확인해서 데이터를 바인딩 해줍니다. 이 어노테이션의 중요한 부분은 GET 요청과 같이 파라미터를 통해 제공되는 데이터는 바인딩할 수 없다는 점입니다.

@ResponseBody
이 어노테이션은 응답되는 데이터에 대하여 등록된 메시지 컨버터를 통해 변환시켜 응답하게 됩니다. 따라서, 뷰에 모델로서 데이터를 추가시켜 응답하는 것이 아니라 데이터를 HTTP 본문으로 응답하게 된다는 것입니다.

@RestController
이 어노테이션은 스프링 4 부터 지원합니다. 해당 컨트롤러의 메소드들에 @ResponseBody 어노테이션을 적용합니다. 좀 더 편의성을 제공한다고 보시면 됩니다.

비동기 통신에 대한 이해가 더 필요한것 같다.

post-custom-banner

0개의 댓글