SpringBoot 개념정리(3) - 1. 스프링이란?

Jang Seowoo·2022년 8월 3일
2
post-thumbnail

인프런 스프링부트 개념정리(이론)
이 글은 다음 강의의 이론 정리 글 입니다.


메시지 컨버터가 무엇인가요?

7) 스프링은 MessageConverter를 가지고 있다. 기본값은 현재 json이다.

각 나라가 자기 나라의 언어밖에 모른다고 가정했을 때, 영어권 나라가 "안녕"이라는 메세지를 받으면 이해를 못할 것이고, 마찬가지고 한국이 "hello"라는 메세지를 받아도 이해를 하지 못할 것이다.

우리가 다양한 언어의 나라와 소통을 하기 위해 모든 언어를 배워서 메세지를 각국의 언어로 보낸다거나 메세지를 받았을 때 해석한다거나 하는 일은 에너지 소모가 너무 클 것이다. 따라서 모든 나라가 서로 소통할 수 있도록 모든 나라의 사람들이 이해할 수 있는 중간 언어를 하나 만들었다. 이 언어는 바로 json이다.(예전에는 xml이었다.)

자바 object를 파이썬 object로 어떻게 바꿀 수 있을까?
자바와 파이썬은 서로의 언어를 해석할 수 없지만, json은 해석할 수 있다. 따라서, 자바 object가 전송되기 전에 json으로 먼저 바꾸고 이를 다시 파이썬 object로 바꾸면 된다.

Class Animal {
	int num = 10;
    String name = "사자";
}

위의 java 코드를 json으로 변환한 결과는 다음과 같다.

{"num": 10, "name":"사자"}

이렇게 공통 언어로 변환시켜주는 일을 messageConverter가 해준다. 이는 Spring에 라이브러리(Jackson)로 존재한다. messageConverter는 요청(Java to Json)할때만 작동하는 게 아니라 응답(Json to Python)받을 때에도 작동한다.

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

통신은 전기선을 통해 전류가 흐르는 것을 의미한다. bit 단위로 통신하며 bit가 1이면 전류 흐름, 0이면 전류가 흐르지 않는다. 하지만 우리는 bit 단위가 아니라 영어 한 문자를 전송하기 위해 8bit(256가지 문자)가 필요하다. 그렇다면 8bit씩 끊어 읽으면 한 문자씩 받을 수 있을 것이다. 이를 논리적인 단위로 1byte라고 부르고 바이트 통신의 최소 단위가 된다. 전세계 언어를 통신하기 위해 캐릭터 인코딩이 필요하며 이는 유니코드에서 지정한 3byte 통신인 utf-8을 사용한다.

프로그래밍 통신은 바이트 통신을 한다. 따라서 전기선을 우리는 Byte Stream 이라고 부르고 최소 단위는 byte가 된다.

이를 자바에서는 InputStream으로 읽는다. InputStream로 읽은 byte를 사람이 알아들을 수 있는 문자로 해석하기 위해 우리는 (char)로 캐스팅이 필요한데, 이 대신 InputStreamReader라는 것을 사용하면 바로 문자 하나로 바꿔서 준다. 문자 하나뿐만 아니라 배열로도 받을 수 있는데, 자바에서 배열은 고정 길이이다. 하지만 고정 길이 배열은 낭비가 크거나, 문자열이 잘리는 일이 발생할 수 있다.

따라서 가변 길이의 문자열을 받을 수 있는 BufferedReader를 사용한다.

어떤 사람이 데이터를 담아서 요청할 때, 데이터를 받는 쪽은 Buffered Reader로 받는다. jsp에서는 request.getReader()를 사용하면 BufferReader와 같은 역할을 한다.

반대로, 데이터를 보낼 때는, BufferedWriter를 사용해야하는데, 자바에서는 똑같은 기능을 하는 PrintWriter를 많이 사용한다. jsp에서는 out()과 같다.

Spring에서는 이를 어노테이션으로 제공하여 BufferedReader와 BufferedWriter를 손쉽게 사용 가능하다.
@ResponseBody -> BufferedWriter가 존재
@RequestBody -> BufferedReader가 존재

9) 스프링은 계속 발전중이다.

스프링부트가 나오고 나서 스프링을 사용하기 굉장히 편리해졌다.

profile
https://devseowoo.notion.site/Seowoo-Portfolio-b21365c3477345818913e8d8fe2e3b90

0개의 댓글

관련 채용 정보