티스토리 뷰
ORM
Object-Relational Mapping, 객체 관계 매핑
- 객체와 관계형 DB의 데이터를 자동으로 매핑해주는 것을 말한다.
- 객체 지향 프로그래밍 _ OOP는 클래스를 사용해서, 관계형 DB는 테이블을 사용해서 설계한다.
- 이런 차이로 인해 객체 모델과 관계형 모델 간 불일치가 존재할 수 있다.
- ORM 프레임워크가 이 중간에서 SQL을 자동으로 생성해서 불일치를 해결한다.
- DB 데이터 <----(ORM) Mapping----> Object
- 객체를 통해 간접적으로 DB 데이터를 다룬다.
- SQL 쿼리가 아니라 메서드로 데이터를 조작할 수 있다.
- ORM이 객체간 관계를 바탕으로 sql을 자동으로 생성해주는 것이다.
- 대표적인 ORM 프레임워크로는 Hibernate가 있다.
즉, ORM은 DB와 OOP사이에서 관계를 매핑해주는 기술이고 JPA는 그 ORM에 대한 기술을 명세한 것이다.
JDBC
JDBC는 DB에 접근할 수 있도록 JAVA가 제공하는 API이다. JDBC는 모든 JAVA Data Access 기술의 근간이다. JPA 등 모든 Persistence Framework는 내부적으로 JDBC API를 사용한다.
Spring Data JPA
JPA는 ORM을 위한 자바 EE 표준이고, Spring Data Jpa는 JPA를 더 쉽게 사용하기 위해 스프링에서 제공하는 프레임워크이다.
OOORepository에 extends JpaRepository를 통해 스프링 DATA JPA를 사용하거나 or EntityManager를 통해 persist 등을 이용해 JPA를 직접 이용하거나 하게된다.
JPA
Java Persistence API, 자바 영속성 API
- 자바 EE의 ORM 기술 표준으로 인터페이스 모음이다.
- 실제로 동작하는 구현코드가 존재하는 것이 아니다. 이 인터페이스를 구현한 대표적인 오픈소스가 Hibernate이다.
(Hibernate가 ORM 프레임워크) - 따라서 우리가 JPA를 사용하는건 JPA를 implements한 HIbernate의 구현코드를 사용하는 것이다.
JPA 동작과정
- JPA는 애플리케이션과 JDBC 사이에서 동작한다.
- 애플리케이션이 JPA를 사용하면, JPA 내부에서 JDBC API를 사용해서 SQL을 호출해서 DB와 통신한다.
- JPA는 JDBC API를 근간으로 제공되고, Spring Data JPA는 JPA를 기반으로 제공된다.
INSERT : 회원가입시
- UserDTO로 회원 정보를 받고, 회원 정보로 회원 Entity를 만들어서 UserJpaRepository (JPA)에 전달해준다.
-
JPA : @Transaction em.persist(user); Spring Data JPA : @Transaction UserJpaRepo.save(user);
-
- JPA는 전달받은 Entity를 분석해서 관계를 파악해 INSERT SQL을 생성한다.
- 생성한 SQL을 JDBC API를 이용해서 DB에 보낸다.
회원이 저장된다.
FIND : 회원조회시
- User 엔티티의 PK값을 JPA에 전달해준다.
-
JPA : em.find(User.class, Id); Spring Data JPA : UserJpaRepo.findById(Id);
-
- JPA가 엔티티의 매핑 정보를 바탕으로 SELECT SQL을 생성한다.
- JDBC API를 통해 SQL문을 보낸다.
- DB에서 결과를 받아와서 반환한다.
회원이 조회된다.
이런식으로 JPA가 모든 요청의 쿼리를 전담하므로 DB테이블과 Object의 불일치를 해결해준다.
특징
- 데이터를 객체로서 관리할 수 있기때문에 DB에 넣고 빼는거에는 신경쓰지 않고 비지니스 로직에만 집중할 수 있다. 또한 객체지향적으로 개발이 가능하다.
- 자바 객체와 DB 테이블 간 매핑 정보를 바탕으로 SQL을 생성해준다.
- 객체를 통해 쿼리를 짤수있는 jpql을 지원한다 (근데 별로라서 queryDSL을 쓴다, 오탈자에 대한 컴파일에러도 못발견해줌)
- JPA는 성능향상을 위해 지연로딩, 즉시로딩과 같은 기법을 제공하는데 FETCH JOIN, Batch Size 등 다양한 방법을 통해 SQL을 직접 사용하는 것과 유사한 성능을 얻을 수 있다.
반응형
'Web > 정리글' 카테고리의 다른 글
HTTP vs. WebSocket 정리 (2) | 2021.08.26 |
---|---|
Json Web Token 정리 (0) | 2021.08.16 |
Servlet 정리 (0) | 2021.07.28 |
Spring MVC Architecture 정리 (0) | 2021.07.27 |
DAO, DTO 정리 (0) | 2021.07.18 |
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday