오늘은 새롭게 주특기 플러스 주차가 시작되며 JPA 강의 수강을 시작했다.
그 중에서 ORM에 대해 배우게되어 정리해본다.
ORM은 "Object-Relational Mapping"의 약자로, 객체-관계 매핑을 나타낸다.
DB와 객체 지향 프로그래밍 언어(자바) 간의 데이터 변환을 자동화하는 기술이다.
일반적으로, 객체 지향 언어에서는 클래스와 객체를 사용하여 데이터를 표현하고, 관계형 데이터베이스는 테이블과 레코드를 사용하여 데이터를 저장한다. 이러한 두 가지 접근 방식은 서로 다르기 때문에, 데이터를 객체로 매핑하고 데이터베이스와 상호 작용하는 데 어려움이 발생할 수 있다. ORM은 이러한 어려움을 해결해준다.
ORM은 데이터베이스와 객체 간의 변환 작업을 자동으로 처리하므로, 나 같은 개발자가 SQL 쿼리를 직접 작성할 필요가 없다. 대신에, 객체 지향 언어에서 제공하는 메서드나 쿼리 언어를 사용하여 데이터베이스와 상호 작용할 수 있다. 이렇게 함으로써 개발자는 보다 쉽게 데이터를 다룰 수 있다. 복잡한 쿼리문이 이렇게 한줄로 정리되는 것을 볼 수 있다.
SELECT u FROM User u
WHERE u.nickname = :nickname
일반적으로 많이 사용되는 ORM 프레임워크로는 Hibernate (Java), Entity Framework (C#), Django ORM (Python), Sequelize (Node.js) 등이 있다. 내겐 익숙한 Hibernate! 정말 고맙다!!
그럼 JPA란 무엇인가?
JPA는 Java Persistence API의 약자로, Java 언어에서 관계형 데이터베이스와 상호 작용하는 자바 표준 ORM(Object-Relational Mapping) 기술이다.
쉽게 말해서 자바에서 쓰는 ORM이라고 볼 수 있다.
관계 매핑 (ORM): 손쉽게 어노테이션 등을 사용하여 자바 객체와 관계형 데이터베이스 간의 매핑을 제공한다.
JPQL (Java Persistence Query Language): DB에서 독립적인 객체 지향 쿼리를 사용할 수 있도록 JPQL을 제공한다. (JPQL은 SQL과 유사하지만 객체를 대상으로 하는 쿼리 언어!)
트랜잭션 관리: JPA는 트랜잭션을 관리하고, 영속성 컨텍스트를 통해 객체의 상태를 추적하여 데이터베이스와 동기화하는 기능을 제공한다.
영속성 컨텍스트: JPA에서는 영속성 컨텍스트를 통해 엔티티(Entity)의 상태를 추적하고 관리한다. 이를 통해 데이터베이스와의 효율적인 상호 작용 및 캐싱이 가능하고 나는 편하게 코딩할 수 있다.
관계 매핑: JPA는 다양한 종류의 관계를 매핑할 수 있으며, 일대일, 일대다, 다대다와 같은 다양한 관계를 지원.