Spring에서 Repository는 데이터베이스(DB)와 직접적인 상호작용을 담당하는 계층입니다.
@Repository 어노테이션을 사용하여 Spring의 빈(Bean)으로 등록할 수 있습니다. ✅ 데이터베이스와 직접 연결하여 CRUD(Create, Read, Update, Delete) 작업 수행
✅ 비즈니스 로직(Service)과 데이터 저장소(DB) 사이의 중간 계층 역할
✅ SQL 또는 ORM(JPA, MyBatis 등)을 활용하여 데이터를 관리
✅ 트랜잭션을 관리 (@Transactional 활용 가능)
@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을 실행하고 데이터를 조회합니다. 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이 자동으로 빈으로 등록합니다. | 계층 | 설명 |
|---|---|
| Controller | HTTP 요청을 받아 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 계층은 데이터베이스와 직접 통신하는 역할을 합니다. @Repository를 붙이면 Spring이 예외 처리를 자동으로 해주고, 빈(Bean)으로 관리합니다. Service 계층에서 Repository를 호출하여 데이터를 처리하는 구조를 따릅니다. 🚀