본문 바로가기
server

ModelMapper

by Younji! 2019. 6. 25.

Entity 에서 DTO로 매핑해줄 때 사용할 라이브러리를 찾다가 ModelMapper를 사용하였습니다.

source -> destination으로 matching strategy 나 다른 설정을 통해서 매칭시켜 암묵적으로 매핑시켜줍니다.

 

그 중에 기록하고자 했던 것은 Property Mapping 입니다.

대부분의 Object 매핑은 ModelMapper에서 해주게 되는데 조건이 존재하거나 컨버팅, DeepMapping을 원하는 경우에는 PropertyMapping을 사용해 클래스를 명시적으로 정의하고 source, destination 간의 매핑을 이뤄지게 합니다.

public class Source {
  private long id;
  private String name;
  private String value;
}

public class Destination {
  private Inner inner;
  private String destinationName;
  private String value;
    
  public static class Inner {
    private long innerId;
  }
}

참고로 필자는 MatchingStrategies.STRICT 로 설정하였습니다. 이름과 타입이 맞지 않으면 이상한 필드에 매핑하는 경우가 종종 발생하여 strict 한 전략을 사용하였습니다.

getConfiguration()
.setMatchingStrategy(MatchingStrategies.STRICT)
.setSkipNullEnabled(true);

 

그 중에 Entity에 연관 객체나 Embedded 객체로 많이 사용하고 있기에 DeepMapping 을 자주 쓰기에 간단하게 포스팅합니다.

    public static class ToDestination extends PropertyMap<Source, Destination> {
        @Override
        protected void configure() {
            map(source.getName(), destination.getDestinationName());
            map(source.getId(), destination.getInner().getInnerId());
        }
    }

위와 같이 명시적으로 클래스를 정의하여 Source -> Destination으로 매핑할 것들을 구성해줍니다. 그 외에 value 같은 경우는 타입과 이름이 모두 같기에 PropertyMap에 정의해주지 않아도 됩니다.

 

 엔티티와 DTO 간의 매핑을 하는 번거로움을 많이 줄여 코드량도 많이 줄은 편입니다. 그 전엔 Entity 간 연관 관계가 많지 않아 Lombok.Builder를 쓰거나 생성자로 길지 않은 코드라 시간을 좀 할애하였는데 ModelMapper를 사용하게 되면 어떻게 보면 귀찮은 작업을 줄일 수 있으니 DTO를 많이 사용하고 있다면 쓰는 편이 좋을 듯 합니다.

 

 

 

 

 

'server' 카테고리의 다른 글

fluentd와 함께하는 검색 데이터 수집  (0) 2019.06.26
Redisson  (0) 2019.06.26
Lambda@Edge를 활용한 이미지 리사이징  (1) 2019.03.24
WAS 속도 느림 현상  (0) 2017.02.01
로그 관리를 위한 logrotate.d  (0) 2016.12.16

댓글