-
Java JSON 처리 실전 시리즈 3화 – 객체를 JSON으로 변환하기: Jackson과 주요 어노테이션 활용법기술과 산업/언어 및 프레임워크 2025. 5. 13. 16:04728x90
Spring Boot에서 Jackson으로 Java 객체를 JSON으로 변환할 때 사용하는 필수 어노테이션 @JsonProperty, @JsonIgnore, @JsonInclude의 실제 사용법과 예제를 소개합니다.
Spring Boot 환경에서는 컨트롤러에서 반환하는 객체가 자동으로 JSON으로 변환됩니다. 이 변환 과정은 내부적으로 Jackson의 ObjectMapper가 담당하며, 우리가 원하는 형태로 JSON 구조를 변경할 수 있도록 다양한 어노테이션을 제공합니다.
이번 글에서는 가장 실무에서 많이 쓰이는 직렬화 제어 어노테이션에 대해 알아보고, 예제와 함께 활용법을 정리합니다.
1. @JsonProperty – JSON 필드명 변경
기본적으로 Java의 camelCase 필드는 JSON에서는 동일한 이름으로 변환됩니다. 그러나 특정 필드를 snake_case로 보내야 하는 경우 @JsonProperty를 활용할 수 있습니다.
public class User { @JsonProperty("user_name") private String userName; private int age; // 생성자, getter, setter 생략 }
결과
{ "user_name": "홍길동", "age": 30 }
특히 외부 API와 통신할 때 필드명을 맞춰야 할 경우 매우 유용합니다.
2. @JsonIgnore – 특정 필드를 직렬화에서 제외
보안 정보나 클라이언트에 노출되면 안 되는 데이터를 제외할 때 사용합니다.
public class User { private String userName; private int age; @JsonIgnore private String password; // 생성자, getter, setter 생략 }
결과
{ "userName": "홍길동", "age": 30 }
password 필드는 직렬화 시 포함되지 않습니다.
3. @JsonInclude – null, 빈 값 필드 제외
불필요한 null 값을 포함시키지 않으려면 @JsonInclude를 사용할 수 있습니다.
@JsonInclude(JsonInclude.Include.NON_NULL) public class User { private String userName; private Integer age; private String email; // 생성자, getter, setter 생략 }
사용 예
User user = new User("홍길동", 30, null); String json = objectMapper.writeValueAsString(user);
결과
{ "userName": "홍길동", "age": 30 }
email 필드는 null이므로 제외됩니다.
전역으로 설정하고 싶다면 application.yml에서 default-property-inclusion: non_null을 설정할 수도 있습니다.
4. 기타 유용한 직렬화 어노테이션
어노테이션 설명
@JsonFormat 날짜 및 시간 포맷 지정 @JsonUnwrapped Nested Object의 필드를 부모 객체로 풀어줌 @JsonAlias 역직렬화 시 여러 이름을 허용 @JsonFormat 예시
public class User { private String userName; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createdAt; // 생성자, getter, setter 생략 }
결과
{ "userName": "홍길동", "createdAt": "2025-05-09 14:00:00" }
날짜 포맷은 글로벌 설정보다 클래스에 지정한 포맷이 우선 적용됩니다.
5. 실전: Spring Boot 컨트롤러 예시
@RestController public class UserController { @GetMapping("/user") public User getUser() { User user = new User(); user.setUserName("홍길동"); user.setAge(30); user.setPassword("secret"); // @JsonIgnore로 제외됨 user.setEmail(null); // @JsonInclude로 제외됨 return user; } }
결과
{ "userName": "홍길동", "age": 30 }
결론 및 팁 요약
- @JsonProperty: JSON 필드명 변경
- @JsonIgnore: 특정 필드 직렬화 제외
- @JsonInclude: null 또는 빈 값 제외
- 이 어노테이션을 조합하면 불필요한 DTO를 만들 필요 없이 객체 직렬화 포맷을 깔끔하게 관리할 수 있습니다.
다음 회차 예고
4화에서는 JSON을 Java 객체로 역직렬화할 때 발생할 수 있는 문제와 해결법을 알아봅니다. 특히 LocalDate, Enum, Optional과 같이 기본 타입이 아닌 필드에 대한 역직렬화 대응법을 실전 예제로 다룹니다.
728x90'기술과 산업 > 언어 및 프레임워크' 카테고리의 다른 글
Spring Boot 시리즈 30편 – Spring Batch: 대용량 데이터 처리 및 배치 시스템 설계 실전 가이드 (0) 2025.05.13 전자정부 표준프레임워크 시리즈 8화 – 로그인 인증 흐름 분석: Session, Interceptor, Spring Security 적용까지 (0) 2025.05.13 JHipster 시리즈 5화 - React 프론트엔드 커스터마이징 실전 가이드 (0) 2025.05.12 Python 마스터 시리즈 9화 – 예외 처리 구조: try, except, finally의 설계 원칙과 실전 활용 (0) 2025.05.12 NestJS 마스터 시리즈 13화. TypeORM과 데이터베이스 연동 전략 (0) 2025.05.12