JPA 개념을 잡기전 영속성과 ORM에 대해 먼저 알아보자
영속성은 데이터를 생성시킨 프로그램이 종료되어도 사라지지 않는 데이터의 특성이다.
영속성이 없는 데이터는 메모리에만 존재하기 때문에 프로그램이 종료되면 해당 데이터를 사라지게 되므로 파일이나 여러 데이터베이스를 이용해 데이터에 영속성을 부여한다.
Spring에서 데이터 영속성을 위해서 3가지 방법이 이용된다.
이중 Persistence Framework의 한 종류로 ORM이 존재한다.
ORM - ObJect Relational Mapping
(Object는 객체, Relational은 관계형 데이터베이스)
객체(Object)는 객체의 언어로, 관계형 데이터베이스(Relational)는 관계형 데이터베이스의 언어로 설계가 이뤄지는데, 그 사이에서 번역기 역할을 해주는 것이 ORM이다.
회사에 따라 데이터베이스 관리자를 두기도 하지만 많은 경우 백엔드 개발자가 DB관리를 같이하게 되는데, ORM이 없다면
객체 언어로 개발을 하면서 관계형 데이터베이스에서 사용하는 SQL로 데이터 관리도 함께 해주는 이중고를 겪어야한다.
SQL 작성이 어렵지는 않지만, Oracle이나 MySQL 등에서 SQL 문법이 조금씩 달라지거나 휴먼에러가 발생하기 쉽다는 문제가 있다.
JPA는 자바에서 사용되는 ORM의 표준 명세이다.
JPA를 사용하면 SQL을 사용하지 않고 관계형 데이터베이스에 데이터를 CRUD할 수 있게된다.
아래와 같은 SQL문을
String query = "SELECT * FROM EMPLOYEES WHERE ID = ?;
Employee employee = jdbdTemplate.queryForObject(
query, new Object[] { id }, new EmployeeRowMapper());
간단하게 자바 언어로 표현할 수 있게 된다.
repository.save(new Employee("James", "Ann");
JPA의 사실상 표준이 되는 프레임워크
(JPA는 명세서이고 명세서에 충실해 구현한 프레임워크가 Hibernate)
JPA를 사용하지 않고 SQL을 입력하거나, SQL 매퍼를 이용하는 방법도 있다.