-
스프링 : DTO를 사용하는 이유백엔드 : 서버공부/Spring 2024. 3. 7. 15:47728x90
애플리케이션을 개발할 때, 데이터를 UI에서 서버로, 서버에서 DB로 전달해야 하는 경우가 자주 있습니다. 이러한 경우, 직접 엔티티를 사용하여 데이터를 전달하는 것이 아니라, DTO를 사용해야 하는 여러 가지 이유가 있습니다.
1. API 스펙의 안정성
그 중 가장 큰이유는 API 스펙의 안정성입니다. 엔티티를 그대로 api에서 사용할 경우 엔티티의 수정이 api의 스펙 변화로 이어지게 됩니다.
이렇게 되면 api를 사용해 개발하는 클라이언트측에서 개발중 api가 작동하지 않는 문제를 경험할 수 있습니다.
2. 유연한 API 개발
또 다른 이유 하나는 유연한 API의 개발이 있겠습니다. 클라이언트의 요구 사항은 시시각각 변할 수 있습니다. 클라이언트 측에서 필요로 하는 데이터 형태가 변하더라도, DTO를 통해 이를 유연하게 대응할 수 있습니다. DTO를 사용함으로써, API 스펙을 수정하는 것이 데이터베이스 스키마 변경으로 이어지는 것을 방지할 수 있습니다.
3.엔티티의 순수성 유지
실무에서는 같은 엔티티에 대해 API가 용도에 따라 다양하게 만들어지는데, 한 엔티티에 각각의 API를 위한 프레젠테이션 응답 로직을 담기는 어렵습니다. 예를 들어 JSON데이터를 필터링하기위해 엔티티 자체에서 @JsonIgnore같은 로직 처리를 한다면
다른곳에서 같은 엔티티를 통해 다른 조회작업을 할때 문제가 발생합니다. 따라서 DTO클래스를 별도로 만들어 관리하는 것이 좋습니다.
엔티티에 @JsonIgnore이나 @NotEmpty와 같은 작업을 해두는 것이 아니라 DTO를 만들어 따로 로직을 처리하는 것이 유지 보수 측면에서 유리하겠습니다.
결국은 각각의 계층의 관심사를 분리하는것이 핵심입니다.
데이터베이스와의 통신을 담당하는 엔티티(Entity)와 클라이언트에 데이터를 전달하는 API는 각각의 목적을 최적화하는 것에 집중되어야합니다. 다시 말해서 엔티티는 데이터의 영구 저장을 위해 최적화되어야 하며, API는 사용자 인터페이스(UI) 또는 외부 시스템에 맞춰진 데이터 전달을 목적으로 합니다. 이 두 계층 간의 관심사가 서로 다르기 때문에, DTO를 활용하여 이들을 분리하는 것이 매우 중요합니다.
'백엔드 : 서버공부 > Spring' 카테고리의 다른 글
<스프링 기초 - 자바> 2차원 배열 정렬 (0) 2024.05.23 레디스 도입하기 [기초] (0) 2024.05.05 스프링 : 세터(setter) 사용시 문제점 (0) 2024.03.02 스프링 : BindingResult 를 통한 에러 처리해보기 (0) 2024.02.19 스프링 : Java 스트림의 map() 메서드 사용 (1) 2024.02.13