스프링에서 Mapper와 Repository의 차이점
스프링에서는 데이터 액세스 계층에서 Mapper와 Repository라는 두 가지 주요 개념을 사용한다. 각각의 사용 맥락과 추상화 수준, 쿼리 관리 방식에서 차이가 있으며, 프로젝트에서 사용하는 기술 스택에 따라 적절한 방식을 선택할 수 있다. 이번 포스팅에서는 Mapper와 Repository가 어떤 차이를 가질까?
1. Mapper란 무엇인가?
Mapper는 주로 MyBatis와 같은 데이터 매퍼 프레임워크에서 사용된다. SQL 쿼리를 별도의 XML 파일에 저장하고, 이와 매핑되는 인터페이스를 작성하여 데이터베이스와 애플리케이션 간의 데이터를 매핑한다. Mapper를 사용하면 SQL 쿼리를 직접 작성하고 관리할 수 있어 데이터베이스 작업에 대해 더 세밀한 제어가 가능하다.
나는 Mapper가 직접 SQL 쿼리를 작성하고 싶은 경우, 또는 복잡한 쿼리가 필요한 상황에서 특히 유용하다고 생각한다. Mapper는 구체적인 SQL 쿼리 작업에 대한 자유도가 높은 반면, 그만큼 개발자가 쿼리를 직접 관리해야 한다는 점이 있다.
2. Repository란 무엇인가?
Repository는 스프링의 데이터 액세스 계층에서 더 일반적인 개념으로, 객체 지향적인 인터페이스를 통해 CRUD 연산을 추상화한다. Repository는 데이터 액세스와 관련된 예외를 스프링의 예외로 변환하여 일관된 예외 처리를 가능하게 해준다. 또한, @Repository
어노테이션은 스프링의 다양한 기능과 통합되어 스프링의 예외 변환 메커니즘을 활용할 수 있게 해준다.
나는 Repository가 도메인 모델 중심의 설계에 더 적합하다고 생각한다. 또한 스프링과의 긴밀한 통합으로, 보다 높은 수준의 추상화를 제공하며 CRUD 작업을 간단히 할 수 있어 코드 가독성 및 유지보수성에서 많은 장점을 제공한다.
Mapper와 Repository의 주요 차이점
사용 맥락: Mapper는 주로 MyBatis와 같은 특정 데이터 매퍼 프레임워크에서 사용되고, Repository는 스프링의 일반적인 데이터 액세스 패턴으로 사용된다.
추상화 수준: Repository는 Mapper보다 더 높은 추상화를 제공하여 데이터 액세스 로직을 캡슐화하고, 도메인 모델에 집중할 수 있게 해준다.
쿼리 관리: Mapper는 SQL 쿼리를 직접 작성하고 관리하는 반면, Repository는 CRUD 메서드를 통해 더 추상화된 방식으로 쿼리를 처리한다.
스프링 통합:
@Repository
어노테이션은 스프링의 다양한 기능과 통합되며, 예외 변환 메커니즘을 통해 스프링의 데이터 액세스 예외로 변환할 수 있다.
결론
Mapper와 Repository는 데이터 액세스 계층에서 각각 다른 역할과 장단점을 가진다. Mapper는 세밀한 쿼리 제어가 필요하거나 직접 SQL을 작성해야 하는 경우에 유용하고, Repository는 스프링과의 통합과 높은 수준의 추상화가 필요한 경우 적합하다. 프로젝트의 요구 사항에 따라 두 가지 방식 중 적절한 것을 선택하여 사용할 수 있다.