MapStruct 라이브러리를 이용해 Dto <-> Entity 간 쉽게 매핑을 해줄 수 있습니다.
컴파일 시점에 매핑클래스를 생성하기 때문에, ModelMapper보다 훨씬 성능이 좋습니다!
JPQL을 사용한다면 런타임에서 오류를 잡아내기 때문에 내가 코드를 알맞게 작성한건지 알기 힘들었고, 이는 QueryDsl을 사용함으로써 컴파일 시점에 쿼리 오류를 잡아낼 수 있었습니다. 이때 QueryDsl도 컴파일 시점에 Q클래스 파일이 생성되는데 MapStruct도 이와 비슷한 맥락입니다!
MapStruct 라이브러리 사용법은 아래와 같습니다.
CreateRequest Dto를 Board Entity로 변환하고자 할 때 다음과 같이 작성합니다!
근데, 매핑은 쉽게 해준다고 해도 .. JPA의 연관관계는 어떻게 진행될까요?
위의 그림을 보면, Board객체의 myFiles 변수와, CreateRequest객체의 files 변수가 매핑되는건데, 이 매핑이 너무 간단명료해서 연관관계는 어떻게 진행되는지 많은 고민을 했습니다!
많은 고민을 거치고 나서 MapStruct도 결국은 Setter로 진행된다는 것을 확인했습니다.
컴파일시 만들어진 Mapper 구현체를 확인하면,
new함수를 이용해 객체를 생성하고, 수정자를 이용해 값을 매핑해주는 것을 확인할 수 있습니다.
저는 여기서 setter를 이용해 값을 넣어주는 것을 확인했고 Board Entity 클래스에 다음과 같이 Setter를 재정의했습니다.
그랬더니,, DB에 값이 제대로 들어간 것을 확인할 수 있었습니다!
이런 과정을 통해, MapStruct 라이브러리가 어떻게 동작하는 지 이해하는 게 무엇보다 중요함을 알 수 있었습니다!
