Frame : 틀
Work : 동작하다
즉, 프레임워크는 '틀 안에서 동작한다' 라는 뜻으로, '개발을 쉽게 할 수 있게 만든 틀' 이라는 뜻이다.
스프링도 마찬가지이다.
스프링의 소스코드는 오픈되어 있고, 무료이다.
따라서 수정할 수 있다.
class -> 설계도
object -> 실체화가 가능한 것 (추상클래스가 아닌 것)
instance -> 실체화 된 것.
ex)
(개념적으로) 가구 : 추상적, 의자 : object, 침대 : object
(현실에 존재) (내가 앉아있는)의자 : instance
톰캣 안에 스프링 컨테이너가 있고, 둘 다 필터 역할을 하는 기능이 있다.
톰캣에서는 똑같이 filter라는 이름을 가지고 있고, 스프링 컨테이너에서는 인터셉터(AOP)라는 이름을 가지고 있다.
컴파일 체킹 : 컴파일하면서 어노테이션을 확인
어노테이션 : 주석 + 힌트. 컴파일러가 무시 X
ex) 추상 클래스의 객체에서 메소드 만들 때 "@override"와 같은 것
@Component : 클래스 메모리에 로딩
@Autowired : 로딩된 객체를 해당 변수에 집어넣음
이라고 정의 했을 때,
@Component
Class A {
}
Class B {
@Autowired
A a;
}
이런식으로 사용한다.
컴파일러가 클래스 B를 분석(리플렉션)할 때, 내부의 객체 a는 IoC, 또는 어노테이션 @Component로 인해 메모리에 로딩된 객체 A가 연결된다.
메모리에서 찾을 때에는 같은 타입을 찾고, 만약 같은 타입이 없을 경우에는 null이 들어간다.
서로 다른 두 언어 사이에 데이터를 주고받기 위해서는 언어를 바꿔 줘야 하는데, 이를 보완하기 위해서 중간데이터를 사용해서 데이터를 주고받는다. 예를 들어서 자바에서 파이썬으로 데이터를 보내야 할 때, 자바에서 파이썬 형태로 바꿔서 보내는 방법, 자바에서는 그냥 자바 데이터를 보내지만 파이썬, 받는 측에서 자기에 맞는 데이터로 바꾸는 방법이 있지만 둘 다 언어에 따라 방법도 달라지고 불편하다. 따라서 사용하는 것이 중간데이터인데, 자바에서 중간데이터로 변경하여 보내면, 받는 입장에서도 어느 언어에서 보낸 데이터인지에 상관없이 데이터를 읽어 들일 수 있다. 중간데이터는 모든 언어가 읽어들일 수 있는것이 좋으므로, (예전에는 xml을 많이 사용했지만) 지금은 중간언어로 Json을 사용한다.
예로 든 자바와 파이썬이 데이터를 주고 받는 순서는 아래와 같다
MessageConverter:Jackson
자바 프로그램 request -----------------> JSON -----------------> 파이썬 프로그램
자바 프로그램 response <----------------- JSON <----------------- 파이썬 프로그램
MessageConverter
8bit는 한개의 문자(영어 기준)을 표현할 수 있는 최소 단위이다. 따라서 이를 하나의 단위로 지정하고, 8bit가 1byte가 되고 1byte는 통신의 기본 단위이다. 영어는 1byte로 모든 문자를 표현할 수 있지만, 한글은 2byte, 중국어는 3byte가 필요하다. 따라서 유니코드에서 정한 세계적으로 사용할 표준 캐릭터 인코딩 방식은 UTF-8이고 3byte를 사용한다.
통신을 할 때는 모두 1과 0으로 이루어진 데이터로 통신이 되고, 자바에서 이를 InputStream으로 받게 되면 해당 데이터를 1과 0 그래도 보여준다. 그럼 문자를 하나하나 캐스팅하여 char형식으로 바꿔줘야 하기 때문에 나온것이 InputStreamReader이다. InputStreamReader는 1과 0으로 이루어진 데이터를 char형식으로 바로 캐스팅하여 보여주고, 이 데이터를 배열로 만들면 문자열로 만들 수 있다. 하지만, 문자열은 크기를 미리 정해놓아야 하기 때문에, 작게 만들면 데이터가 누락이 될 수도 있고, 크게 만들면 낭비가 된다. 따라서 이를 보완하기 위해 나온 것이 BufferedReader이다. BufferedReader는 가변 길이의 문자를 받을 수 있다.
따라서 한마디로 말하자면, BufferedReader와 BufferedWriter는 문자열을 가변길이로 통신할수 있게 해주는 것이고, 스프링은 이 것을 직접 구현하지 않고 어노테이션을 통해서 편하게 사용할 수 있다.
@ResponseBody -> BufferedWriter
@RequestBody -> BufferedReader
현재 최신 버전은 Spring 5.0이다.
출처 : youtu.be/-5r52dt2HcU