도입 배경
🧱 레이어드 아키텍쳐와 DTO 변환의 반복
Spring Boot로 백엔드 개발을 하다 보면 자연스럽게 Layered Architecture를 따르게 됩니다.
보통은 MVC 패턴에 따라 Controller → Service → Repository 구조로 구성되며, 각 계층 간 데이터 전달을 위해 **DTO(Data Transfer Object)**를 사용합니다.
문제는, 계층을 넘나들 때마다 객체를 DTO로 변환하는 작업이 반복된다는 점입니다. 이 작업은 지루하고, 실수하기 쉬운(Human Error) 영역입니다. 필드가 많아질수록, 구조가 복잡해질수록 실수 확률은 더욱 높아집니다.
더 나아가 퍼사드(Facade) 패턴을 도입하여 Controller ↔ Service 사이에 추가적인 유스케이스 계층을 두는 경우, DTO는 더욱 다양한 계층을 거치게 되며, 계층 간 변환 작업이 급증하게 됩니다.
즉, 객체 매핑은 개발자가 반복해서 작성하는 코드의 양을 증가시키고, 코드의 품질을 떨어뜨릴 위험을 내포하고 있습니다.
✅ 객체 변환 자동화를 위한 해결책
자바에서는 계층 간 객체 변환을 자동화해주는 다양한 라이브러리가 존재합니다. 대표적으로 ModelMapper, MapStruct, JMapper, Selma 등이 있으며, 그 중에서도 ModelMapper와 MapStruct가 가장 널리 사용됩니다.
ModelMapper는 런타임 에 리플렉션을 사용해 매핑을 수행합니다.
설정이 간단하고 필드명이 같으면 자동으로 매핑되기 때문에 빠르게 사용할 수 있지만,
- 성능이 떨어지고
- 타입 안정성이 낮으며
- IDE 자동완성이나 추적이 어렵다는 단점이 있습니다.
반면 MapStruct는 컴파일 타임에 매핑 코드를 직접 생성합니다.
- 성능이 뛰어나고,
- 컴파일 시점에 오류를 잡을 수 있어 안전하며,
- IDE에서 구현체 추적과 디버깅이 쉬운 점이 큰 장점입니다.
즉, 성능과 유지보수성을 모두 고려했을 때 MapStruct가 가장 효율적인 선택이라고 판단하여 MapStruct를 사용하게 되었습니다. 이제 실제 사용법에 대해 살펴보겠습니다.
출처 : https://mapstruct.org/
'공부 > Java' 카테고리의 다른 글
[MapStruct] 03. 심화 사용법 (0) | 2025.04.07 |
---|---|
[MapStruct] 02. 기본 사용법 (0) | 2025.04.07 |
[프랙티컬 모던 자바] 02. 인터페이스 (4) | 2024.11.12 |