직렬화와 역직렬화

고승원·2023년 4월 18일
0

TIL

목록 보기
16/24

직렬화

객체를 바이트 스트림으로 바꾸는 과정

직렬화의 기준으로

포맷으로 Java 포맷, XML, JSON등이 있다.

자바 포맷이 더 빠르지만, 가독성과, 플랫폼의 다향성때문에 사실상 JSON이 표준

바이트 스트림 : 8비트의 연속된 데이터 흐름, 컴퓨터에서 데이터를 바이트 단위로 처리하기 때문에 기본 I/O에서 사용된다.

역직렬화

바이트 스트림을 객체로 바꾸는 과정

스프링 부트에서 직렬화/역직렬화

스프링은 @ResponseBody를 사용할 때 HttpMessageConverter가 동작한다.

HttpMessageConverter 인터페이스를 열어보자.

read와 write 메서드가 있는데 설명을 보면 canRead, canWrite 메서드가 반드시 true를 반환해야 한다.

메세지 컨버터가 클래스 또는 미디어 타입을 지원하는지 체크한 뒤, 읽거나 쓰기를 하는 모습.

HttpMessageConver를 상속받으며 JSON을 변환하기 위한 추상클래스 AbstractJackson2HttpMessageConverter를 알아보자

역직렬화

readInternal은 HTTP 요청에서 JSON 데이터를 읽어서 Object로 변환한다.

여기서 사용되는 readJavaType 메서드를 찾아보자.

  1. contentType을 통해 CharactorSet을 가져온다.
  2. contentType을 통해 ObjectMapper를 선택한다.
  3. 유니코드 문자 집합인지 확인 후 objectMapper.readValue()를 통해 자바 객체로 변환한다.

직렬화

  1. contentType을 통해 objectMapper를 선택한다.
  2. value, serializationView, filters를 초기화 한다.
  3. 2번으로 ObjectWriter를 생성한다.
  4. value를 JSON으로 변환하고 응답 메세지의 body에 쓴다.
profile
봄은 영어로 스프링

0개의 댓글