ORM은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 기술입니다. 객체는 참조를 통해 연관관계를 표현하고, 관계형 데이터베이스는 외래 키를 사용하기 때문에 두 모델 사이에는 차이가 있습니다. ORM은 이 차이를 해결하여 개발자가 SQL보다 객체 중심으로 데이터를 다룰 수 있게 합니다.

JPA는 자바 ORM 기술의 표준 명세이며, 대표적인 구현체로 Hibernate가 있습니다. 개발자는 JPA의 EntityManager나 Spring Data JPA의 Repository를 사용하고, 구현체가 엔티티의 상태를 바탕으로 SQL을 생성하고 실행합니다.

JPA를 사용하면 반복적인 CRUD SQL과 결과 매핑 코드를 줄일 수 있고, 객체의 연관관계를 활용하여 도메인 중심으로 개발할 수 있습니다. 또한 특정 구현체나 데이터베이스에 대한 의존도를 낮출 수 있으며, 영속성 컨텍스트를 통한 1차 캐시, 변경 감지, 쓰기 지연 같은 기능도 사용할 수 있습니다.

다만 생성되는 SQL을 이해하지 못하면 N+1 문제나 불필요한 쿼리처럼 성능 문제가 생길 수 있습니다. 따라서 JPA를 사용하더라도 SQL, 연관관계, 트랜잭션에 대한 이해가 필요합니다.