Jackson을 사용해 JSON을 Java Record로 변환하기 (실용 가이드 + 온라인 도구)

발행: (2026년 1월 4일 오후 09:03 GMT+9)
8 min read
원문: Dev.to

Source: Dev.to

Cover image for Convert JSON to Java Record with Jackson (Practical Guide + Online Tool)

Sam T

JSON을 Java 타입으로 파싱하는 일은 백엔드 개발자에게 매일 같은 작업입니다. 이제 Java 17 레코드가 언어의 일부가 되면서, 불변 데이터 모델을 작성하고 유지 관리하는 것이 더 쉬워졌습니다. 하지만 현실은 대부분의 튜토리얼이 여전히 JSON을 POJO에 매핑하는 방법만 보여주고, 레코드에 매핑하는 방법은 거의 다루지 않으며, 시간을 절약해 줄 도구에 대해서는 거의 언급하지 않는다는 점입니다.

이 글에서는 Jackson을 사용해 JSON을 Java 17 레코드로 변환하는 과정을 단계별로 살펴보고, 중요한 어노테이션을 설명하며, 온라인 생성기를 활용해 이를 자동화하는 방법을 공유합니다. 또한 Toolshref JSON‑to‑Java 코드 변환기 for records가 실제 워크플로우에 어떻게 적용되는지도 보여드릴 것입니다.

JSON 데이터에 Java 레코드를 사용하는 이유는?

Java 레코드는 Java 16에서 도입되고 Java 17에서 최종 확정된 간단하고 불변인 데이터 운반체입니다.

They provide:

  • 간결한 문법 – 보일러플레이트 생성자, getter, equals/hashCode, toString이 필요 없습니다.
  • 기본 불변성 – 필드가 final입니다.
  • JSON API와의 더 나은 정렬 – 데이터 객체가 단순히 컨테이너인 경우.

Spring Boot, Quarkus, Micronaut와 같은 프레임워크로 구축된 API에서 레코드는 잡동사니를 줄이고 비즈니스 로직에 집중할 수 있게 합니다. 하지만 개발자들은 종종 다음과 같이 묻습니다:

“Jackson이 JSON을 Java 레코드로 역직렬화할 수 있나요?”

– 하지만 알아야 할 몇 가지 규칙이 있습니다.

Jackson JSON을 레코드로: 바로 사용할 수 있는 기능

Jackson 2.12+는 Java 레코드를 기본적으로 지원합니다. 즉:

  • Jackson은 JSON 속성을 레코드 컴포넌트에 매핑합니다.
  • setter가 필요하지 않습니다.
  • 정규 생성자가 값을 직접 받습니다.

예제 JSON

{
  "id": 101,
  "name": "Alice",
  "email": "alice@example.com"
}

동등한 Java 레코드

public record User(int id, String name, String email) {}

Jackson을 사용한 역직렬화

ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(jsonString, User.class);

JSON 키가 레코드 컴포넌트 이름과 일치하면, Jackson이 자동으로 연결합니다.

레코드에 Jackson 어노테이션이 필요할 때

기본 설정만으로는 충분하지 않은 경우가 있습니다:

  • JSON은 snake_case를 사용하지만 Java는 camelCase를 사용합니다.
  • 알 수 없는 속성을 무시하고 싶을 때.
  • 사용자 정의 날짜/시간 형식이 필요할 때.

Jackson 어노테이션은 POJO와 마찬가지로 레코드에서도 작동합니다.

@JsonProperty

@JsonProperty를 사용해 JSON 키가 레코드 필드 이름과 일치하지 않을 때:

public record User(
    @JsonProperty("user_id") int id,
    @JsonProperty("full_name") String name
) {}

@JsonIgnoreProperties

입력 JSON에 필요 없는 추가 필드가 있을 경우:

@JsonIgnoreProperties(ignoreUnknown = true)
public record User(int id, String name) {}

@JsonFormat

날짜에 유용합니다:

public record Event(
    int id,
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
    LocalDateTime timestamp
) {}

레코드와 함께 사용하는 Jackson 흔한 함정

1. 매개변수 없는 생성자 누락

레코드에는 매개변수 없는(no‑arg) 생성자가 없으며, 이는 매개변수 없는 생성자를 기대하는 오래된 프레임워크에서 문제를 일으킬 수 있습니다. Jackson은 모든 구성 요소와 일치하는 정규(constructor) 생성자가 있으면 매개변수 없는 생성자가 필요하지 않습니다. 더 많은 제어가 필요하면 @JsonCreator를 사용하세요:

public record User(int id, String name) {
    @JsonCreator
    public User(@JsonProperty("id") int id,
                @JsonProperty("name") String name) {
        this.id = id;
        this.name = name;
    }
}

2. 중첩 JSON 객체

Jackson은 해당하는 Java 타입이 존재하기만 하면 중첩 구조를 자동으로 처리합니다.

JSON

{
  "id": 5,
  "profile": {
    "age": 30,
    "status": "active"
  }
}

Java 레코드

public record Profile(int age, String status) {}

public record User(int id, Profile profile) {}

Jackson은 추가 코드 없이 중첩 필드를 해결합니다.

Source:

Toolshref JSON‑to‑Java Record Converter 사용하기 (핸즈‑온)

저는 API 응답을 Java 모델에 매핑할 때 이 도구를 정기적으로 만들고 사용합니다. 간단하고 수작업의 번거로움을 없애줍니다.

👉 여기서 사용하기

작동 방식

  1. JSON을 붙여넣습니다.
  2. 대상 타입으로 Record를 선택합니다.
  3. 바로 사용할 수 있는 Java 17 레코드 클래스를 얻습니다.

이전 JSON에 대한 예시 출력

public record User(int id, String name, String email) {}

중첩된 JSON의 경우, 다음과 같이 생성됩니다:

  • 각 중첩 객체마다 별도의 레코드 파일
  • 올바르게 타입이 지정된 중첩 레코드

중첩 레코드를 직접 코딩하는 대신, 도구가 즉시 처리해 줍니다.

왜 이것이 중요한가

백엔드 API가 빠르게 변화하는 팀에서는 모델을 동기화하는 것이 번거로운 작업입니다. 온라인 JSON‑to‑레코드 변환기를 사용하면:

  • 인간 오류를 줄입니다.
  • 일관된 명명 규칙을 강제합니다.
  • 즉시 다듬을 수 있는 코드를 생성합니다.

이렇게 하면 개발 속도가 빨라지고 유지보수가 향상되며, 보일러플레이트 매핑 코드보다 비즈니스 로직에 집중할 수 있습니다.

  • 서드파티 API 통합 또는 프로토타이핑.
Back to Blog

관련 글

더 보기 »

Spring Data JPA 관계

소개 새해 복 많이 받으세요! 풀스택 여정의 지난 10일 동안, 입사 직후 프로젝트를 진행해 왔습니다. 처음에는 Re...