🗄 @Repository

정의

@RepositorySpring에서 데이터 접근 계층(DAO, Data Access Object)을 나타내는 애너테이션이다.

데이터를 읽고 쓰는 클래스가 Repository임을 명확히 표시하며, 예외 변환 기능과 함께 사용하는 데 의미가 있다.

🧩 역할

  • 데이터 접근 계층을 구분한다.
  • Spring의 예외 변환 기능과 연결된다.
  • JPA, JDBC, Querydsl 등 데이터 계층에서 사용된다.

🛠 사용법

@Repository 적용 예시

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    User findByEmail(String email);
}

사용자 정의 Repository 예시

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    @Query("SELECT u FROM User u WHERE u.name = :name")
    User findByName(@Param("name") String name);
}

📌 주요 기능

기능 설명
@Repository DAO 역할을 수행하는 클래스임을 나타낸다.
JpaRepository<T, ID> 기본 CRUD 메서드를 제공한다.
@Transactional(readOnly = true) 조회 작업에 트랜잭션을 적용할 수 있다.

⚠️ 장점과 단점

장점

  • Spring의 예외 변환 기능을 자동으로 제공한다
  • DAO 계층을 명확히 구분할 수 있다
  • Spring Data JPA와 함께 쓰면 CRUD를 쉽게 활용할 수 있다

단점

  • Repository 설계가 복잡해지면 유지보수가 어려워질 수 있다
  • 복잡한 쿼리는 Querydsl 같은 별도 도구가 필요할 수 있다

📌 정리

  • @Repository는 데이터 접근 계층을 나타내는 애너테이션이다.
  • 예외 변환과 함께 사용하면 의미가 더 커진다.
  • Spring Data JPA에서 가장 자주 만나는 저장소 계층 애너테이션 중 하나다.

연결문서

댓글남기기