스프링에서는 json으로 변경해주는 라이브러리가 존재한다. Jackson이라는 라이브러리는 json으로 변경을 도와주는 라이브러리 이다.
요청
요청시, 메시지 컨버터에서 Java Object를 Json으로 변환하여 요청한다.
응답
응답시, 메시지 컨버터에서 Json을 Java Object로 변환하여 받는다.
Spring의 Message Converter가 있기 때문이 데이터 요청 및 응답받는것이 매우 편리하다.
스프링은 BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다
데이터 통신할 때 전기선을 통해서 데이터가 이동한다. 통신은 비트단위로 통신이 된다.
그런데 이 통신 방식은 발전의 시작이 영어권 국가에서 먼저 발전을 시작했기 때문에, 이렇게 bit단위로 통신하게 되면 사람이 이해하기 어렵다고 생각하였다. 그래서 bit단위로 통신하는것이 아니라 어떻게 하면 영어 한문자로 통신할 수 있을까 라고 생각해봤더니 최소 8bit가 필요하였다. 8bit만 있으면 256가지의 문자를 전송할 수 있다.
그런데 만약 한글이라면 8bit로 통신하지 못한다. 왜냐하면 한글은 종류가 더욱 다양하기 때문이다. 그래서 한글은 최소 16bit가 필요하다. 그러면 영어권 국가에서는 8bit면 통신이 가능하다.
"8bit씩 끊어 읽어. 그럼 한문자씩 받을 수 있을거야!"
"아 그래? 그럼 내가 8bit씩 끊어 읽을께. 그럼 내가 한문자씩 읽을 수 있겠네?"
라고 해서 8bit를 논리적인 단위로 1바이트라고 하는 것이다. 이 1바이트는 통신의 단위가 된다. 물론 비트통신도 있지만 우리가 일반적인 프로그래밍에서는 바이트 통신을 한다. 만약에 영어권에서 발생한것이 아니라 대한민국에서 제일 처음 시작되었다면 1바이트는 16bit가 되었을 것이다.
그런데 중국은 언어가 10만개? 정도 된다. 그럼 중국은 2바이트로도 통신이 불가능하다. 3바이트가 되어야 한다. 전세계적으로 문자를 표현하기 위해서 필요한 바이트가 다를것이다. 미국은 1바이트, 한국은 2바이트, 중국은 3바이트이기 때문에 인터넷상에서는 문제가 발생한다.
따라서 유니코드에서 정해둔것이 UTF-8이라는 캐릭터 인코딩을 정해두었다. 이것이 3바이트 통신이다. 그래서 요즘은 문자 인코딩을 3바이트로 한다.
문자를 전송할때 InputStreamReader를 사용하면 배열로 여러개의 문자를 보내게 되는데 작은 문자를 보내면 낭비를 하게 된다. 따라서 이런것들을 BufferedReader로 감싼다. 따라서 BufferedReader를 사용하면 가변길이 문자열을 받을 수 있다.
데이타를 받을때는 BufferedReader를 사용하고, 데이타를 쓸때는 BufferedWriter를 사용한다. 스프링에서는 우리가 이런것들을 직접 구현할 필요없이 어노테이션 @ResponseBody를 사용하게되면 BufferedWriter가 동장하게 된다. 그리고 @RequestBody를 사용하게되면 BufferedReader가 동작하게 된다.
스프링에서 어노테이션 @ResponseBody를 사용하면 Buffered Writer가 존재하게 된다.
스프링에서 어노테이션 @RequestBody를 사용하면 Buffered Reader가 존재하게 된다.