자바의 ObjectMapper

GoRuth·2025년 5월 5일

object-mapper

목록 보기
1/1

ObjectMapper는 Jackson 라이브러리에서 제공하는 JSON 처리 유틸리티로, Spring에서 객체(Object)와 JSON 간의 직렬화 및 역직렬화 작업에 널리 사용됩니다.


1. ObjectMapper란?

ObjectMapper는 Java 객체를 JSON으로 직렬화하거나, JSON을 Java 객체로 역직렬화할 수 있게 해주는 Jackson의 핵심 클래스입니다.

ObjectMapper mapper = new ObjectMapper();

// 직렬화
String json = mapper.writeValueAsString(myObject);

// 역직렬화
MyObject obj = mapper.readValue(json, MyObject.class);

2. 직렬화와 역직렬화의 내부 동작 원리

직렬화 (writeValueAsString)

  1. BufferRecycler 준비
    → Jackson이 내부 버퍼 메모리 확보
  2. SegmentedStringWriter 준비
    → JSON 데이터를 쓸 준비
  3. JsonGenerator 생성
    → 실제 JSON 생성 작업 담당
  4. 객체 직렬화
    → Java 객체를 JSON 형태로 변환
  5. 결과 문자열 반환 및 메모리 정리

역직렬화 (readValue)

  1. readValue(String, Class<T>)
    → 일반 클래스 변환
  2. readValue(String, new TypeReference<List<T>>(){})
    → 제네릭/컬렉션 처리

3. 실전 사용 예시

3.1. 객체 → JSON 문자열

User user = new User("John", 30);
String json = mapper.writeValueAsString(user);

3.2. JSON 문자열 → 객체

String json = "{\"name\":\"John\",\"age\":30}";
User user = mapper.readValue(json, User.class);

3.3. JSON 문자열 → Map 등 복잡한 구조

Map<String, Object> map = mapper.readValue(json, new TypeReference<Map<String, Object>>() {});

4. 커스터마이징 기능

4.1. 필드명 커스터마이징

@JsonProperty("username")
private String name;

4.2. 필드 제외

@JsonIgnore
private String password;

4.3. 날짜 포맷

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;

4.4. Null 필드 제외

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

4.5. 알 수 없는 필드 무시

mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

4.6 snake_case 자동 변환

mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

5. 고급 기능

컬렉션 역직렬화 시 TypeReference 필수

List<User> list = mapper.readValue(json, new TypeReference<List<User>>() {});

JavaTimeModule 등록 (LocalDateTime 등)

mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

커스텀 Serializer

public class MaskingSerializer extends JsonSerializer<String> {
  public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
    gen.writeString("***");
  }
}
@JsonSerialize(using = MaskingSerializer.class)
private String phoneNumber;

6. Spring에서 ObjectMapper가 선호되는 이유

항목설명
기본 내장Spring Boot는 기본적으로 Jackson(ObjectMapper)을 채택
통합성@RequestBody, @ResponseBody 등과 자동 통합
성능빠른 JSON 처리 성능 (Gson 대비)
유연성다양한 포맷 지원 (JSON, YAML, XML 등)
설정 용이성전역 커스터마이징 설정이 간단함

Spring 설정 예시

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JavaTimeModule());
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    return mapper;
}

7. ObjectMapper의 사용 영역 in Spring

  • @RequestBody, @ResponseBody
    → HTTP 요청/응답 자동 변환
  • RestTemplate, WebClient
    → JSON API 데이터 처리
  • RedisTemplate, KafkaTemplate
    → 메시지 직렬화/역직렬화
  • 단위 테스트 (MockMvc) → JSON 검증 및 비교

8. 대체 가능한 JSON 처리 도구 비교

Tool장점단점
JacksonSpring 기본 내장, 빠름, 커스터마이징 강력복잡한 타입 처리 시 세팅 필요
Gson가볍고 사용법 단순성능 낮고 기능 제약 많음
Json-BJava 표준 기반실무 적용 빈도 낮음

profile
Backend Developer

0개의 댓글