Skip to main content

Command Palette

Search for a command to run...

Jackson 라이브러리

Updated
•2 min read•View as Markdown

Jackson

JSON 데이터 구조를 처리해주는 라이브러리

Spring Framework와 함께 사용할 때, REST API의 요청 및 응답에서 JSON 직렬화 및 역직렬화 과정을 자동으로 처리해준다.

@GetMapping과 같은 어노테이션을 사용하여 REST 엔드포인트를 정의하면, Spring은 자동으로 요청 본문을 Java 객체로 변환하고, 응답 객체를 JSON으로 변환한다.

기본적으로 프로퍼티(Property)로 동작

Java는 프로퍼티를 제공하는 문법이 없고, 그래서 보통 Getter 와 Setter의 이름 명명 규칙으로 정해진다. Jackson은 기본적으로 Getter를 기준으로 프로퍼티를 도출한다.

그래서 다음과 같이 필드가 없는 경우에도 Json객체로 변환이 가능하다.

public class ProductInfoResponse {
   public String getId() {
       return "1";
  }

   public String getProduct_nm() {
       return "강아지인형";
  }
}

다시 말해, 반대로 클래스에 필드가 존재하더라도 Getter 메서드가 없으면 JSON 데이터로 변환 시 필요한 정보가 없을 수 있다.

데이터 매핑 방법

@Getter

@Getter
public class ProductInfoResponse {
    private Long id; /* Key */
    private String product_nm; /* 제품명 */
}
  • 캡슐화 유지 가능

  • Lombok 사용으로 코드의 가독성이 높음

@JsonProperty

public class ProductInfoResponse {
    @JsonProperty("id")
    private Long id; /* Key */
    @JsonProperty("product_nm")
    private String productNm; /* 제품명 */
}
  • 필드에 직접 접근하기 때문에 캡슐화가 깨짐

@JsonAutoDetect

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class ProductInfoResponse {
    private Long id; /* Key */
    private String productNm; /* 제품명 */
}
  • 필드에 직접 접근하기 때문에 캡슐화가 깨짐

  • 멤버변수 뿐만 아니라, Getter, Setter의 데이터 매핑 정책도 정할 수 있음

  • 제외 : @JsonIgnore

이 외에도 여러가지 설정을 할 수 있는데, 어쨌든 @JsonProperty나 @JsonAutoDetect는 필드에 직접 접근하여 JSON 직렬화 및 역직렬화를 수행하는 방식이므로, 캡슐화를 유지하기 위해서 안전하게 @Getter를 사용하는 것이 좋다.

📘 참고자료

https://velog.io/@chosj1526/Spring-Jackson-이란

https://fasterxml.github.io/jackson-annotations/javadoc/2.9/com/fasterxml/jackson/annotation/JsonAutoDetect.Visibility.html

More from this blog

실시간 스트리밍에서 락 없이 Race Condition을 다루는 법

race condition을 피하고 싶었어 웹서비스를 하다 보면 race condition을 피하기 어려운 경우가 많다. 이를 해결하기 위해 공용 자원에 대한 접근을 제한하거나 락(lock)을 걸기도 하지만, 이 방식은 이 글을 읽는 여러분도 알다시피 서버 성능에 큰 영향을 준다. 그래서 많은 서비스들이 캐시나 메시지 큐 등 다양한 설계를 도입해 이를 보완한다. 스트리밍 서비스 같은 실시간 시스템에서도 race condition은 당연히 발생한...

Jun 15, 20254 min read

Ui 공통 모듈...을 만들게 됐어요

우당탕탕 프론트 일기 1탄… 현재 서비스중인 프로그램엔 모바일 클라이언트와 윈도우 클라이언트가 각각 존재한다. 근데 두 클라이언트가 별도로 개발돼있어서 디자인 작업을 두 번 해야 하는 번거로움이 있어 이번에 일부 기능을 합치기로 했다. 채팅 기능인데, 덕분에 기존 채팅관련 소스를 파악하는 중이라 재밌고 신기해하는 중. 채팅 기능을 첨 접해봐가지구…헷 모듈 내부에 큰 기능이 있는 건 아니고 정말 UI만 지원하는 거라 역할을 분리해서 생각하는 게 ...

May 10, 20254 min read

Proxy와 Annotation

Proxy 역할 어노테이션은 기능을 활성화하거나 설정, 프록시는 실제로 그 기능을 구현하는 역할 어노테이션이 적용된 메서드나 클래스에 대해 추가로직을 삽입하거나, 메서드 호출을 가로채 특정 기능을 수행 동작 방식 JDK 동적 프록시 인터페이스 기반 : 인터페이스를 구현하는 프록시 객체를 생성 InvocationHandler 인터페이스를 구현하여 메서드 호출을 가로챔 인터페이스가 없는 클래스는 적용 불가능 CGLIB 프록시 클래스 ...

Aug 10, 20242 min read

Untitled Publication

14 posts