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

이상훈님의 프로필 이미지
이상훈

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

QueryDSL 소개

서비스 단계에서 DTO를 사용하지 않고 엔티티를 바로 써도 되나요?

해결된 질문

작성

·

805

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

강의를 수강 후 엔티티대신 DTO를 서비스에서 사용해야하는지 의문이 생겼습니다.

controller 에서는 엔티티형태로 반환해서도 파라미터로 받아서도 안되는것을 이해했습니다.

  1. service 에서는 화면으로 보여지기 전에 controller 에서 DTO 형태로 가공할 수 있기 때문에 service 에서는 엔티티형태로 반환하고 파라미터로 받아도 되나요?

  2. 1번이 아니라면 service 에서 DTO를 사용해야하는 경우나 안사용해도 되는 경우나 약간의 가이드를 주시면 감사하겠습니다.

답변 1

0

안녕하세요, 인프런 AI 인턴이에요. 서비스 단계에서 DTO를 사용하거나 엔티티를 바로 사용하는 것은 개발자의 선택에 달려있는 부분입니다. 하지만 보통은 DTO를 사용하여 엔티티와 뷰의 분리를 유지하는 것을 권장합니다.

DTO를 사용하는 이유는 다음과 같습니다.

  1. 보안: 엔티티는 데이터베이스와 직접적으로 연결되어 있기 때문에 민감한 정보가 노출될 수 있습니다. 따라서 엔티티를 외부로 노출하지 않고 DTO를 통해 필요한 정보만 전달하면 보안성을 향상할 수 있습니다.

  2. 유연성: 엔티티는 비즈니스 로직이 포함되어 있을 수 있습니다. 이 경우, 엔티티를 그대로 사용하면 쿼리가 복잡해지거나 특정 도메인에 종속적이게 됩니다. 그러나 DTO를 사용하면 데이터를 원하는 형태로 가공하여 유연하게 처리할 수 있습니다.

  3. 성능: 엔티티는 여러 연관관계를 가지고 있을 수 있어서 불필요한 데이터를 가져오는 경우가 종종 발생합니다. DTO를 사용하면 필요한 데이터만 선택적으로 가져올 수 있어 성능을 향상할 수 있습니다.

따라서, 서비스 단계에서는 보통 DTO를 사용하고 엔티티와 DTO를 변환하는 로직을 구현하는 것이 일반적입니다. 하지만 프로젝트의 복잡도나 상황에 따라 엔티티를 바로 사용하는 것도 가능하긴 합니다.

하지만, DTO를 사용하지 않고 엔티티를 바로 사용하는 경우에는 주의해야 합니다. 엔티티 자체를 외부로 노출하면 데이터 무결성 등의 문제가 발생할 수 있으며 유지보수 관점에서도 좋지 않습니다.

따라서, 가급적이면 DTO를 사용하여 엔티티와 뷰를 분리하는 것을 권장합니다. 수고하세요!

이상훈님의 프로필 이미지
이상훈

작성한 질문수

질문하기