Spring Repository 란?

백엔드&인프라 추종자·2025년 2월 21일

스프링 공부

목록 보기
4/35

Spring Repository란?

1️⃣ Repository의 개념

Spring에서 Repository데이터베이스(DB)와 직접적인 상호작용을 담당하는 계층입니다.

  • 일반적으로 DAO(Data Access Object) 패턴을 따르며, 데이터를 저장하고 불러오는 역할을 합니다.
  • @Repository 어노테이션을 사용하여 Spring의 빈(Bean)으로 등록할 수 있습니다.
  • Spring Data JPA를 사용하면, 인터페이스만 선언하면 자동으로 구현되는 기능을 제공하여 편리하게 사용할 수 있습니다.

2️⃣ Spring Repository의 역할

✅ 데이터베이스와 직접 연결하여 CRUD(Create, Read, Update, Delete) 작업 수행
✅ 비즈니스 로직(Service)과 데이터 저장소(DB) 사이의 중간 계층 역할
✅ SQL 또는 ORM(JPA, MyBatis 등)을 활용하여 데이터를 관리
✅ 트랜잭션을 관리 (@Transactional 활용 가능)


3️⃣ Spring Repository 사용 예시

🔹 1. @Repository를 사용하는 일반적인 방법

@Repository
public class UserRepository {
    
    private final JdbcTemplate jdbcTemplate;

    public UserRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public User findById(Long id) {
        String sql = "SELECT * FROM users WHERE id = ?";
        return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserRowMapper());
    }
}
  • @Repository를 붙이면 Spring이 데이터 접근 계층(DAO)으로 인식합니다.
  • JdbcTemplate을 사용하여 SQL을 실행하고 데이터를 조회합니다.

🔹 2. Spring Data JPA 사용 (인터페이스만으로 Repository 구현)

Spring Data JPA를 사용하면 인터페이스만 정의해도 자동으로 CRUD 기능이 제공됩니다.

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByEmail(String email);
}
  • JpaRepository<T, ID>를 상속하면 기본적인 CRUD 메서드가 자동으로 제공됩니다.
  • findByEmail(String email) 메서드를 선언하면 Spring Data JPA가 자동으로 구현해줍니다.
  • @Repository 어노테이션을 명시하지 않아도 Spring이 자동으로 빈으로 등록합니다.

4️⃣ Spring Repository와 Service의 관계

계층설명
ControllerHTTP 요청을 받아 Service 호출
Service비즈니스 로직을 수행하고 Repository 호출
Repository데이터베이스에서 데이터를 CRUD 수행

🔹 예제 코드

@Service
public class UserService {

    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public UserDto getUserByEmail(String email) {
        User user = userRepository.findByEmail(email)
            .orElseThrow(() -> new RuntimeException("User not found"));
        return new UserDto(user.getId(), user.getName(), user.getEmail());
    }
}
  • Service 계층은 비즈니스 로직을 수행하며 Repository를 호출하여 데이터를 가져옵니다.
  • Repository 계층은 데이터베이스와 직접 통신하는 역할을 합니다.

결론

  • Spring Repository는 DAO(Data Access Object)의 역할을 하며, DB와 직접 연결되는 계층입니다.
  • @Repository를 붙이면 Spring이 예외 처리를 자동으로 해주고, 빈(Bean)으로 관리합니다.
  • Spring Data JPA를 사용하면 인터페이스만 선언하면 자동으로 Repository가 구현됩니다.
  • Service 계층에서 Repository를 호출하여 데이터를 처리하는 구조를 따릅니다. 🚀
profile
AI 답변 글을 주로 올립니다.

0개의 댓글