@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 애너테이션을 사용하는 것이 일반적인 규칙이 되는 것이다!
'공부 자료 > Spring' 카테고리의 다른 글
[Spring] CORS란? (CORS에 대해 알고 설정하기) (2) | 2023.11.20 |
---|---|
[Spring Boot] ResponseEntity란? (0) | 2023.11.20 |
[Springframework] Naver API를 이용한 회원가입 및 로그인 (1) | 2023.11.11 |
[Spring Boot] SpringBoot에서 JSP 사용하기 (0) | 2023.11.10 |
[Spring Boot] applicaiton.properties, application.yml 차이 (0) | 2023.11.10 |