서버에서 응답 데이터를 반환할때 ResponseDTO 를 만들었다.

Response 클래스는 ResponseMetadata 클래스의 필드를 상속받고 있다. 이 상태에서 Lombok의 @Getter를 사용하여 객체를 반환하면 아래와 같은 순서로 JSON이 생성된다.

하지만 나는 success, status, code, message, data 순으로 반환되는 것이 프론트와의 소통에 더 직관적이라고 생각했다. 성공 여부를 첫 줄에서 확인하도록 하면 응답 흐름을 이해하기 쉽기 때문이다.
get메서드명() 을 통해 Json 응답 데이터 순서를 조정 할 수 있다고 한다.
public Boolean getSuccess() {
return success;
}
public HttpStatus getStatus() {
return status;
}
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
public T getData() {
return data;
}
이렇게 Json에 원하는 순서대로 get메서드() 를 적어주면 반환 시 작성한 순서대로 데이터를 반환 받을 수 있다.
하지만 나는 부모 클래스의 필드를 private 으로 선언했기 때문에 위 방법은 적절하지 않았다.
그래서 찾은 방법은 @JsonPropertyOrder 에노테이셔늘 사용하는 것이다. 해당 에노테이션은 작성한 매개변수의 순서와 상관 없이 에노테이션 내부에 작성한 순서대로 Json을 반환한다.
@Getter
@JsonPropertyOrder({"success", "status", "code", "message", "data"})
public final class Response<T> extends ResponseMetadata {
private final T data;
...
}
부모 필드까지 자식 클래스에서 한 번에 순서를 지정할 수 있어 이 방법을 선택했다.

원하는 순서대로 잘 반영이 된 것을 확인할 수 있다.
Lombok이 개발하면서 편한건 맞지만 보일러 플레이트가 많으니까 과연 이게 정답일까? 라는 생각이 든다. 데이터를 원하는 순서대로 표현하고 싶으면 get메서드를 작성해서 순서를 임의로 설정할 수 있다. 하지만 그러면 해당 클래스에서는 @Getter 를 사용하지 않는게 좋아 보인다.
일단 @Getter 대신 get메서드를 구현하면 해당 클래스가 코드가 많아진다.
근데 이런 생각을 하다가 문득 그럼 Lombok을 사용하지 않아도 되지 않을까? 라는 생각이 든다. Lombok도 결국 외부 라이브러리니까 이거에 대해 의존성이 생기는 거니까 의존성을 없애는 쪽이 좋지 않을까? 라는 생각이 문득 든다.
그냥 고민이다.