ORM은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 기술입니다. 객체는 참조를 통해 연관관계를 표현하고, 관계형 데이터베이스는 외래 키를 사용하기 때문에 두 모델 사이에는 차이가 있습니다. ORM은 이 차이를 해결하여 개발자가 SQL보다 객체 중심으로 데이터를 다룰 수 있게 합니다.
JPA는 자바 ORM 기술의 표준 명세이며, 대표적인 구현체로 Hibernate가 있습니다. 개발자는 JPA의 EntityManager나 Spring Data JPA의 Repository를 사용하고, 구현체가 엔티티의 상태를 바탕으로 SQL을 생성하고 실행합니다.
JPA를 사용하면 반복적인 CRUD SQL과 결과 매핑 코드를 줄일 수 있고, 객체의 연관관계를 활용하여 도메인 중심으로 개발할 수 있습니다. 또한 특정 구현체나 데이터베이스에 대한 의존도를 낮출 수 있으며, 영속성 컨텍스트를 통한 1차 캐시, 변경 감지, 쓰기 지연 같은 기능도 사용할 수 있습니다.
다만 생성되는 SQL을 이해하지 못하면 N+1 문제나 불필요한 쿼리처럼 성능 문제가 생길 수 있습니다. 따라서 JPA를 사용하더라도 SQL, 연관관계, 트랜잭션에 대한 이해가 필요합니다.
JPA와 Hibernate의 차이는 무엇인가요?
JPA는 자바 ORM을 위한 인터페이스와 동작 방식을 정의한 표준 명세이고, Hibernate는 이를 실제로 구현한 ORM 프레임워크입니다. 따라서 애플리케이션은 주로 JPA API에 의존하고, 런타임에는 Hibernate 같은 구현체가 동작합니다.
Spring Data JPA는 JPA와 어떤 차이가 있나요?
JPA는 ORM 표준이고, Spring Data JPA는 JPA를 더 편리하게 사용할 수 있도록 Repository 추상화와 쿼리 메서드 등의 기능을 제공하는 Spring 모듈입니다. 내부적으로는 JPA의
EntityManager를 사용합니다.
JPA를 사용하면 SQL을 몰라도 되나요?
아닙니다. JPA가 SQL을 생성해 주지만 쿼리 실행 횟수, 조인 방식, 인덱스 사용 여부는 성능에 직접 영향을 줍니다. 생성된 SQL을 확인하고 데이터베이스 관점에서 최적화할 수 있어야 합니다.