DTO
Data Transfer Object
계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 데이터 객체(getter & setter 만 가진 클래스)다.
DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다.
유저가 입력한 데이터를 DB에 넣는 과정
DTO는 로직을 갖고 있지 않는 순수한 데이터 객체이며, getter/setter 메서드만을 갖는다.
하지만 DB에서 꺼낸 값을 임의로 변경할 필요가 없기 때문에 DTO클래스에는 setter가 없다. (대신 생성자에서 값을 할당한다.)
Request와 Response용 DTO는 View를 위한 클래스이며 자주 변경이 필요한 클래스이다.
toEntity() 메서드를 통해서 DTO에서 필요한 부분을 이용하여 Entity로 만든다.
또한 Controller Layer에서 Response DTO 형태로 Client에 전달한다.
Entity? 많이 들어봤다.
Typeorm을 포스팅 할때 이미 다뤘었다
Entity, Dto의 차이는 뭘까
이게 Entity schema본 entity스키마에서는 DTO로도 쓸수 있게끔 설정을 해놓았다. Database를 통과하게끔 밑작업을 해놓았다
이게 DTO schema Entity()작업이 빠져있는 것을 볼 수 있다. 이건 출력을 테스트해보기 위해 만든거라 데이터베이스와 연관이 없기에 DTO설정만 해놓았다.
이렇게 직접 만들었던 Entity와 DTO를 보니 이해가 쉽게 된다
DTO는 서비스, 컨트롤러를 거쳐 브라우저까지 전달되는 정보를 담기 위해 만들어진 객체다.
Entity는 DB에 저장할 정보를 담기 위해 만들어진(이전에 다뤘던 typeorm을 이용) 객체라고 할 수 있다.
api위에서 사용되는 DTO객체는 Database를 통과할 수 없으므로 Database를 넘나들 Entity가 존재하며 Database를 통과시키기 위해 Entity를 DTO로 변환해주는 로직이 필요하다고 볼 수 있다
처음보는 DTO라는 이름...이름만 들어도 무시무시했는데 배워보니 이미 실습해본 것들이었다.(내가 이미 DTO를 만들어봤었다;) 결국 우리는 DTO와 Entity 스키마를 만들어주면 되고 이를 어떻게 활용하느냐에 달려있는 것 같다.
[DAO] DAO, DTO, Entity Class의 차이
DAO, DTO, VO 란? 간단한 개념 정리
[개념] DAO, DTO, VO 란?
[OOP] DTO, Entity와 객체지향적 사고