Kotlin 때문에 드러난 SpringFramework DTO Validation의 문제점

less than 1 minute read

발견

  • Kotlin: Validation-Mapping
  • Java: Mapping-Validation

기존에 Java만 사용 할 때는 아무 문제가 없었다
자바 dto는 null이건 뭐건 상관이 없었으니까
일단 값을 처넣은(Mapping) 다음에 Validation을 한다

@Data
class PersonRequestDto {
    @NotEmpty
    @Size(min=1, max=30)
    private String name;
    @NotNull
    @Min(15)
    private Int age;
    @NotNull
    private String phone;
}
data class PersonRequestDto(
    @NotEmpty
    @Size(min=1, max=30)
    val name: String,
    @NotNull
    @Min(15)
    val age: Int,
    @NotNull
    val phone: String?,
)

여기서 코틀린을 자바처럼 하면 어떨게 될까?

오류가 난다
NotNull이 다 무의미해진다
Lombok의 @NonNull을 쓰는것처럼 변수 대입자체가 안되니까

그럼 어차피 안 들어가니까 상관없는거 아닌가?? 라고생각할 수 있지만
validation result 자체를 활용하려고 하거나 전체값의 데이터를 다 확인하고 싶은경우에 그게 불가능하다

해결방안

일단 현재로써는 없다

스프링에서 Validation을mapping 전에 해야하는데
이걸 바꿀 수 있을까….
힘들어보이는데

다른 프레임워크의 경우에는 request body에서validation을 처리하면 되지 않으려나

DTO에 설정되어 있는 field, annotation 스캔해서
json을 validation

코틀린에서 조금 부족하지만 쓸만한 벨리데이션툴이 있다

  • https://github.com/rcapraro/kalidation
  • https://github.com/konform-kt/konform