프로그래밍/java
springboot Model Mapper 설정
GOHA
2025. 9. 14. 13:55
ModelMapper**의 설정 코드를 해석해 드리겠습니다. 이 코드는 객체 간의 매핑 규칙을 세밀하게 제어하기 위한 설정입니다.
1. setFieldAccessLevel(AccessLevel.PRIVATE)
이 설정은 ModelMapper가 필드에 직접 접근할 때 접근 레벨을 PRIVATE으로 설정하는 역할을 합니다. 일반적으로 ModelMapper는 getter/setter 메소드를 통해 필드에 접근하지만, 이 설정을 활성화하면 private 필드에도 직접 접근하여 값을 매핑할 수 있게 됩니다. 이는 getter/setter가 없는 클래스를 매핑할 때 유용합니다.
2. setFieldMatchingEnabled(true)
이 설정은 필드 매칭을 활성화하는 코드입니다. ModelMapper는 기본적으로 getter/setter를 사용한 메소드 매칭 전략을 따릅니다. 하지만 이 설정을 true로 설정하면 getter/setter 대신 필드 이름을 기반으로 소스 객체의 필드와 대상 객체의 필드를 매칭합니다.
3. setMatchingStrategy(MatchingStrategies.LOOSE)
이 설정은 매칭 전략을 LOOSE로 설정하는 코드입니다. ModelMapper는 세 가지 매칭 전략을 제공합니다.
- STRICT: 모든 소스 필드와 대상 필드의 이름이 정확히 일치해야 합니다.
- STANDARD: 소스 필드와 대상 필드의 이름이 비슷해야 합니다. (예: user.name과 userName)
- LOOSE: 소스 필드와 대상 필드의 이름이 대소문자나 구분자 없이 매칭됩니다. (예: userId와 user_id 또는 user-id) 이 전략은 가장 유연하며, 필드 이름이 정확히 일치하지 않아도 매핑이 가능합니다.
종합 해석
위 코드를 전체적으로 해석하면 다음과 같습니다.
ModelMapper가 getter/setter 없이도 private 필드에 직접 접근하여, 필드 이름만으로도 대소문자나 구분자 등에 상관없이 가장 유연하게 객체를 매핑하도록 설정한다.
package com.mysite.backend.config;
import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RootConfig {
@Bean
public ModelMapper getMapper(){
ModelMapper modelMapper = new ModelMapper();
// 1. setFieldAccessLevel : private 필드에서도 직접 접근하여 값을 매핑 할 수 있게 함
// 2. setFieldMatchingEnabled : getter/setter 대신 필드이름 기반으로 소스 객체 필드와 대상 객체 필드를 매칭함
// 3. setMatchingStrategy : 소스 필드와 대상 필드간 매칭 설정
modelMapper.getConfiguration().setFieldAccessLevel(org.modelmapper.config.Configuration.AccessLevel.PRIVATE)
.setFieldMatchingEnabled(true)
.setMatchingStrategy(MatchingStrategies.LOOSE);
return modelMapper;
}
}