PNU Mini Bootcamp BE - 1일차-3-ORM, JPA

문진혁·2024년 7월 29일

PNU_Bootcamp_BE

목록 보기
3/19

처음엔 ORM과 JPA가 다른 내용인줄 알았지만, 공부를 해보니 ORM을 구현하기위해 JPA를 사용한다는걸 알았습니다.

ORM(Object-Relational Mapping)과 JPA(Java Persistence API)의 차이점, 그리고 JPA와 Hibernate의 관계에 대해 적어보겠습니다.

ORM (객체 관계 매핑)

ORM은 객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터 간의 변환을 자동으로 처리해주는 기술입니다. 즉, 객체와 데이터베이스 테이블 간의 매핑을 통해 개발자가 SQL 쿼리를 직접 작성하지 않고도 데이터베이스와 상호작용할 수 있게 해줍니다.

JPA (Java Persistence API)

JPA는 자바에서 ORM을 구현하기 위한 표준 인터페이스입니다. JPA는 객체 상태를 데이터베이스에 저장하고, 데이터베이스에서 객체를 불러오는 방법을 정의합니다. JPA는 개발자가 ORM을 사용할 수 있게 해주는 API로, 다양한 ORM 프레임워크가 JPA를 구현할 수 있습니다.

JPA와 Hibernate의 관계

Hibernate는 JPA의 구현체 중 하나입니다. 즉, Hibernate는 JPA의 규격을 따르면서 ORM 기능을 제공하는 프레임워크입니다. JPA를 사용하면 Hibernate와 같은 다양한 ORM 구현체를 선택할 수 있지만, Hibernate는 JPA의 기능을 확장하여 더 많은 기능을 제공하기 때문에 많은 개발자들이 선호합니다.

예시로 살펴보기

예를 들어, User라는 엔티티가 있다고 가정해봅시다. 이 엔티티는 데이터베이스의 users 테이블과 매핑됩니다.

1. JPA를 사용한 예시:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private String email;

    // getters and setters
}

위 코드는 JPA에서 제공하는 어노테이션을 사용하여 User 클래스를 데이터베이스의 users 테이블과 매핑합니다.

2. Hibernate를 사용한 예시:

Hibernate를 사용할 때도 JPA와 동일한 방식으로 엔티티를 정의할 수 있습니다. 하지만 Hibernate의 특정 기능을 사용하고 싶다면 다음과 같이 코드를 작성할 수 있습니다.

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private String email;

    @Version
    private Integer version; // Hibernate의 낙관적 락을 위한 버전 필드

    // getters and setters
}

위 예시에서 @Version 어노테이션은 Hibernate의 낙관적 락 기능을 활용하기 위해 추가된 것입니다.

결론

  • ORM은 객체와 관계형 데이터베이스 간의 매핑 기술입니다.
  • JPA는 자바에서 ORM을 위한 표준 API이고, Hibernate는 그 구현체 중 하나입니다.
  • JPA를 통해 Hibernate와 같은 프레임워크를 사용할 수 있으며, Hibernate는 추가적인 기능을 제공하여 개발자에게 더 많은 유연성을 줍니다.
profile
멋진사람

0개의 댓글