Spring boot를 활용한 프로젝트 준비나 작업들을 진행해가면서 JPA를 활용하게 되었는데, 그러다 보니 JPA에서 사용하는 Hibernate, Proxy를 이해해나가다가 Entity와 Dto를 분리해야 한다는 사실을 알게 되었고 왜 분리해야 하는지에 대해 정리하기로 생각해 이 글을 쓰고있다.
일단 분리하는 이유에 대해 말하기 전에 Entity와 Dto에 대해 간단하게 정의를 하고 넘어가겠다.
DTO(Data Transfer Object) : 클라이언트와 서버 간 데이터 전송을 위해 설계된 객체
Entity : 데이터베이스에 저장되는 데이터 객체로, 데이터베이스와 직접적으로 연결
Entity와 Dto의 분리 이유
🙂Entity의 보호, 보안
사용자들에게 Entity를 공개한게 된다면 테이블을 공개하는 것이나 다름이 없다. 그렇게 된다면 사용자들에 의해서 원치 않는 상황에 자원의 속성이 변경될 수도 있게 되고 보안상으로도 문제가 생길 수 있기 때문이다.
그렇기에 Entity 에서는 setter를 쉽게 사용하면 안되기 때문에 Dto에서 setter를 사용하는 것이다.
🙂필요한 데이터만 골라낼 수 있다.
Entity를 직접 반환하게 되면 Entity에 존재하는 모든 데이터가 반환된다.
그렇게 되면 트래픽에도 문제가 생길 수 있을 뿐더러 사용자가 필요한 데이터만 골라내기가 어려워지게 된다.
그래서 Dto를 활용해 사용자에게 필요한 데이터만 고르고, 필요한 속성을 추가하여 보내줄 수 있다.
🙂Entity를 그대로 view에 넘길 때
view의 요구사항 변화가 Model에 영향을 끼치기 쉽다.
유저에게 보여줘야 할 정보가 바뀌면, 엔티티를 수정해야 한다.
🙂엔티티 구조 변경 시 발생하는 문제
예를 들어 요구사항이 변경되어 엔티티의 필드 이름이 변경 될 경우, API 스펙이 변경되어 추가 작업이 요구된다.
이는 효과적인 유지 보수가 어려워져 시간과 비용이 증가할 수 있다.
, https://hstory0208.tistory.com/entry/SpirngJPA-Dto와-Entity를-분리해서-사용하는-이유