스프링은 BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다.
BufferedReader와 BufferedWriter를 알아보기전에..! 데이터 통신에 대해 조금만 알아보자❗
우리가 데이터를 통신할때 전기선(전류)으로 bit 단위로 통신을하게된다
bit -> 0,1,0,0,1,1,0 처럼 0은 전류가 흐르지않고 1은 전류가 흐르는것이다.
사람이 저 bit단위로 통신하게되면 알아먹을수 있을까...❓😕
그럼 bit단위 통신이 아닌 영어 한 문자로 통신을 할 수 있을까❓❓( bit는 영어권 국가에서 발전했기때문에..😥)
영어 한 문자로 통신하기 위해서는 8bit가 필요하다❗ 8bit는 256가지의 문자를 전송이 가능하기 때문이다.❗
- 8bit = 2의8승 = 256 이기 때문에 영어의 알파벳은 256개가 안되기 때문에 8bit으로 통신이 가능하다❗
- 8bit씩 끊어 읽으면 한 문자씩 읽을수 있기때문에 8bit를 논리적인 단위로 1Byte라고 부른다..❗
- 이 1Byte는 통신의 최소단위로 쓰인다 우리가 프로그래밍할땐 거의 다 byte통신을 하지요.
그.런.데. 한글은 8bit로 통신이 안된다. 왜??? 자음+모음의 경우의 수가 너무 많기 때문에 (2904개라고한다❗)한글은 16bit로 통신을 해야한다❗ (이것이 한글의 위대함..❗❓👍👍 훗...😎)(중국은 문자가 10만개가 넘어가서 3Byte로 통신을 해야한다고한다..)
우리는 인터넷을통해 전세계와 통신을 주고 받고 있기 때문에 모든 국가의 인코딩방식을 유니코드에서 정해 놓은게 있다. 그게바로 UTF-8 이다❗ UTF-8 은 3Byte통신❗❗
Byte Stream이란 우리가 데이터를 주고받을때 Byte단위로 주고받는것을 의미한다❗❗
Byte Stream을 통해 전송된 데이터를 Java에서는 InputStream으로 읽는다❗ 우리는 Byte통신을 하기때문에 InputStream이 읽은 하나의 단위가 Byte이다.
Byte는 문자가 아니니까 문자로 변형하기 위해서 받은 데이터를 (char)같이 캐스팅을 해야하는데 이게 조금 복잡하다보니..😵😵
Java에서 조금 간편하게 Byte통신을 위해 InputStreamReader라는 클래스를 제공해준다❗
Byte로 받은 데이터를 InputStreamReader라는 것으로 감싸게되면 문자 하나를 준다❗👍
또한 InputStreamReader는 배열(Array)로도 여러개의 문자를 받을 수 있다❗
여기서 배열(Array)의 단점이 나온다. 배열은 크기가 정해져 있기 때문에 메모리 낭비가 생길 수 있다❗
예를들어 배열의 크기를 6Byte라고 정하면 우리가 받은 문자는 2Byte밖에 사용을 하지 않는다면 4Byte라는 메모리가 낭비가 되는것이다❗
또한 우리가 받은 문자가 10Byte라면 6Byte만 받고 나머지 4Byte는 버려지게 된다❗😢
이 모든것들은 해결해주기 위해 💡BufferedReader💡라는것을 사용한다 ( 후...너무 빙빙 돌아 왔다...)
Byte를 BufferedReader로 감싸게되면 가변길이의 문자를 받을 수 있게된다..❗❗
어떤 데이터에대한 request를 받는쪽에서는 BufferedReader로 받고❗
( jsp에선 request.getReader()를 사용한다 )
어떤 데이터를 response할 때는 BufferedWriter를 써서 응답 해줘야한다❗
( java에서는 Bufferedwriter가 내려쓰기 기능이 없기때문에 PrintWriter를 많이 쓴다 )
( jsp에선 out이라는 내장 객체를 사용한다 )
BufferedWriter라는것은 Byte Stream을 통해 데이터를 전송할 때 전송 단위가 문자열로 가변길이의 데이터를 쓰게 해주는 클래스이다!
Spring에서는 우리가 BufferedReader와 BufferedWriter를 직접 구현할 필요 없이 어노테이션을 제공해준다❗❗
- @ResponseBody -> BufferedWriter가 동작
- @RequestBody -> BufferedReader가 동작
출처
https://www.youtube.com/watch?v=XBG6CUtVCIg&list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg
'Spring Boot' 카테고리의 다른 글
스프링부트+JPA - 6편 ( ORM ) (0) | 2021.05.14 |
---|---|
스프링부트+JPA - 5편 ( JPA ) (1) | 2021.05.03 |
스프링부트+JPA - 3편 ( MessageConverter ) (0) | 2021.04.19 |
스프링부트+JPA - 2편 ( Filter , Annotation ) (0) | 2021.04.14 |
스프링부트+JPA - 1편 ( IoC, DI ) (0) | 2021.04.08 |