[Spring] MapStruct 적용하기

김정연·2024년 5월 25일
post-thumbnail

사이드 플젝으로 골프의 민족 백엔드를 맡아서 진행하고 있는데 Entity와 Dto를 자동매핑해주는 MapStruck을 사용해봤다.

Dto란 ?

데이터를 전달하는 객체이다. 즉 보여주고 싶은 데이터만 보여줄 수 있다. 예를 들어 회원엔티티를 직접 전달하게 되면 개인정보같이 보여주면 안되는 정보까지 노출되기 때문에 GetMapping을 할 때는 Dto를 꼭 사용해야 한다.

MapStruct

Java been 유형간의 매핑 구현을 단순화하는 코드 생성기이다.

  • 컴파일 시점에서 코드를 생성하여 런타임에서 안정성 보장
  • Annotation을 이용해서 매핑을 자동으로 제공
  • Lombok이 꼭 있어야 실행이 가능하다.

사용방법

  1. 그래들에 의존성을 추가한다.
		// Map Struct
    implementation 'org.mapstruct:mapstruct:1.5.3.Final'
    annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final'
    annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
  1. 매핑을 위한 엔티티와 dto를 만든다.
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "tbl_b_category")
@Getter
public class Category {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long categoryNo;
    private Long parentCategory;
    private int depth;
    private String name;
}

@Getter
@Setter
public class CategoryDto {

    private Long categoryNo;
    private Long parentCategory;
    private int depth;
    private String name;
}
  1. mapper 인터페이스를 생성한다.
@Mapper(componentModel = "spring")
public interface CategoryMappper {

    CategoryDto categoryToCategoryDTO(Category category);
    Category categoryDTOToCategory(CategoryDto categoryDTO);
}
  • @Mapper 어노테이션을 붙여주면 자동으로 CategoryMappper 의 구현체를 생성해준다.
  1. 필요한 코드를 작성하고 테스트 해보면 내가 원하는 코드를 볼 수 있다.
 	/**
     * 2뎁스 카테고리 선택시 하위 카테고리 조회
     */
    public List<CategoryDto> viewParentCategory(Long categoryNo , int depth){
        List<Category> categories = categoryRepository.findByParentCategoryAndDepth(categoryNo, depth);
        return categories.stream()
                .map(categoryMappper::categoryToCategoryDTO)
                .collect(Collectors.toList());
    }

이렇게 하고 조회하면 원하는 정보만 딱 볼 수 있다!
초반에 세팅해두면 나중까지 편안하게 사용할 수 있을 것 같다.

profile
백엔드 개발자

0개의 댓글