책을 읽고 정리한 필기! (스프링 부트 핵심 가이드 - 장정우)
자바와 같은 객체지향 언어에서 의미하는 RDB(Relational Database)의 테이블을 자동으로 매핑하는 방법!
객체 지향 언어에서의 객체는 클래스를 의미한다.
클래스는 데이터베이스의 테이블과 매핑하기 위해 만들어진 것이 아니기 때문에 RDB 테이블과 어쩔 수 없는 불일치가 존재한다.
ORM은 이 둘의 불일치와 제약사항을 해결하는 역할을 한다.
이렇듯 ORM을 이용하면 쿼리문 대신 코드(메서드)로 데이터를 조작할 수 있다.
ORM이 큰 개념이라면 JPA는 더 구체화된 스펙을 포함한다.
즉, JPA 또한 실제로 동작하는 것이 아니고 어떻게 동작해야 하는지 메커니즘을 정리한 표준 명세
JPA의 메커니즘을 보면 내부적으로 JDBC를 사용한다. 개발자가 직접 JDBC를 구현하는 SQL에 의존하게 되는 문제 등이 있어서 효율성이 떨어지는데, JPA는 이 같은 문제점을 보완해서 개발자 대신 적절한 SQL을 생성하고 데이터베이스를 조작해서 객체를 자동 매핑하는 역할을 수행한다.
JPA 기반의 구현체는 대표적으로 세가지가 있다.
자바의 ORM 프레임워크로, JPA 구현체 중 하나이다.
하이버네이트의 기능을 더욱 편하게 사용하도록 모듈화한 Spring Data JPA에 대해 설명하겠다.
JPA를 편리하게 사용할 수 있도록 지원하는 스프링 하위 프로젝트 중 하나.
CRUD 처리에 필요한 인텊이스 제공, 하이버네이트의 EntityManager를 직접 다루지 않고, 리포지토리를 정의해 사용함으로써 스프링이 적합한 쿼리를 동적으로 생성하는 방식으로 데이터베이스를 조작함.
이름 그대로 엔티티를 관리하는 객체.
데이터베이스에 접근해서 CRUD 작업을 수행한다.
Spring Data JPA를 사용하면 리포지토리를 사용해서 데이터베이스에 접근한다.