ModelMapper: 5개의 글
ModelMapper ? 서로 다른 클래스의 값을 한 번에 복사하게 도와주는 라이브러리로, 어떤 Object (Source Object) 에 있는 필드 값들을 자동으로 원하는 Object (Destination Object) 에 매핑 시켜주는 라이브러리다. ModelMapper 공식 문서 주로 DTO와 같은 클래스로 데이터를 받은 후 원하는 클래스(Entity)에 넣어줄 때, Getter/Setter를 이용해 필드를 복사/붙여넣기하는 작업을 거친다. 이 때, 매핑해야할 필드가 다른 경우도 빈번하다. 즉, 다른 모델의 Object를 매핑해줘야하는 작업이 발생할 수 있다. 이런 단점들을 해결하기 위한 라이브러리이다. 세팅 의존성 추가 build.gradle implementation 'org.modelmap..
ModelMapper가 많이 사용하고 사용하기 편하나 성능 이슈가 있고, 아래 URL을 통해 확인할 수 있다. https://www.baeldung.com/java-performance-mapping-frameworks 따라서, 성능 이슈에 대응하기 위해 ModelMapper 대신 MapStruct를 대신 사용한다. MapStruct 설정 build.gradle 파일에 아래 의존성 추가 implementation 'org.mapstruct:mapstruct:1.3.1.Final' annotationProcessor "org.mapstruct:mapstruct-processor:1.3.1.Final" Mapper interface 클래스 생성 아래 interface 생성시 프로젝트 빌드하는 경우 클래스명 ..
해당 글은 MapStruct Library를 실무에서 사용하기 이전에 간단하게 기록했던 예제와 장, 단점을 옮겨온 글입니다. 자바 코드로 매핑하기 어떠한 라이브러리를 사용하지 않고 직접 객체 상태 간의 매핑 로직을 구현하는 방식은 약간의 수고스러움은 있으나 ModelMapper와 같이 Reflection 기반의 라이브러리보다 안전하다. entity, dto @ToString @Getter @NoArgsConstructor public class SampleEntity { private Long id; private String name; private String email; private Long age; private List sampleInfo; private String value; @Builde..
ObjectMapperUtils.java package com.wemakeprice.sticker.util; import org.modelmapper.ModelMapper; import org.modelmapper.convention.MatchingStrategies; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; public class ModelMapperUtil { private static final ModelMapper modelMapper; /** * Model mapper property setting are specified in the following block. * Defaul..
Entity 클래스란 JPA에서 실제 데이터베이스의 테이블과 매칭되는 클래스입니다. JPA를 사용하면서 Entity 클래스를 작성하였고, 프로젝트 초기에는 Entity로 Repository 뿐만 아니라 Service, Controller 영역까지 사용하였습니다. Entity를 화면에 띄우는 데까지 사용하다 보니 양방향으로 연결된 엔티티는 순환 참조 문제가 발생하였고, 다른 Entity를 참조하고 있는 경우 현재 Entity 뿐만 아니라 다른 Entity에도 원치 않는 변경이 일어나거나, 무거운 양의 데이터를 들고 여러 영역을 오가는 것이 성능 상에도 좋지 않을 것으로 생각하였습니다. 따라서 DB Layer에는 Entity, View Layer에서는 DTO를 사용하여 역할을 분리하여 Entity와 DTO가..