안녕하세요! 현재 호돌맨 요절복통 개발쇼 강의를 시청하면서 토이프로젝트를 만들다가 궁금증이 생겨서 이렇게 질문드립니다. 🙇🏻🙇🏻🙇🏻🙇🏻

퀴즈라는 기본 엔티티에 주관식 , 객관식 , 서술형 들을 JPA 상속관계(싱글테이블)로 설정해둔 상황인데

이러한 상황에서 request , edit , response 클래스를 각각 자식 엔티티마다 만들어줘야하는 건지 기존 Quiz 엔티티가 사용하는 Request , Edit , Response 에 자식 엔티티들의 필드를 추가해줘야하는 건지 어느 방법으로 진행해야하는지 확실히 알 수 없어서 이렇게 질문 드립니다 🙇🏻🙇🏻🙇🏻🙇🏻🙇🏻🙇🏻🙇🏻🙇🏻🙇🏻🙇🏻🙇🏻🙇🏻

전자의 경우 컨트롤러에서 받는 파라미터가 달라서 컨트롤러 메서드 추가 → 말도 안되는 프론트엔드에서의 url 분리로 이뤄지기에 후자의 방법이 나아보이는데

만약 후자의 방법으로 할 경우 (자식 엔티티들의 필드를 추가하는 경우) 데이터 검증을 어떻게 진행해야하는 지도 궁금합니다

ex ) 객관식 문제엔 보기 필드가 필수이기 때문에 해당 필드에 @NotBlank를 설정한다면 , 주관식이나 서술형 문제를 저장할 때 오류가 발생할 것을 보입니다.( 주관식이나, 서술형 문제엔 보기 필드 데이터가 필요 없음 )

@Entity
@Getter
@NoArgsConstructor
@DiscriminatorColumn(name = "QTYPE")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class Quiz extends BaseTime {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "QUIZ_ID")
    private Long id;

    @Enumerated(EnumType.STRING)
    private Category category;

    private String name;

    @Lob
    private String answer;

    @Builder
    public Quiz(Category category, String name, String answer) {
        this.category = category;
        this.name = name;
        this.answer = answer;
    }
@Entity
@DiscriminatorValue("interview")
public class InterviewQuiz extends Quiz {

    private String keyword;

}
@Entity
@DiscriminatorValue("multiple")
public class MultipleChoiceQuiz extends Quiz {

    private String example1;
    private String example2;
    private String example3;
    private String example4;
    private String example5;

}
@Entity
@DiscriminatorValue("short")
public class ShortFormQuiz extends Quiz{

}
// QuizRequest 클래스 

package com.toystudy.quiz.request;

import com.toystudy.annotation.ValidEnum;
import com.toystudy.quiz.domain.Category;
import lombok.Builder;
import lombok.Getter;

import javax.validation.constraints.NotBlank;

@Builder
@Getter
public abstract class QuizRequest {

    @ValidEnum(enumClass = Category.class, message = "제대로된 카테고리가 입력되지 않았습니다.")
    private Category category;
    @ValidEnum(enumClass = Qtype.class, message = "문제유형이 설정되지 않았습니다.")
    private Qtype qtype;
    @NotBlank(message = "문제 이름이 입력되지 않았습니다.")
    private String name;
    @NotBlank(message = "정답이 입력되지 않았습니다.")
    private String answer;

    private String example1;
    private String example2;
    private String example3;
    private String example4;
    private String example5;
    private String keyword;

}

// 퀴즈 저장
@PostMapping("/quizzes")
public void saveQuiz(@RequestBody @Valid QuizRequest request) {
    quizService.saveQuiz(request);
}

// 퀴즈 수정
@PatchMapping("/quizzes/{quizId}")
public void updateQuiz(@PathVariable Long quizId, @RequestBody QuizEdit quizEdit) {
    quizService.update(quizId,quizEdit);
}