Spring진영의 대표적인 객체 매핑 라이브러리인
ModelMapper와 Mapstruct에 대한 얘기를 잠깐 해볼까 합니다.
대부분의 반복작업중 많은 부분을 차지하고 있는 것이 객체 간의 매핑/변환에 관련된 작업일 것입니다.
특히 Multi Layer(MVC) 구조가 일반적인 현재의 Java 어플리케이션에서는
레이어 간 객체 매핑은 더 빈번하게 일어나게 되고,
외부와의 연계 및 MSA기반에서의 애플리케이션 간 연계가 점점 더 늘어가는 추세에 따라
서로 주고 받는 객체 간의 매핑과 변환작업은 당연히 더 늘어나는 상황입니다.
이런 작업들은 중요한 비즈니스 로직이 담기는 성격보다는
객체의 프로퍼티 값을 단순하게 매핑( get, set )하거나
일부 값의 형변환( Date -> String 등) 정도가 대부분인 성격의 작업입니다.
-
반복과 중복이 필연적으로 발생할 수 밖에 없는 작업입니다.
-
매핑 코드에 대한 휴먼 오류가 발생할 가능성이 높을 수밖에 없는 작업입니다.
지금 언급하려고 하는 내용은
이런 작업들을 최대한 자동화해서,
발생할 수 있는 오류와 반복적인 작업들을 최소화하여 개발 생산성을 높일 수 있게 해주는
라이브러리에 대한 내용입니다.
이러 라이브러리들 중 대표적인 것들이 ModelMapper와 MapStruct 입니다.
현재의 레거시 시스템에 적용하기 위해서
두 개의 라이브러리에 대해서 가볍게 리서치를 해 보았습니다.
ModelMapper와 관련된 내용은 전에 올린 글이 있으니 참고해 보시면 됩니다.
yonguri.tistory.com/69?category=359079.
결론은 MapStruct를 적용하기로 했는데,
리서치를 하던 중에 개인적으로 흥미로운 내용이 있어, 기술적인 내용을 들어가기에 앞서 잠깐 언급을 하고 가겠습니다.
구글 트렌트로 알아본 ModelMapper 와 MapStruct의 지역별 관심도
최근 5년간의 지역별 관심도를 구글 트렌드로 보면 압도적으로 Mapstruct를 많이 사용하는데요.
특이한 것은 아시아 지역에서는 호주(사실 아시아라고 하기에는…)와 중국을 제외하고는
ModelMapper에 대한 관심도가 더 높게 나왔다는 겁니다.
시간의 추이로 보더라도 ModelMapper의 경우에는 관심도가 크게 늘지 않는 반면,
Mapstruct의 경우는 관심도가 큰 폭으로 증가한 것을 알 수 있습니다.
이 글에 이어 두 라이브러리에 대한 기술적인 내용도 언급할 텐데,
분명히 Mapstruct가 구현의 방식이라던가 성능적인 측면에서 좀 더 유리한 부분이 더 많이 있고
그렇기 때문에 관심도(선호도)가 상대적으로 올라갔다고 볼 수 있습니다.
국가별로 보면
일본과 한국의 경우는 아직까지 Mapstruct보다 ModelMapper를 더 많이 사용하는 걸로 나옵니다.
(일본은 ModelMapper만 사용하는게 아닐까...)
무엇보다 새로운 기술이나 트렌드를 받아들이는 속도가 빠른 편인 한국의 개발자들이 ( 제 생각일 수도 있습니다.)
더 나중에 나왔고, 코드의 간결성이나 사용법이 더 직관적인 ( 제 생각일 수도 있습니다.) Mapstruct의 관심도가 더 낮다는 건
아무래도 다른 이유가 있는게 아닐까 하는 생각이 드는데요.
사실 저도 얼마전까지 ModelMapper를 계속 사용했었는데요.
저 같은 경우는 익숙함을 벗어나기 싫은 게으름에서 비롯된 것이라 예를 들기에는 적절하지 않을 것 같습니다.
아마 개발자의 성향보다 한 번 적용한 기술은 쉽게 바꾸지 않는 한국 IT기업의 성향이 수치로 더 많이 반영된 게 아닐까 추측해 봅니다.
사실 JPA의 전신인 Hibernate 가 한국에서는 MyBatis로 인해 그 전파력이 다른 나라에 비해 현저히 낮았다고 생각하는데
그런 배경과 비슷한 맥락이지 않을까 하는 생각도 듭니다.
역시 한국,중국,일본에서의 MyBatis 선호도가 타 지역보다 월등히 높은 수치임을 보여줍니다.
구글 트렌드 수치는 개인적으로 궁금해서 찾아본 것이고,
기술적인 내용을 다루기 전에 한 번 언급해 볼만 내용이라고 생각해서 올린 거라 참고로만 봐 주시기 바랍니다.
다음 글에서는 두 라이브러리의 기술적인 내용에 대해서 다뤄보도록 하겠습니다.
ModelMapper -modelmapper.org/
MapStruct - mapstruct.org/
최근댓글