인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

슬픈 두꺼비님의 프로필 이미지
슬픈 두꺼비

작성한 질문수

실전! Querydsl

조회 API 컨트롤러 개발

dto

해결된 질문

작성

·

5K

3

활용편에서 dto로 리턴해야 하는 중요성을 배웠었는데요.

dto클래스를 꼭 요청에 필요한 필드로만 구성해야 하나요?

어떤곳은 username만, 어떤곳은 age 또는 2개다

이렇게 하나의 엔티티에서 여러개의 dto를 만들면 이름짓기도 애매할텐데 엔티티랑 똑같이 dto를 만들고 필요한것만 생성자나 set하고 나머지는 null로 응답하면 문제가 있을까요?

답변 1

25

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 별님 좋은 질문입니다.

항상 유지보수에서 가장 문제가 되는 것이 바로 애매한 것입니다. 특히 같은 필드인데, 어떤 경우에는 null이고 어떤 경우에는 값이 있고 이렇게 모호하면 정말 유지보수가 어려워집니다.

그래서 API 응답 스펙이 정해지면 그 필드에 값은 항상 같은 원칙으로 반환되도록 명확하게 설계하는 것이 중요합니다.

클래스를 여러게 만들더라도, 코드가 중복되는 것 처럼 보일지라도, 명확한 것이 훨씬 더 나은 선택이라는 것이지요.

다만 API를 제공할 때 또 모든 케이스에 대응해서 만들면 API 자체가 너무 많아집니다. 그래서 고민하신 내용에서 null 값 대신에 실제 값을 채워서 반환하는 API를 제공하는 것이 좋습니다.

예를 들어서 username, age 둘다 제공하는 공통 API 하나를 여러곳에서 사용하도록 제공하는 것이지요.

실무에서 API를 설계할 때 진짜 고민은, 생각보다 너무 복잡하다는 것입니다.

어떻게 보면 제공 단위를 크게 만들어서 모든 데이터를 다 반환하는 API 하나를 만들면 될 것 같지만, 이렇게 너무 공통화해도 유지보수가 어렵고, 성능 이슈가 있습니다. 반대로 너무 각각의 케이스를 대응하도록 만들어도 API 자체가 많아져서 유지보수가 어렵습니다.

이 사이에서 적절한 단위로 API를 설계하고 제공하는 것이 묘미이지요^^!

제가 선호하는 방법은 기본 공통 API를 제공하고, 이 기본 공통 API로 해결이 안되는 특수한 경우에 한해서 별도의 API를 제공하는 방법을 선호합니다.

도움이 되셨길 바래요^^

슬픈 두꺼비님의 프로필 이미지
슬픈 두꺼비

작성한 질문수

질문하기