기록

spring_프로젝트_0910

coolcode 2022. 9. 10. 21:00
@RestController : @Controller와 달리 @RestController는 리턴값에 자동으로 @ResponseBody가 붙게되어 별도 어노테이션을 명시해주지 않아도 HTTP 응답데이터(body)에 자바 객체가 매핑되어 전달 됨

@Controller : 바디를 자바객체로 받기 위해서는 @ResponseBody 어노테이션을 반드시 명시해주어야 함

 

@RequestBody / @ResponseBody 를 이용한 데이터 송수신 (비동기처리 시 사용하는 어노테이션)

-> HTTP요청본문(body)을 자바객체로 변환하고 자바객체를 다시 HTTP응답본문(body)으로 변환해줌

-> @RequestBody가 붙은 파라미터에는 HTTP 요청본문이 그대로 전달됨/ HTTP 요청 바디내용을 통째로 자바객체로 conversion 하는데, 이때 HttpMessageConverter를 사용함  >> RequestMappingHandlerAdpter 에는 HttpMessageConverter 타입의 메세지 변환기가 여러개 등록되어 있음.  변환된 자바 객체는 URL매핑된 컨트롤러 메서드의 파라미터로 전달해줌  (일반적인 get/post 요청 파라미터는 @RequestBody를 사용할 일이 없음 / xml이나 json기반 데이터를 포맷을 사용하는 요청의 경우 이 방법이 유용함)

@RequestMapping(value = "/login")
public String ajaxTest(@RequestBody MemberVO vo) throws Exception {

  System.out.println(vo.getId());
  
  return "member/login";
}

 

-> @ResponseBody가 붙은 파라미터는 자바 객체(비즈니스 로직의 결과물)를 HTTP 요청의 바디본문으로 매핑하여 클라이언트로 전송함 (= @Responsebody 어노테이션을 사용하면 http요청 body를 자바 객체로 전달받을 수 있음)

비동기 통신은 요청 > 응답이 화면전환(새로고침) 없이 이루어지며 비동기통신을 하기 위해서는 요청/응답 모두 body(본문)에 데이터를 담아서 보내야 함  >> 요청본문 RequestBody  / 응답본문 ResponseBody  

본문에 담기는 데이터 형식 중 대표적으로 사용하는 것이 JSON

참고 https://cheershennah.tistory.com/179

JSON (= 클라이언트와 서버간의 비동기 통신시 사용되는 데이터 형식)
    > key-value 한쌍으로 데이터 object 를 전달하기 위해 사용하는 개방형 표준 포맷
    > http통신시 데이터를 주고 받을 때 자주 사용되는 데이터 포맷(json, xml 등)                                                             
    > 비동기식 통신(ajax)을 하기 위함

// JSON 포맷 예시
let json = {"key1" : "value1", "key2" : "value2"}

JSONP (= JSON with Padding)
	> 클라이언트 단이 아닌, 
      다른 도메인에 있는 서버로부터 데이터를 요청하는 경우 사용되는 데이터 포맷
    > JSON데이터를 클라이언트가 지정한 콜백함수로 감싸 클라이언트에 전송
    > JS는 서로 다른 도메인에 대한 요청을 보안상 제한하는데, 
      개발 중에는 다른 도메인으로부터 데이터를 가져와야하는 상황이 있기 때문에 
      JSONP 방식을 사용함
      
// $.ajax에서의 JSONP 형식 예시
data : JSON.stringify({id : id, pw : pw})

참고 https://cheershennah.tistory.com/155

 

JSON이란? / JSONP 란? 차이점 비교.

JSON이란? Java Script Object Notation 키와 값(key-value) 한쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 사용하는 개방형 표준 포맷이다. http통신 시 데이터를 주고받을 때 흔히 쓰이는 데이터 포맷

cheershennah.tistory.com


>> @RequestBody / @ResponseBody 정리 
클라이언트에서 서버로 필요한 데이터를 요청하기 위해 JSON 데이터를 요청 본문에 담아서 서버로 보내면, 서버에서는 @RequestBody 어노테이션을 사용하여 HTTP 요청 본문에 담긴 값들을 자바객체로 변환시켜 객체에 매핑함
 
서버에서 클라이언트로 응답 데이터를 전송하기 위해 @ResponseBody 어노테이션을 사용하여 자바 객체를 HTTP 응답 본문의 형태로 매핑하여 클라이언트로 전송함