Swagger에서 Record class 스펙을 표현하지 못하는 이슈 대응

Tags
이슈대응

문제점

  • 프론트 분들과 API Request와 Response 스펙을 공유하기 위해 Swagger를 도입하였으며, 해당 API에 대한 정보중 Record를 사용하는 Dto 객체 스펙을 표현하는데 있어 아무런 스펙정보를 나타내지 않는 이슈를 맞이했습니다.
Code
notion image
Swagger
notion image

원인

  • record Dto 객체를 class로 변경하니 dto에 대한 스펙을 잘 표현했습니다. (getter 프로퍼티 포함)
  • 결국엔 build 된 record를 분석하던 도중 getter에 대한 프로퍼티 메소드를 제공하지 않고 기본적으로 ${멤버변수}() 메소드를 getter처럼 사용하고 있어서 Swaager에서 스펙 표현을 못해주는것이 원인이라고 판단했습니다.
notion image

해결

getter property 메소드를 직접 구현함으로써 Swagger에 DTO Spec을 잘 보여줄 수 있었습니다.
notion image
notion image
 
 
자바 버전을 업하여 불변 객체를 만들기 위해 도입된 record 객체가 Swaagger로 인해 getter property를 일일히 작성하는 것은 팀원들과 상의 후 결국 도입하지 않았습니다. [@ParameterObject 를 사용하여 표현하고자 하는 부분에는 적용.]
  • 전반적인 의견은 불변 객체가 더 우선순위이고 API Spec 표현 때문은 적절치 못한다고 판단되었습니다.