본문 바로가기
야미스터디/Spring

3강 메세지 컨버터가 무엇인가요?

by 의정부핵꿀밤 2022. 1. 10.
728x90

스프링은 Message Converter를 가지고 있다. 기본값은 현재 JSON이다

  • 사용하는 언어가 서로 다른 프로그램이 데이터 통신을 한다고 가정하자
  • 이 프로그램들은 사용하는 언어가 다르기 때문에 데이터 교환이 힘들다(한 쪽에서 무조건 데이터를 변환하여 사용해야함)
  • 이를 해결하기 위해 "중간 데이터"가 등장했다
  • 중간 데이터(언어)의 대표적인 예시로는 JSON, XML이 있다
  • 따라서 두 프로그램은 교환할 데이터를 중간 데이터로 변환하여 통신하는데 이를 편하게 해주기 위해 Message Conveter가 등장하였다
  • Message Converter : 데이터 송수신시 자동으로 중간 데이터(JSON)으로 Converting 해주는 것
  • 이 때 JSON데이터로 변경하는 컨버터로는 "Jackson"이 있다

JACKSON

 


스프링은 BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다

  • 데이터 통신을 할 때 전기선(전류)를 통해 하게 되는데, 초창기에는 bit 단위로 통신을 하였다

비트 통신

  • 이 때 영어권 사람들이 "비트 대신 문자(영어)로 통신할 수 없을까?"라는 고민을 하였고, 그 결과 영어 한 문자로 통신하려면 8bit가 필요하다는 것을 알게 되었다
  • 즉, 8bit = 2의8승 = 256 이기 때문에 영어의 알파벳은 256개보다 적기 때문에 8bit으로 통신이 가능하다
  • 8bit씩 끊어 읽으면 한 문자씩 읽을수 있기 때문에 8bit를 논리적인 단위로 1Byte라고 부른다
  • 이후 1Byte는 통신의 최소단위로 쓰이게 되었다
  • 하지만, 나라별로 언어가 다르고 이를 모두 각각의 언어로 통신하게 되면 어렵기 때문에, 전세계 통신이 가능하도록 하기 위해 "유니코드(UTF-8)"을 사용하여 통신한다 -> 3Byte 통신

유니코드


  • Byte Stream : Byte(1Byte = 8Bit) 단위로 통신을 하는 것
  • Byte Stream을 통해 전송된 데이터를 Java에서는 InputStream을 통해 읽는데, Byte 통신을 하기 때문에 InputStream이 읽은 데이터 하나의 단위가 Byte이다
  • 이 때 Byte는 문자가 아닌 논리적인 단위에 불과하기 때문에 이를 문자로 변경해야 한다
  • Java에서는 이를 보다 쉽게 하도록 InputStreamReader라는 클래스를 제공해준다
  • InputStreamReader를 사용하여 고정길이만큼 문자를 받게 되는데, 이 때 배열로 여러 개의 문자를 받는다
  • 하지만 배열은 크기가 정해져 있어 데이터가 잘리거나 배열의 크기가 남아서 메모리 낭비가 발생할 수 있다!

InputStreamReader

 

 

  • InputStreamReader의 단점을 해결하기 위해 등장한 것이 BufferedReader이다
  • BufferdReader가변 길이로 문자를 받는다
  • request 요청은 BufferedReader를 통해 받고, response 응답은 BufferedWriter를 통해 보낸다
  • 이 때 자바에서는 BufferedReader는 request.getReader()를 사용하고, BufferedWriter는 out 내장 객체를 사용하거나 PrintWriter인 print(), println()을 사용한다
  • 스프링에서는 어노테이션을 통해 BufferedReader와 BufferedWriter를 제공한다
    • @RequestBody -> BufferedReader
    • @ResponseBody -> BufferedWriter

스프링은 계속 발전중이다

  • 지금까지도 스프링은 계속해서 더욱 편한 방향으로 발전중이다
  • 그러니까 열심히 배워라~
728x90

댓글