Loading...
Spring Framework Reference Documentation 7.0.2의 Introduction to ORM with Spring의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
The Spring Framework는 Java Persistence API (JPA)와의 통합을 지원하고, 리소스 관리, data access object (DAO) 구현, 그리고 트랜잭션 전략을 위해 native Hibernate를 지원합니다. 예를 들어, Hibernate의 경우, 여러 편리한 IoC 기능을 통해 많은 전형적인 Hibernate 통합 문제를 해결하는 일급 지원이 있습니다. Dependency Injection을 통해 OR (object relational) 매핑 도구에 대해 지원되는 모든 기능을 설정할 수 있습니다. 이들은 Spring의 리소스 및 트랜잭션 관리에 참여할 수 있으며, Spring의 일반 트랜잭션 및 DAO 예외 계층을 준수합니다.
권장되는 통합 스타일은 plain Hibernate 또는 JPA APIs에 대해 DAOs를 작성하는 것입니다.
Spring은 data access 애플리케이션을 생성할 때 선택한 ORM layer에 상당한 향상을 추가합니다. 원하는 만큼 통합 지원을 활용할 수 있으며, 이러한 통합 노력을 유사한 인프라를 사내에서 구축하는 데 드는 비용과 위험과 비교해야 합니다. 모든 것이 재사용 가능한 JavaBeans의 집합으로 설계되었기 때문에, 기술과 무관하게 라이브러리처럼 대부분의 ORM 지원을 사용할 수 있습니다.
Spring IoC 컨테이너에서의 ORM은 설정 및 배포를 용이하게 합니다. 따라서, 이 섹션의 대부분의 예제는 Spring 컨테이너 내부의 설정을 보여줍니다.
Spring Framework를 사용하여 ORM DAOs를 생성할 때의 이점은 다음과 같습니다:
더 쉬운 테스트. Spring의 IoC 접근 방식은 Hibernate SessionFactory 인스턴스, JDBC DataSource
인스턴스, 트랜잭션 매니저, 그리고 (필요한 경우) 매핑된 객체 구현의 구현과
설정 위치를 쉽게 교체할 수 있게 해줍니다. 이는 차례로 persistence와 관련된 각 코드 조각을
분리하여 훨씬 더 쉽게 테스트할 수 있게 해줍니다.
공통 data access 예외. Spring은 ORM 도구에서 발생하는 예외를 wrapping하여,
proprietary (잠재적으로 checked) 예외를 공통 런타임 DataAccessException 계층으로
변환할 수 있습니다. 이 기능은 대부분의 persistence 예외(복구 불가능한)를 적절한 layer에서만
처리할 수 있게 해주며, 성가신 boilerplate catches, throws, 그리고 예외 선언을
피할 수 있게 해줍니다.
여전히 필요에 따라 예외를 포착하고 처리할 수 있습니다. JDBC 예외(DB-specific dialects 포함)도 동일한 계층으로 변환된다는 점을 기억하십시오. 이는 일관된 프로그래밍 모델 내에서 JDBC를 사용하여 일부 operations를 수행할 수 있음을 의미합니다.
일반적인 리소스 관리. Spring 애플리케이션 컨텍스트는 Hibernate SessionFactory
인스턴스, JPA EntityManagerFactory 인스턴스, JDBC DataSource 인스턴스 및 기타 관련 리소스의
위치와 설정을 처리할 수 있습니다. 이는 이러한 값들을 쉽게 관리하고 변경할 수 있게 합니다.
Spring은 persistence 리소스를 효율적이고, 쉽고, 안전하게 처리할 수 있도록 제공합니다.
예를 들어, Hibernate를 사용하는 관련 코드는 일반적으로 효율성과 적절한 트랜잭션 처리를
보장하기 위해 동일한 Hibernate Session을 사용할 필요가 있습니다. Spring은 Hibernate
SessionFactory를 통해 current Session을 노출함으로써, 현재 thread에 Session을 투명하게
생성하고 bind하는 작업을 쉽게 만들어 줍니다. 따라서 Spring은 어떤 local 또는 JTA 트랜잭션
환경에서도 전형적인 Hibernate usage의 많은 만성적인 문제를 해결합니다.
통합된 트랜잭션 관리. @Transactional 어노테이션을 사용하거나
XML 설정 파일에서 트랜잭션 AOP 어드바이스를 명시적으로 설정함으로써,
선언적, 관점 지향 프로그래밍 (AOP) 스타일 메서드 인터셉터로 ORM 코드를 wrapping할 수 있습니다.
두 경우 모두 트랜잭션 시맨틱과 예외 처리(rollback 등)가 자동으로 처리됩니다.
Resource and Transaction Management에서 논의한 것처럼, ORM-related 코드에 영향을 주지 않고 다양한 트랜잭션 매니저를 교체할 수도 있습니다. 예를 들어, 동일한 full services(예: 선언적 트랜잭션)가 두 시나리오 모두에서 사용 가능하도록 local 트랜잭션과 JTA 간에 교체할 수 있습니다. 추가로, JDBC-related 코드는 ORM을 수행하는 코드와 트랜잭션 측면에서 완전히 통합될 수 있습니다. 이는 ORM에 적합하지 않지만(예: 배치 처리 및 BLOB 스트리밍), 여전히 ORM operations와 공통 트랜잭션을 공유해야 하는 data access에 유용합니다.
보다 포괄적인 ORM 지원(예: MongoDB와 같은 대체 데이터베이스 기술에 대한 지원 포함)이 필요한 경우, Spring Data project suite를 확인해 보는 것이 좋습니다. JPA user라면, spring.io의 Getting Started Accessing Data with JPA guide가 훌륭한 introduction을 제공합니다.
Object Relational Mapping (ORM) Data Access
General ORM Integration Considerations