dto를 알기전에 JPA와 함께 간략히 알아보자.
DB와의 상호관계를 간편하게 처리할 수 있도록 해주는 프레임워크이다. 하지만 엔티티 클래스(Domain)를 직접 사용하는 경우 비즈니스 로직까지 함께 노출될 위험성이 있다.
이를 해결하기 위해 JPA에서는 dto(Data Transfer Object)를 사용한다.
계층간 데이터를 전송하기 위한 객체이다. 로직을 갖고 있는 엔티티와는 달리 순수한 데이터 전달용 객체이다.
dto를 사용한다면 데이터베이스와의 상호작용을 추상화하면서 API요청에 따라 엔티티를 연결해주는 역할을 한다.
아래는 예시 코드이다.
test.java
==========================================
우리 코드에서 dto가 Service단에만 쓰는 이유가 다른 단에서는 Service단에서 사용된 dto를 사용하기 때문??
Service단을 중심으로 DB ↔ Service는 엔티티, Service → Controller는 DTO를 사용
자동으로 매핑시켜주는 ModelMapper와 MapStruct를 사용
ModelMapper는 위에서 언급한 대로 엔티티와 DTO 간에 변환할 때 자동으로 매핑시켜주는 라이브러리입니다.
매핑해줄 클래스에는 setter가 있어야 하고 매핑이 되는 클래스에서 getter가 있어야 사용 가능합니다.
기본적으로 ModelMapper에서 제공해주는 map메서드를 이용하여 변환할 수 있고 클래스 내부에 있는 변수들의 이름을 분석하여 자동 매핑시켜주는 방식입니다.
http://modelmapper.org/getting-started/
MapStruct는 엔티티와 DTO 간에 변환할 때 자동으로 매핑시켜 변환되도록 도와주는 라이브러리입니다.
매핑해줄 클래스에는 setter가 있어야 하고 매핑이 되는 클래스에는 getter가 있어야 사용 가능합니다.
또한 추가적인 인터페이스를 작성해야 되고 maven install을 통해 작성된 인터페이스에 맞는 구현 클래스도 만들어져 있어야 합니다.
https://jforj.tistory.com/93
request요청을 받아 dto를 entity로 변환