• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

안녀하세요 질문이 있습니다.

22.07.07 20:08 작성 조회수 257

4

안녕하세요 강의 잘보고 있습니다.

궁금증이 있어 질문 남기게 되었습니다.

예시 상황)

1)게시글 목록 보기 

-글 제목

-글 작성자

-글 작성날짜

 

2)게시글 상세보기

-글 제목

-글 작성자

-글 내용

-글 작성날짜

-조회수

 

1.각 작업에서 위와 같은 데이터를 내려준다고 가정할 때, 실무에서는 응답용 DTO를 각각 만들어서 사용하는 편인가요??

(위와 같이 간단할 경우와 필드수가 무수히 많을 경우 2가지 상황 모두에 대한 말씀을 해주시면 감사하겠습니다)

 

1-1 . 만일 따로 만들지 않을 경우.

 

예시 상황)

private String 제목;

private String 내용;

private String 작성자;

pirvate LocalDateTime 작성날짜;

private Integer 조회수;

 

만일 위와 같이 하나의 DTO로 처리할 경우,

목록 보기에서는 조회수와 내용이 필요하지 않습니다.

이때 postman으로 조회해보면 , 내용 필드와 조회수 필드는 필요하지 않기 때문에 초기화 해주지 않았으므로 , 

필드는 표시되고 값은 null로 표시됩니다.

혹여 이때 , 클라이언트 입장에서는 이게 필요한 데이터이지만 , 선택적값이라서 null인건가와 같은 착각을 일으키지 않을까 생각이 듭니다.

이럴 경우 어떤식으로 대처하시는지요??

 

 

 

답변 1

답변을 작성해보세요.

1

안녕하세요. 호돌맨입니다.
질문을 남겨주셔서 감사합니다.

> Q1. 각 작업에서 위와 같은 데이터를 내려준다고 가정할 때, 실무에서는 응답용 DTO를 각각 만들어서 사용하는 편인가요??

목록보기, 상세보기 응답 클래스를 분리할지 말지는 회사나 팀마다 다릅니다.
저는 예시에 있어서 (처음에는)하나의 클래스로 만듭니다. 같은 도메인(게시글)을 어떤 모양(html)으로 보여줄지에 대한 정책만 다르기 때문입니다. 따라서 게시글 응답 클래스를 Json형태로 응답하고 클라이언트 측에서 받아서 가공후 사용하기로 협의합니다.
다만 시간이 지남에 따라 목록보기와 상세보기의 요구사항이 명확히 달라지면 응답 클래스를 두 개로 분리합니다.

하지만 필드수가 무수히 많을 경우에는 '하나의 클래스 vs 두 개의 클래스'를 떠나 여러개의 필드를 하나의 클래스로 분리할 수 있을지 생각해야합니다. 예를들어 [String 작성자] 같은경우에는 User Class로 분리할 수 있습니다.
하나의 클래스에 필드가 너무 많아지면, 분리가 덜 되었는지 의심해볼 필요가 있습니다.

> Q2. 클라이언트측에서 사용하지 않는 필드는 어떻게 처리 해야할까?

말씀하신 예제에서는 클라이언트측에서 내용, 조회수 필드가 사용되지 않는다고 말씀하셨지만 클라이언트측 요구사항은 수시로 변하게됩니다.  그런 변화에 따라 서버쪽 응답 클래스 정책을 변경하게 되면 번거로운 일이 됩니다.
실무에서는 클라이언트측에서 목록보기, 상세보기 뿐만 아니라 저런 게시글 도메인을 수십개이상 가져다 써야하는 상황이 발생합니다. 예를들어 최근 게시글보기, 인기게시글 보기, 운영자추천 게시글보기 등등등
그러므로 게시글이라는 도메인하나의 응답 클래스를 정의해서 모든 필드를 담는걸 추천드립니다. 그리고 위에 말씀드린대로 목록보기, 상세보기 요구사항이 많이 달라지게 되면 그때 응답 클래스를 분리하는걸 추천드립니다.

궁금한 거 있으시면 언제든 질문주세요
감사합니다.

dhfl0710님의 프로필

dhfl0710

질문자

2022.07.07

답변 정말 감사드립니다.

답변에 헷갈리는 부분이 있어 댓글 남깁니다.

2번 문답에서 클라이언트 측에서의 요구사항이 수시로 변하니 , 하나의 응답 클래스에 모든 필드를 담는 걸 추천한다고 하셨는데 , 그 의미가  예제를 예시로 들면 

목록보기같은 부분에서도 어떻게 요구사항이 변동될지 모르니 사용될지 안될지 모르는 조회수 같은 필드들도 초기화하여 응답하는 걸 추천한다는 말씀이신가요??

네. 맞습니다!

dhfl0710님의 프로필

dhfl0710

질문자

2022.07.09

감사합니다!!