• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

공통 Dto validation 방법 질문입니다!!

23.08.07 10:15 작성 23.08.07 16:18 수정 조회수 376

0

1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)

  1. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

==================================================================

안녕하세요. 선생님 덕분에 많은 것을 배우고 있는 취준생입니다.

  • 현재 상황

    • 회원 정보에 대한 공통 DTO 생성 (회원 엔티티에 노출 가능한 모든 필드를 담았습니다.)

     

  • 목표

    • 공통 DTO에 validation 적용

       

  • 문제 상황

    • 공통 DTO를 사용하니 컨트롤러, 서비스 로직에 따라 조건이 달라 Bean validation 적용에 어려움을 겪고 있습니다.

      ex) 서비스 메소드 마다 member_id가 필요한 경우가 있고, 없는 경우가 있습니다.

       

  • 생각해본 해결 방법

    1. Bean validation(어노테이션)을 통해 최소한에 검증만 한 후 개별 로직안에서 추가 validation을 진행한다.

      • 가장 간단하나 로직이 지저분해질 것 같습니다.

         

    2. 공통 DTO를 validation을 따라 분리한다.

      • DTO 분리 기준이 validation이라는 점이 타당하지 않은 것 같습니다.

         

    3. DTO 생성을 별도의 팩토리로 분리하여 팩토리 내에서 validation을 진행한다.

      • DTO 생성과 검증에 대한 로직을 숨길 수 있는 장점이 있지만 DTO 수가 늘어날수록 팩토리 클래스도 많아져서 복잡도가 올라 갈 것 같습니다.

         

    4. DTO 내에 별도의 검증 메소드를 만들어 생성될 때 validation을 진행한다.

       

    5. Bean validation group을 사용한다.

     

  • 질문

    • JPA 강의에서 공통 DTO를 사용 후 예외 케이스만 분리하신다는 답변을 봤습니다. 공통 DTO에 경우 validation을 주로 어떻게 해결하시는지 궁금합니다!!

    • 공통 DTO에 회원 엔티티에 대부분 필드를 담았는데, 위에 말씀하신 공통 DTO를 잘못 이해하여 범위를 너무 크게 잡아 생긴 문제인지 혹은 Bean validation으로 풀어내려는 강박인지(?) 궁금합니다!!

읽어주셔서 감사합니다!!

답변 2

·

답변을 작성해보세요.

1

codesweaver님의 프로필

codesweaver

2023.08.10

안녕하세요. iot_김인국 님, 공식 서포터즈 코즈위버입니다. AI 답변에 더하여 답변 드립니다.

개인적인 생각으로, 클라이언트의 Form 을 받는 DTO는 공통을 사용하지 않고 Form과 DTO가 1:1로 대응하도록(즉, 폼전송 페이지가 늘어나면 DTO 객체도 같이 늘어나는) 하는게 편합니다. 질문하신 것처럼 Validation 조건이 달라질 수 있기에 이를 공통으로 묶으면 골치아파집니다.

그리고 여러곳에서 공통으로 사용하려고 하는 DTO는 덩치를 작게 줄이는 것이 유리하다고 생각합니다. 너무 많은 값을 가지고 있는 DTO는 어떤 용도로 사용하려는 객체인지 용도가 모호하고, 호출하는 입장에서도 어떤 값을 반드시 채워야 하며 어떤 값은 비워도 되는지 등 사용법을 알기 어렵습니다.

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.08.09

안녕하세요, 인프런 AI 인턴이에요.

공통 DTO에 대한 validation을 적용하는 방법으로 고민하고 계시는 것 같네요.

일반적으로는 Bean validation을 사용하여 최소한의 검증을 수행한 후, 개별 로직에서 추가적인 validation을 진행하는 방식을 추천합니다. 이렇게 하면 로직이 복잡해지는 것을 방지할 수 있습니다.

하지만 로직이 복잡해질 우려가 있으시다면, DTO 분리를 고려해볼 수도 있습니다. 즉, validation을 따로 분리된 클래스나 메소드에서 처리하는 것이죠. 이렇게 하면 DTO 생성과 검증에 대한 로직을 숨기는 장점이 있지만, DTO의 수가 늘어날 수 있는 단점도 있을 수 있습니다.

각각의 방식은 프로젝트의 크기나 구조에 따라 다를 수 있으며, 상황에 따라 가장 적합한 방법을 선택하시면 됩니다.

더 자세한 내용이 필요하다면, 구체적인 예시나 코드를 주시면 더 도움을 드릴 수 있을 것 같아요.