영속성을 갖지 않으면 데이터는 메모리에서만 존재하게 되고 프로그램이 종료되면 해당 데이터는 모두 사라지게 된다.
그래서 우리는 데이터를 파일이나 DB에 영구 저장함으로써 데이터에 영속성을 부여한다.
우리가 어떤 서비스를 만든다고 하면 관련된 정보들을 객체에 담아 보관하게된다.
즉, 테이블 객체가 가지고 있던 정보를 입력하고 이 테이블들을 SQL질의어를 통해 관계 설정을 해주게 된다.
여기서 문제는 테이블과 객체간의 이질성이 발생하게 된다는 것
SQL문 작성없이 간단한 매핑설정으로 데이터베이스의 테이블 데이터를 java 객체로 전달받을 수 있다.
JPA는 단순히 명세이기 때문에 구현이 없다.
JPA는 ORM을 사용하기 위한 인터페이스를 모아둔 것이며 JPA를 사용하기 위해서는 JPA를 구현한(ex. Hibernate)를 구현한 ORM프레임워크를 이용해야한다.
즉, 인터페이스를 직접 구현한 라이브러리이다.
JPA와 Hibernate는 마치 자바의 interface - class와 같은 관계이다.
Spring에서 제공하는 모듈 중 하나로, 개발자가 JPA를 더 쉽고 편하게 사용할 수 있도록 도와준다.
Spring Data JPA를 사용하여 개발하면 EntityManager를 직접 다뤄서 개발하지 않는다. 이는 Spring Data JPA에서 JPA를 추상화시킨 Repository 인터페이스를 제공하기때문이다.
사용자가 Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면, Spring이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록해준다.