▶오늘의 주제 : ORM, JPA, Spring Data JPA 차이점
▶ JPA
애플리케이션을 객체지향 언어로 개발하고 관계형 데이터베이스로 관리한다면 객체-관계형간의 차이를 해결하기 위해 JPA를 사용한다. 1. 객체와 관계형 DB 연결
2. JPA 내부 동작
- JPA는 영속성 컨테스트를 사용하여 db와의 통신을 효율적으로 관리한다.
- 이러한 영속성 컨텍스트에 대한 JPA상에서 구현체를 EntityManger라고 한다.
- 이러한 EntityManger는 Entity에 대한 생명주기를 관리하고 db와의 연결정보를 저장해둔다.
- Entity에 대한 CRUD는 연결정보를 바탕으로 JPA가 자동으로 생성해준다.
- 이러한 쿼리문은 EntityManger가 관리를 하다가 필요시 처리
▶ ORM
ORM은 객체와 DB 테이블이 매핑을 이루는 것을 의미한다. 즉, 내가 코드 상에서 생성한 객체가 DB상에 어떤 테이블과 연결이 된다는 것을 의미한다. 이렇게 되면 내가 객체를 조작함으로써 DB를 조작할 수 있게 된다.
우리는 JPA에서 DB에 대한 접근을 시도할 때 직접 sql 쿼리문을 만들지 않는다. 다만 객체를 이용한 메소드를 통해 이를 관리할 뿐이다.
SELECT * FROM user → user.findAll()
- user라는 테이블에 모든 정보를 가져오는 것인데 우리는 이를 user라는 객체와 user테이블을 맵핑한 후 findAll이라는 메소드를 통해 정보를 가져오는 것을 볼 수 있었다.
▶ Spring Data JPA
스프링에서 JPA를 보다 편리하게 사용할 수 있도록 지원하는 프로젝트. Spring Data JPA의 목적은 JPA를 사용할 때 필수적으로 생성해야하나, 예상가능하고 반복적인 코드들을 대신 작성해줘서 코드를 줄여주는 것이다. 이는 JPA를 한 단계 추상화시킨 Repository
라는 인터페이스를 제공함으로써 이루어진다. 반드시 기억해야할 점은 Spring Data JPA는 항상 하이버네이트와 같은 JPA provider가 필요하다는 것이다.
- CRUD처리를 위한 공통 인터페이스 제공
- repository 개발 시 인터페이스만 작성하면 실행시점에 스프링 데이터 JPA가 구현객체를 생성하여 DI시켜줌
- CRUD를 위한 여러 메소드들이 자동으로 생성된다.
'Spring' 카테고리의 다른 글
Spring - Entity와 Repository차이 (1) | 2022.12.07 |
---|---|
Spring - 엔터티(Entity) (0) | 2022.12.07 |
Spring - 영속성 컨텍스트란? (0) | 2022.12.07 |
Spring - 절차지향 프로그래밍, 객체지향 프로그래밍, 관점지향 프로그래밍은 각각 어떻게 다른가요? (0) | 2022.12.07 |
Spring - DI, IoC, Bean (0) | 2022.12.04 |