728x90
스프링은 Message Converter를 가지고 있다. 기본값은 현재 JSON이다
- 사용하는 언어가 서로 다른 프로그램이 데이터 통신을 한다고 가정하자
- 이 프로그램들은 사용하는 언어가 다르기 때문에 데이터 교환이 힘들다(한 쪽에서 무조건 데이터를 변환하여 사용해야함)
- 이를 해결하기 위해 "중간 데이터"가 등장했다
- 중간 데이터(언어)의 대표적인 예시로는 JSON, XML이 있다
- 따라서 두 프로그램은 교환할 데이터를 중간 데이터로 변환하여 통신하는데 이를 편하게 해주기 위해 Message Conveter가 등장하였다
- Message Converter : 데이터 송수신시 자동으로 중간 데이터(JSON)으로 Converting 해주는 것
- 이 때 JSON데이터로 변경하는 컨버터로는 "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의 단점을 해결하기 위해 등장한 것이 BufferedReader이다
- BufferdReader는 가변 길이로 문자를 받는다
- request 요청은 BufferedReader를 통해 받고, response 응답은 BufferedWriter를 통해 보낸다
- 이 때 자바에서는 BufferedReader는 request.getReader()를 사용하고, BufferedWriter는 out 내장 객체를 사용하거나 PrintWriter인 print(), println()을 사용한다
- 스프링에서는 어노테이션을 통해 BufferedReader와 BufferedWriter를 제공한다
- @RequestBody -> BufferedReader
- @ResponseBody -> BufferedWriter
스프링은 계속 발전중이다
- 지금까지도 스프링은 계속해서 더욱 편한 방향으로 발전중이다
- 그러니까 열심히 배워라~
728x90
'야미스터디 > Spring' 카테고리의 다른 글
[Spring] Spring Servlet 📌 (0) | 2022.08.13 |
---|---|
[Spring] Spring vs Spring Boot 📌 (0) | 2022.08.02 |
[Spring Boot] Gradle 버전과 OAuth2.0 구현 관련 (0) | 2022.04.12 |
2강 필터란 무엇인가요? (0) | 2022.01.07 |
1강 스프링의 핵심은 무엇인가요? (0) | 2022.01.07 |
댓글