1차 과제를 제출하고 남은 기간이 생겨서 바로 리팩토링을 준비하고 있다. 어떤걸 준비하고 있는지 맨 아래에 적어 놓겠다.
DTO 클래스와 Entity 클래스가 가지는 Validation 책임과 범위를 찾아 학습했다
간단 회고
오늘 만큼 의미 있는 인풋을 많이 받은 날이 있을까? 또 있으면 좋겠다.
잠이 안오는게 너무 힘들다
할 일
프록시 학습 & 인터페이스 빈주입 사용 이유 학습
리팩토링
RequestBody 사용시 @Valid 가 필요한 부분이 누락 됐다. 리퀘스트의 검증이 필요한 Controller 메서드에 누락된 @Valid를 추가한다.
Request와 관련된 DTO 클래스 들에 대해 @NotNull 또는 @NotBlank 등의 Validation 관련 어노테이션을 다시 고민해서 추가하기
DTO에서의 검증은 DTO 수준에서 검증 가능한 수준으로만 체크한다. 당장 생각 드는건, Null이 들어왔다던가, 예상 범위 밖 사이즈를 넘긴다던가, 공백값이라던가, 정수값만 받아야 된다던가
아마 implementation(”org.springframework.boot:spring-boot-starter-validation”) 의존성으로 주입되는 내부 어노테이션들이 DTO수준에서 사용할 수 있는 검증 관련 어노테이션이 아닐까? 조심스레 예상한다.
Step 1 단계에서 엔티티 클래스의 검증이 필요해보이는 순간은 없었지만, 검증이 필요하다면 private으로 만들어서 어떤 검증을 하는지 외부로 노출이 안되게 설정하는게 맞는것 같다.
이 때, 필드가 JVM 컴파일 시점에서 Java Primitive Type으로 변경되면 Primitive Type의 Default Value로 설정되기 때문에 Kotlin에서 Nullable한 타입으로 지정을 해줘야 TypeMissMatchException이 뜨지 않고 Validation이 제대로 적용된다.
그리고 각 검증 어노테이션의 메세지는 정적 변수로 미리 만들어서 메모리에 단 한 번만 올라가게 설정하는 것이 효율적일 거라고 생각이 든다.