Programming-[Backend]/SpringBoot

[링크][중요] Mapstruct 라이브러리, DTO와 Entity 검증의 주체가 되야하는 부분

컴퓨터 탐험가 찰리 2021. 9. 12. 10:05
728x90
반응형

 

 

1. Mapstruct 라이브러리

 

DTO 와 Entity간 변환을 쉽게 해주는 라이브러리다.

 

[1] [보통 사용자의 입력값을 PO(Parameter Object)로 받아와서 DTO로 변환한다. 그리고 DTO의 값들을 Entity에 하나씩 넣어준 뒤 DB에서 Entity를 save 또는 update 하는 방식을 사용한다. 이 과정에서 DTO를 Entity로 바꿀 때, 또는 반대로 Entity를 기반으로 DTO로 바꿀 때 사용한다.]

 

필드값이 100개인 Entity의 100개 필드값을 DTO를 통해서 하나씩 전달해줄려면, Entity.setXxx(DTO.getXxx) 등으로 100개의 항목을 작성해줘야할 수도 있다. 그런데 Mapstruct의 @Mapper 방식을 사용하면 한줄만으로 이런 작업을 끝낼 수도 있다.

 

실제 사용 시에는 Entity에서 정의한 필드명과 DTO에서 정의한 필드명이 같아야 한다. 다르다면, Mapper 클래스 위에 @Mapeer(source="source.xxx", target="xxx")라는 식으로 필드명이 바껴서 매핑되어야 함을 명기해주어야 한다.

 

Mapstruct가 아니라 ModelMapper도 있는데, ModelMapper는 리플렉션을 발생시켜서 처리량이나 속도가 Mapstruct에 비해 뒤떨어진다고 한다.

 

 


 

2. DTO와 Entity 중 검증의 주체가 되는 부분

 

[1]의 과정에서, 사용자의 입력값을 검증해야하는 부분은 DTO이다. Entity는 본래, DB layer로서 DB와 통신하는 역할을 담당한다. 참조 2에 따르면, Validation 역할까지 담당하면 과도한 측면이 있고, API별로 유효성 검증을 할 수 없어 유연한 검증이 불가능하다. CRUD 중, 어떤 객체를 Create 할때와 Update 할때는 사용되는 필드명도 다를뿐더러 검증 방식도 다를 수 있기 때문이다.

 

클라이언트의 입력값인 PO -> Controller에서 Mapper로 DTO로 변경 -> Service에서 DTO값들을 검증 -> DTO의 값들을 Mapper로 Entity로 매핑(set)

 


 

링크

 

1. Mapstruct 라이브러리

https://huisam.tistory.com/entry/mapStruct

 

2. DTO Entity 검증 주체

https://yeon-kr.tistory.com/170

728x90
반응형