
Java Persistence API
What ?
JPA자바 ORM 기술에 대한 표준 명세로 스프잉의 PSA에 의해서(POJO를 사용하면서 특정 기술을 사용하기 위해서)표준 인터페이스를 정해두었는데 ORM을 사용하기 위해 JAVA에서 제공하는 API이다.
직접 SQL을 작성하지 않고, JPA API를 활용해 DB를 저장하고 관리할 수 있다.
자바에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스다.
JPA는 특정 기능을 하는 라이브러리가 아니다.
기존 EJB에서 제공되던 엔티티 빈을 대체하는 기술이다.
ORM이기 때문에 SQL이 아닌 자바 클래스와 DB테이블을 매핑합니다.
ORM을 사용하기 위한 인터페이스를 모아둔 것이며, JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus같은 ORM 프레임워크를 사용해야 합니다.

What ?
JPASample1
Sample2
메서드 이름을 기반으로 쿼리를 자동으로 생성하는 기능을 제공
, 개발자가 쿼리를 명시적으로 작성하지 않아도 메서드 이름만으로 데이터베이스에서 데이터를 조회할 수 있습니다.
우리가 만들어 볼 SBB는 방문자들이 질문과 답변을 남길 수 있는 게시판 서비스이다. SBB 게시판의 사용자가 질문이나 답변을 작성하면 데이터가 생성되는데, 이러한 데이터를 관리하려면 저장, 조회, 수정하는 등의 기능을 구현해야 한다. 우리가 만들 SBB뿐만 아니라 대부분의 웹 서비스들은 생성되는 데이터를 관리하고 처리하기 위해 데이터베이스를 사용한다. 데이터베이스(database, DB)는 데이터를 모으고 관리하는 저장소라고 할 수 있다.

여기서 문제는 데이터베이스를 관리하려면 SQL(Structured Query Language)이라는 언어를 사용해야 한다는 점이다. 스프링 부트와 달리 데이터베이스는 자바를 이해하지 못한다. 하지만 ORM(Object Relational Mapping)이라는 도구를 사용하면 자바 문법으로도 데이터베이스를 다룰 수 있다. 즉, ORM을 이용하면 개발자는 SQL을 직접 작성하지 않아도 데이터베이스의 데이터를 처리할 수 있다.
JPA란?
스프링 부트는 JPA(Java Persistence API)를 사용하여 데이터베이스를 관리한다. 스프링 부트는 JPA를 ORM(Object-Relational Mapping) 기술의 표준으로 사용한다. JPA는 인터페이스 모음이므로, 이 인터페이스를 구현한 실제 클래스가 필요하다. JPA를 구현한 실제 클래스에는 대표적으로 하이버네이트(Hibernate)가 있다. 정리하자면, 하이버네이트는 JPA의 인터페이스를 구현한 실제 클래스이자 자바의 ORM 프레임워크로, 스프링 부트에서 데이터베이스를 관리하기 쉽게 도와준다. 우리가 계속 만들어 갈 SBB도 JPA와 하이버네이트 조합으로 데이터베이스를 관리한다