반응형
ORM(Object -Relational Mapping)
ORM 프레임워크가 이를 RDB에 적절한 형태로 전환해 주거나 그 반대로 RDB에 저장되어 있는 정보를 자바오브젝트가 다루기 쉬운 형태로 변환해 주는 기술을 말합니다. 쉽게 말하면 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 데이터 매핑과 상호 작용을 쉽게 만들어주는 기술입니다.
ORM 특징
- ORM에서 데이터베이스의 테이블에 매핑되는 객체를 엔티티라고 부릅니다. 엔티티 클래스는 일반적으로 데이터 베이스 테이블의 구조와 일치하는 필드를 포함합니다.
- 데이터베이스 스키마와 객체 모델 간의 매핑을 정의하는 방법을 제공하며 어노테이션을 사용하거나 XML을 통해 매핑 정보 설정 할 수 있습니다.
- 객체 지향 언어를 사용하며 데이터 베이스에서 데이터를 검색하고 조작하는 데 사용되는 객체 지향 쿼리 언어를 제공합니다.
JPA(Java Persistence API)
Java 언어를 사용하여 객체 지향 방식으로 데이터베이스와 상호 작용하기 위한 자바 기반의 ORM 기술입니다.
JPA를 사용하면 데이터베이스와의 상호 작용을 추상화하고, 개발자가 데이터베이스 세부 사항을 알 필요 없이 객체 중심의 코드를 작성할 수 있게 도와줍니다.
코드로 알아보는 JPA
import javax.persistence.*;
import java.util.List;
@Entity // User 클래스가 JPA를 알려줍니다.
public class User {
@Id // 필드가 엔티티의 pk임을 알려줍니다.
// 키 값을 자동으로 생성하는 어노테이션이지만 이 코드에서는 데이터 베이스의 자동증가를 위해 IDENTITY를 사용합니다.
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
public User() {}
public User(String username) {
this.username = username;
}
}
public class JpaSimplestExample {
public static void main(String[] args) {
//JPA 설정을 로드하며 데이터베이스 연결관리
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myJPAUnit");
// 데이터 베이스와 상호 작용 역활
EntityManager entityManager = entityManagerFactory.createEntityManager();
// 사용자 생성 및 저장
User newUser = new User("john_doe");
entityManager.getTransaction().begin();
entityManager.persist(newUser);
entityManager.getTransaction().commit();
// 사용자 검색
List<User> userList = entityManager.createQuery("SELECT u FROM User u", User.class).getResultList();
for (User user : userList) {
System.out.println("User: " + user.getUsername());
}
entityManager.close();
entityManagerFactory.close();
}
}
JPA 사용 이유
JPA 사용 시 객체 지향 애플리케이션을 더 쉽게 데이터베이스와 통합할 수 있으며, 데이터베이스 관련 작업의 간속화와 생산성 향상을 제공합니다. 또한 JPA는 자바 객체와 관계형 데이터베이스 간의 매핑을 제공하므로, 객체 지향 프로그래밍과 관계형 데이터베이스 간의 불일치를 해소할 수 있으며 객체 중심 코드를 작성하고 데이터베이스와의 통합을 쉽게 처리할 수 있습니다.
Hibernate
데이터베이스와 상호작용하기 위한 오픈 소스 ORM입니다. 데이터베이스와의 상호 작용을 단순화하고 개발자가 객체 지향 코드를 사용하여 데이터베이스를 다룰 수 있게 해 줍니다.
728x90
'Spring(Boot & FrameWork)' 카테고리의 다른 글
디자인 패턴 (1) | 2023.11.13 |
---|---|
Entity 연관 관계 (0) | 2023.11.09 |
JPA 영속성 (0) | 2023.11.07 |