웹 개발

Lombok + Jackson 사용 시 boolean 필드 네이밍 주의(isIsActive...!?)

ultramancode 2023. 2. 15. 01:34

1. 문제 상황

 

현재 프로젝트에서 boolean타입인데 네이밍을 isActive로 하는 바람에 스웨거에서 반환하는 json에 담기지가 않아서 원인을 찾는데 엄청 고생을 했다.. 따라서 해당 내용을 정리하고자 한다.

 
 
 
  • Lombok(@Getter) 규칙:
    boolean 필드는 “is + 파스칼케이스” 를 붙여 접근자 메서드를 만든다.
    → 필드가 이미 is 로 시작하면 “is + is…”.
  • Jackson(직렬화/역직렬화)은 자바빈 규약 을 그대로 따르므로 isActive() 를 찾지만, 코드에는 isIsActive() 만 존재 ⇒ 속성 누락.
@Data
public class UserDto {
    private boolean isActive;   // 필드 앞에 이미 is가 붙어 있다
}

// 기대 get 메소드 
isActive()	

// 실제 get 메소드(Lombok이 생성)	
isIsActive()




// 결과
// Postman 응답
// 활성화 상태가 JSON에 안 보인다
{ }

2. JavaBeans 명명 규칙 vs. Lombok 규칙

 

케이스 필드 Lombok 생성 메소드 JavaBeans 기대  호환성
A boolean active isActive() isActive()
B Boolean active getActive() getActive()
C boolean isActive isIsActive() isActive()
D Boolean isActive getIsActive() getIsActive() ✔ (래퍼 클래스)

3. 대표적 해결 전략 2가지

3-1. “is” 접두사를 빼고 primitive boolean 사용

@Getter 
@Setter
public class UserDto {
    private boolean active;      // field: active
}
// 결과: isActive()
  • 가장 간단·안전.
  • API 응답(JSON)에서 "active": true 로 내려가며 직관성이 살짝 떨어질 수 있음.

3-2. Wrapper 타입(Boolean) + is 접두사 유지

@Getter 
@Setter
public class UserDto {
    private Boolean isActive;    // Wrapper 타입
}
// 결과: getIsActive() / setIsActive()
  • Lombok은 primitive가 아닌 경우 getIsActive() / setIsActive() 를 만든다.
  • JavaBeans·Jackson과 일치해 JSON 속성 isActive 가 정상 출력.
  • 단, nullable해진다. NPE 방어 필요.