안녕하세요! 오늘은 Spring Data JDBC에 대해 알아보겠습니다. JPA가 너무 무겁게 느껴지시나요? Spring Data JDBC가 좋은 대안이 될 수 있습니다.
Spring Data JDBC가 뭔가요? 🤔
Spring Data JDBC는 마치 미니멀한 ORM이라고 생각하시면 됩니다:
- JPA처럼 객체와 DB를 매핑해주지만
- 훨씬 단순하고 가벼운 방식으로 동작합니다
- 영속성 컨텍스트(Persistence Context)가 없어요!
왜 Spring Data JDBC를 사용해야 할까요? 🌟
1. 단순함의 미학
@Table("users")
public class User {
@Id
private Long id;
private String name;
private String email;
}
- 간단한 애노테이션으로 매핑 완성
- JPA처럼 복잡한 설정이 필요 없음
2. 예측 가능한 SQL
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
List<User> findByEmail(String email);
}
- 모든 SQL이 직접적으로 실행됨
- N+1 문제가 발생할 걱정 없음
- 캐싱이나 지연 로딩 없음
어떻게 동작하나요? 🎯
1. 기본 설정
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
2. 엔티티 설정
@Table("orders")
public class Order {
@Id
private Long id;
private String orderNumber;
@MappedCollection(idColumn = "order_id")
private List<OrderItem> items;
}
3. 리포지토리 생성
public interface OrderRepository extends CrudRepository<Order, Long> {
// 기본 CRUD 메소드 자동 제공
// 커스텀 쿼리 메소드
List<Order> findByOrderNumber(String orderNumber);
}
주요 특징 💫
1. 간단한 Aggregate 매핑
@Table("customers")
public class Customer {
@Id
private Long id;
// 값 객체는 같은 테이블에 저장
private Address address;
// 1:N 관계는 별도 테이블로 저장
@MappedCollection(idColumn = "customer_id")
private List<Order> orders;
}
2. 명시적인 저장
@Service
@Transactional
public class OrderService {
private final OrderRepository repository;
public Order createOrder(Order order) {
// 저장 시점이 명확함
return repository.save(order);
}
}
실제 사용 예시 📱
1. 간단한 CRUD
// 생성
Customer customer = new Customer("John", "john@email.com");
repository.save(customer);
// 조회
Optional<Customer> found = repository.findById(1L);
// 수정
customer.setName("John Doe");
repository.save(customer);
// 삭제
repository.delete(customer);
2. 커스텀 쿼리
public interface CustomerRepository extends CrudRepository<Customer, Long> {
// 메소드 이름으로 쿼리 생성
List<Customer> findByEmailContaining(String email);
// SQL 직접 작성
@Query("SELECT * FROM customers WHERE active = true")
List<Customer> findActiveCustomers();
}
주의사항 ⚠️
복잡한 관계는 피하세요
- 단순한 1:N 관계까지만 권장
- 복잡한 관계는 JPA가 더 적합
대량의 데이터 처리
- 페이징 처리가 필요한 경우 주의
- 커스텀 SQL을 고려하세요
결론 🎁
Spring Data JDBC는:
- 단순하고 예측 가능한 ORM이 필요할 때
- JPA의 복잡성을 피하고 싶을 때
- SQL을 직접 제어하고 싶을 때
최고의 선택이 될 수 있습니다!
References:
728x90
'300===Dev Framework > Spring' 카테고리의 다른 글
Spring Controller HTTP 메소드 어노테이션 완벽 가이드 🎯 (0) | 2024.11.14 |
---|---|
Spring Controller 완벽 가이드 🎯 (3) | 2024.11.14 |
Spring @Transactional 완벽 가이드 🎯 (0) | 2024.11.14 |
Spring Properties & Profiles 완벽 가이드 🎯 (0) | 2024.11.14 |
Spring Bean의 생명주기 콜백 메서드 (@PostConstruct & @PreDestroy) 🌱 (2) | 2024.11.14 |