Inflearn Community Q&A
Dto와 Entity 사용 관련 질문
Written on
·
10
0
안녕하세요, 57강 관련 질문입니다.
Dto 클래스를 완전히 없애버리고 Entity만 사용하는 건 불가능한 건가요? Entity가 DB 관련 어노테이션을 가지고 있다는 점을 제외하면 Dto 클래스와 굉장히 유사한 형태인데, 이 두 개를 왜 꼭 따로 정의하고 사용해야 하는 것인지 이해가 잘 안 갑니다!
Answer 2
0
DTO 없이 Entity만 사용하는 건 기술적으로는 가능합니다.
하지만 실무에서는 거의 분리해서 사용합니다.
이유는 둘의 역할이 다르기 때문입니다.
Entity: DB 테이블과 매핑되는 객체 (저장용)
DTO: API 요청/응답을 위한 객체 (전달용)
겉보기엔 비슷하지만, 목적 자체가 다릅니다.
Entity를 그대로 사용하면 다음과 같은 문제가 생깁니다.
API 스펙이 DB 구조에 종속됨
→ password 같은 민감 정보가 그대로 노출될 수 있음요구사항 변경에 취약
→ API 변경이 곧 DB 구조 변경으로 이어짐성능 문제 (Lazy Loading)
→ 연관 객체까지 불필요하게 조회 (N+1 문제)순환 참조 문제
→ JSON 변환 시 무한 루프 발생 가능데이터 제어 어려움
→ 클라이언트가 의도하지 않은 필드까지 수정 가능
DTO를 사용하면
필요한 데이터만 선택적으로 전달 가능
보안 강화 (민감 정보 숨김)
계층 분리로 유지보수성 향상
성능 최적화 가능
이라는 장점이 있습니다.
정리하면
Entity는 “DB 중심 객체”,
DTO는 “API 중심 객체”입니다.
비슷하게 생겼지만 역할이 다르기 때문에,
실무에서는 분리하는 것이 사실상 필수에 가깝습니다.
다음 글도 참고하세요.
"DTO 없이 Entity만 쓰면 안 되나요?" 실무 기준으로 답해드립니다.
https://hoazzinews.tistory.com/186
처음엔 헷갈릴 수 있는 부분이지만, 이런 고민을 하신다는 것 자체가 이미 좋은 방향으로 가고 있다는 의미입니다.
앞으로도 궁금한 점 있으면 편하게 질문 주세요!
0
안녕하세요, 인프런 AI 인턴입니다. 돌돌님.
DTO(Data Transfer Object)와 Entity의 역할에 대해 궁금해하시는 점 충분히 이해합니다. 두 개의 클래스가 유사하게 보일 수 있지만, 각각의 역할과 목적에 따라 구분되어 사용됩니다.
DTO와 Entity의 차이
Entity:
- 데이터베이스와 직접적으로 매핑되며, 영속성 컨텍스트에 의해 관리됩니다.
- DB와의 CRUD 작업(저장, 조회, 수정, 삭제)을 처리하기 위한 객체입니다.
- 데이터베이스 스키마와의 매핑을 위해 @Entity, @Table 등의 JPA 어노테이션이 사용됩니다.
- 데이터베이스와 직접적으로 매핑되며, 영속성 컨텍스트에 의해 관리됩니다.
DTO:
- 계층 간(Controller와 Service, 외부 시스템 등)의 데이터 전달을 위해 사용됩니다.
- Entity는 비즈니스 로직을 포함하므로, 데이터가 노출되는 부분(예: API 응답)에 직접 사용하지 않고, DTO로 변환하여 보완할 수 있습니다.
- 다양한 뷰나 API 인터페이스 요구사항에 맞게 유연하게 변경될 수 있습니다.
- 계층 간(Controller와 Service, 외부 시스템 등)의 데이터 전달을 위해 사용됩니다.
왜 둘 다 사용하는가?
보안 및 캡슐화: DTO는 민감한 정보를 숨기거나 특정 필드만 노출하도록 함으로써 보안을 강화합니다. 또한, 서비스 로직이나 데이터베이스 스키마 변경이 API 소비자에게 영향을 주지 않도록 데이터를 캡슐화합니다.
유지보수성: 비즈니스 로직이 복잡해지고 요구사항이 변할 때, Entity와 DTO의 역할을 분리하면 코드의 유지보수성이 높아집니다. 변경이 발생할 경우 DTO나 Entity를 따로 수정할 수 있는 유연성을 제공합니다.
성능 및 단일 책임 원칙: 데이터베이스와 가까운 Entity와 데이터 전송 책임이 있는 DTO를 분리함으로써 각 클래스가 자신의 책임을 크게 초과하지 않도록 합니다.
이렇게 정의된 개념들은 명확한 경계를 설정하여 코드의 안정성과 유지보수성을 높이는 데 기여합니다.
관련해서 더 알아보고 싶다면 다음 링크의 내용을 참고하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




