이번 글에서는 데이터베이스를 바로 연동해보고 코드를 작성해보기 보다는 먼저 이론적인 부분부터 살펴보도록 할 것이다. 책에 처음 듣는 개념이 많았기 때문에 정리가 먼저 필요하다고 생각이 들었다.
JPA는 자바 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음이다. 그래서 실제 동작이 아닌 어떻식으로 동작해야 하는지에대한 메커니즘을 정리한 표준 명세라고 생가하면 된다.
개발자가 직접 JDBC를 구현하면 SQL에 의존하게 되어서 개발의 효율성이 떨어질 수 있는데 JPA를 사용하면 개발자 대신 SQL을 생성하고 데이터베이스를 조작해서 객체를 자동 매핑해줘서 개발의 효율성을 올릴 수 있다.
지금까지 당연하단듯이 하이버네이트를 사용해 왔다. JPA기반의 구현체가 더 있는지는 전혀 몰랐다. 이를 통해서 하이버네이트가 가장 대중적으로 사용되고 있고, 그래서 이책의 저자도 하이버네이트를 기준으로 설명하고 있는것 같다.
자바 ORM 프레임워크로 JPA가 정의하는 인터페이스를 구현하고 있는 JPA구현체 중 하나이다.
책에서는 Spring Data JPA를 활용한다.
Spring Data JPA
하이버네이트의 기능을 더욱 편하게 사용하도록 모듈화한 것
- CRUD에 필요한 인터페이스 제공
- 하이버네이트의 엔티티 매니저(Entity Manager)를 직접 다루지 않고 레포지토리를 정의해 사용 => 스프링이 적합한 쿼리를 동적으로 생성하는 방식으로 데이터베이스 조작
애플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행한다.
엔티티 객체가 영속성 컨텍스트에 들어오면 JPA는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작업을 수행한다.

세션단위의 생명주기를 가진다.
이런 과정에서 영속성 컨텍스트에 접근하기 위한 수단으로 엔티티 매니저가 사용된다.
엔티티 매니저는 이름 그대로 엔티티를 관리하는 객체이고 데이터베이스에 접근해서 CRUD 작업을 수행한다.
Spring Data JPA를 사용하면 레포지토리를 사용해서 테이터베이스에 접근하는데, 실제 내부 구현체인 SimpleJpaRepository가 레포지토리에서 엔티티 매니저를 사용하는 한다.
엔티티 매니저로 생성된 엔티티 매니저는 엔티티를 영속성 컨텍스트에 추가해서 영속 개체로 만드는 작업을 수행하고, 영속성 컨텍스트와 데이터베이스를 비교하면서 실제 데이터베이스를 대상으로 작업을 수행한다.
엔티티 객체는 영속성 컨텍스트에서 다음과 같은 4가지 상태로 구분된다.
1. 비영속(New)
2. 영속(Managed)
3. 준영속(Detached)
4. 삭제(Removed)
개발공부는 하면 할수록 공부할 양이 늘어난다... 정말 빙산같다...
이번 챕터에서는 아무생각없이 사용하던 JPA 레퍼지토리의 동작 방법을 알 수 있었다. 심지어 지금까지 레퍼지토리는 SpringBoot의 기능이라고만 생각하고 JPA에서 제공되는 기능이라는 것을 몰랐다. 지금이라도 알아서 다행이다.
구체적으로 어떻게 Persistence Context가 관리되고 엔티티가 어떻게 엔티티 매니저로 persistence object가 되는지는 알 수 없어서 궁금증이 생겼다. 지금은 아직 입문단계이고 Spring Boot의 기초적인 부분을 다듬어야하는 시기이기 때문에 나중에 실력이 많이 쌓이면 그때 깊게 알아보는 시간을 가지면 좋을것 같다.
다음 포스팅에서는 실제로 SpringBoot와 MariaDB를 연동해보고 로직을 작성해 보도록 하겠다.