본문 바로가기

공부 자료/Spring

[MyBatis/Spring] About @Mapper/@Repository

@Mapper와 @Repository 어떻게 다른걸까?

 

 

 

얼마 전 Springboot에서 Mybatis를 연동하면서

Dao 인터페이스에 @Mapper/@Repository 애너테이션 중 @Mapper만 사용해도 잘 작동하는 것을 확인할 수 있었다.

그럼 @Repository는 왜 사용해야 하는 것이며, @Mapper는 어떤 역할을 하는 애너테이션인지 공부해 보고자 한다.

 

 


 

[ @Mapper ]

@Mapper 애너테이션이란?

 

1. Mybatis와 관련된 애너테이션

: 주로 Mybatis와 같은 데이터 매퍼 프레임워크에서 사용한다.

 

2. XML 파일과의 연동

: Mybatis에서 SQL 쿼리를 별도의 XML 파일에 저장하고 이와 매핑하는 인터페이스를 만들 때 사용한다.

- Mybatis의 sqlSessionFactory에서 사용되어 데이터베이스와 연동

 

 

위 처럼 주로 Mybatis같은 데이터 매퍼 프레임워크에서 사용하지만

스프링 부트에서는 주로 설정을 자동으로 해주기 때문에 @Mapper 애너테이션만 존재해도 충분히 동작이 가능하게 되는 것이다.

 

 

그렇다면 왜 @Repository를 써야 하는 것일까?

 


 

 

[ @Repository ]

@Repository 애너테이션이란?

 

1. 명시적인 역할 표시

: 스프링에서 데이터 액세스 계층의 구현체를 나타내기 위해 사용하기에, 해당 역할을 명시적으로 나타내 코드를 읽는 사람들에게 해당 클래스의 목적과 역할을 더 잘 잉해할 수 있도록 한다.

 

2. 예외 반환 및 스프링 데이터 액세스 기능 활용

: 애너테이션 사용 시 데이터 액세스와 관련된 예외를 스프링 데이터 액세스 예외로 반환해주고, 스프링 데이터 액세스 기능을 더 효과적으로 활용할 수 있게 된다.

 

3. 코드 관리 용이성

: 스프링이 제공하는 여러 기능과 연동 시 스프링이 해당 클래스를 더 효과적으로 인식하고 관리할 수 있게 된다.

 


 

 

 

각 애너테이션이 위와 같은 역할들을 하기 때문에

@Mapper만 사용해도 데이터베이스 연결이 잘 되고 Mybatis의 Mapper에서는 @Repository가 필요하지 않을 수 있다.

하지만 실제로 스프링에서는 @Repository 애너테이션을 사용한 클래스를 보고

데이터 액세스와 관련된 기능을 활성화하고 이를 통해 스프링의 다양한 기능을 활용할 수 있게 되기 때문에

스프링 기반 프로젝트에서는 @Repository 애너테이션을 사용하는 것이 일반적인 규칙이 되는 것이다!