본문 바로가기
IT_Developers/JAVA

Spring - Jackson 이란?

by 고코더 2022. 2. 8.

안녕하세요. 고코더 입니다. 

이번 시간에는 RestApi에서 자주 사용하는 Jackson 라이브러리를 알아보겠습니다. 

 

Jackson 이란?

Jackson 은 JAVA 진영에서 대표적인 json 라이브러리입니다. 그리고 XML, YAML, CSV 등의 다른 형식의 데이터를 지원하는 data-processing 툴입니다. 스트림 방식으로 속도가 빠르고 유연합니다. annotation 방식으로 사용이 가능하며 각종 문서화와 유효성 체크를 쉽게 가능하게 해 줍니다. 

 

스프링과 Jackson

Jackson은 스프링 3.0이후 부터 @RequestBody 방식을 이용한 리턴 방식이면 MessageConverter 가 작동해 자동으로 컨트롤러가 객체를 후킹 할 수 있게 되었습니다. 그래서 스프링에서는 자연스럽게 JSON을 다룰 때 우리도 모르게 이 방식을 사용 중에 있습니다. Spring 3.1 이후로는 만약 클래스 패스에 Jackson 라이브러리가 존재한다면, 자동적으로 MessageConverter가 등록이 됩니다. 그래서 최신 버전의 스프링을 사용중이라면 더욱더 편리하게 사용이 가능합니다.

 

제공 어노테이션

@JsonIgnoreProperties : json으로 변환(Serialize, Deserialize) 시 제외시킬 속성을 지정. VO class 위에서 선언
@JsonIgnore : VO의 멤버변수 위에 선언해서 제외처리 (비밀번호 같은거)
@JsonProperty : json으로 변환 시에 사용할 이름이다. (DB 칼럼과 이름이 다르거나 api 응답과 이름이 다르지만 매핑시켜야 할 때)
@JsonInclude : 값 존재 유무에 따라 Serialize 시 동작을 지정 (default는 ALWAYS)
ALWAYS : 속성의 값에 의존하지 말고 항상 포함
NOT_EMPTY : null 또는 값이 빈 경우가 아니면 포함
NOT_NULL : null 이 아니면 포함
NOT_DEFAULT : bean의 기본생성자로 정의된 필드값과 다르게 변경된 필드만 포함
@JsonAnyGetter : Map 타입의 멤버변수의 getter 위에 선언한다. json 변환 시 "key":"value" 형식으로 나온다.
@JsonAnySetter : Deserialize 때
@JsonGetter : 어떤 필드값을 가져올 떄 이 메소드로 접근해서만 가져오라고 jackson에게 명시적으로 알린다.
@JsonSetter : 위와 동일, Deserialize 때
@JsonAutoDetect :
@JsonUnwrapped : 어떤 필드가 대해 중첩 구조로 넣는다면, 그러지 말라고 명시적으로 알린다
@JsonRootName : VO class 위에 선언해서 wrapping 해서 json 변환
@JsonFormat : 날짜, 시간값을 직렬화할 때 형식을 지정
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")

참조 : https://sjh836.tistory.com/164

 

쉽게 설명하면

 

@RestController를 사용하여 개발을 하다보면 reqeust와 response에서 일어나는 이벤트를 Jackson이 알아서 

json에서 객체 반대로 객체에서 json'의 과정을 처리해주는 주는데 MessageConverter가 처리 과정에서 사용하는 것이 바로 Jackson입니다.

댓글