Spring 심화 1주차
-
HttpMessageConverter
- 사용처
- HTTP 요청 :
@RequestBody, HttpEntity<>, RequestEntity<>
- HTTP 응답 :
@ResponseBody, HttpEntity<>, ResponseEntity<>
- 우선순위
byte[]
String
JSON
-
Spring 내부 구조


- ArgumentResolver
- HTTP 요청이 컨트롤러 메서드에 전달될 때 각 파라미터를 알맞은 객체로 변환하는 인터페이스
- ReturnValueHandler
- 컨트롤러 메서드가 반환하는 값을 처리하여 HTTP 응답에 맞게 변환하는 인터페이스
-
Converter, Formatter
- Converter
- 특정 타입을 다른 타입으로 변환할 때 사용하는 인터페이스
- 범용(객체 → 객체로 변환)
- Formatter
- 사용자 지정 포맷을 적용해 데이터 변환을 처리할 때 사용하는 인터페이스
- 문자에 특화(객체 → 문자, 문자 → 객체) + 현지화(Locale)
- WebMvcConfigurer
- 설정을 통해 Converter, Formatter 추가
- ConversionService
- 어댑터 패턴
Converter, Formatter 일관성 있게 사용
- HttpMessageConverter
ConversionService 적용 안 됨
- 역할
- 요청 메세지 본문(RequestBody)을 객체로 변환하거나
- 객체를 응답 본문(ResponseBody)에 입력하는 것
- JSON을 객체로 변환하는데는
Jackson 라이브러리 사용
@JsonFormat, Deserializer 사용
ConversionService는 대표적으로 @RequestParam, @ModelAttribute, @PathVariable 등에서 사용
Converter, Fommatter를 직접 구현하고, ConversionService에 등록해서 사용
-
직렬화(Serialize)
- 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환
- JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환
-
역직렬화(Deserialize)
- byte로 변환된 Data를 원래대로 Object나 Data로 변환
- 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태