반응형
이번 포스팅에서는 ORM과 JPA에 대한 이론적 개념 위주로 작성하겠습니다.
목차
- ORM이란?
- ORM 장점
- ORM 단점 (JPA 단점으로도 볼 수 있겠습니다.)
- JPA란?
- Hibernate
- SpringData JPA
ORM(Object-Relational Mapping)이란?
우선 ORM이 왜 등장했는지 알아보겠습니다.
기존에는 애플리케이션을 개발할 때 많은 CRUD용 SQL을 반복해서 작성해야 했습니다.
객체 모델링을 SQL로 풀어내는 데 너무 많은 코드와 노력이 필요했고, 객체 모델은 점점 데이터 중심의 모델로 변해갔습니다.
그래서 이러한 비효율적인 작업을 개선하기 위해 ORM이 등장합니다.
어플리케이션의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 의미합니다.
즉, 연관된 Java의 모델 클래스 User와 관계형 데이터베이스의 테이블 users의 관계를 설정해주는 것이라고 생각하면 됩니다.
ORM을 통해 객체지향 프로그래밍과 관계형 데이터베이스의 차이로 발생했던 제약사항을 해결할 수 있습니다.
대표적으로, JPA, Hibernate 등이 있습니다. (Persistent API라고 합니다)
즉, java 데이터 클래스(좌)와 관계형 데이터베이스의 테이블(우)이 아래와 같이 있고, 이 둘을 매핑해주는 것을 ORM이 수행한다 라고 생각하면 됩니다.
ORM의 장점
- 생산성 향상!!!! (ORM이 등장한 배경이기도 합니다.)
- 직접 SQL 쿼리문을 짜지 않고 직관적인 코드로 데이터를 조작할 수 있습니다.
- 개발자가 비즈니스 로직에 보다 집중할 수 있습니다.
- 재사용 및 유지보수가 편리합니다.
- ORM은 독립적으로 작성되어 있습니다. (하나의 클래스로 작성)
- 매핑정보를 명확하게 설계하기 때문에 따로 DB를 볼 필요가 없습니다.
- DBMS에 대한 종속성이 줄어듧니다.
- DBMS를 교체하는 작업이 비교적 적은 리스크로 수행 가능합니다.
ORM의 단점
- 복잡성이 커질 경우 ORM만으로 구현하기 어렵습니다.
- 직접 쿼리문을 짜지 않기 때문에 복잡한 관계의 쿼리를 구현하기 어렵습니다.
- 쿼리문이 필요한 부분만 별개의 라이브러리를 사용해야합니다.
- 잘못 구현할 경우 속도 저하 발생 (converting을 할 때)
- 대형 쿼리는 별도의 튜닝이 필요할 수 있습니다.
- 자동으로 생성되는 쿼리가 많고, 쓰이지도 않는 불필요한 것들이 생성되어지기 때문에 성능향상을 위해서는 최적화가 필요합니다.
JPA(Java Persistence API)란?
- JPA는 Java 진영에서 표준 ORM으로 채택되어 있습니다.
- 자바 플랫폼 SE와 자바 플랫폼 EE를 사용하는 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 API.
- 기존에 EJB에서 제공되던 엔터티 빈을 대체하는 기술
- ORM과 관련된 인터페이스가 모여져있는 JAVA에서 제공하는!! 라이브러리
- JPA는 ORM(DB와 객체 간 관계 설정) 을 구체화시킨 스펙을 포함한 구현체 (당연히 ORM이 보다 큰 개념입니다.)
Hibernate
- ORM Framework 중 하나
- JPA의 실제 구현체 중 하나로 현재 JPA 구현체 중 가장 많이 사용됩니다.
Spring Data JPA
- Spring Framework 에서 제공하는 JPA를 편리하게 사용할 수 있게 지원하는 라이브러리입니다.
- Hibernate에서 자주 사용되는 기능을 좀더 쉽게 사용할 수 있도록 구현한 라이브러리입니다.
- CRUD 처리용 인터페이스를 제공합니다. (ORM의 특징)
- 데이터 접근 계층인 Repository 개발 시 인터페이스만 작성하면 구현 객체를 동적으로 생성해서 주입해줍니다. 쉽죠잉?
- JpaRepository 를 상속받는 인터페이스 무조건 생성!
반응형
'백엔드 개발하며 작성한 > Spring' 카테고리의 다른 글
JAP Query로 특정 칼럼의 count 쿼리문 실행하기 (0) | 2021.11.12 |
---|---|
[Spring Boot 프로젝트] AWS EC2로 Spring Boot 배포 (0) | 2021.10.16 |
[Spring Boot] 테스트 코드 작성 (Hello World편) (0) | 2021.10.13 |
[Spring Boot 프로젝트] 1. 프로젝트 생성과 Boot Strap 템플릿 적용(Thymeleaf) (0) | 2021.10.08 |
[Spring Boot] 프로젝트 세팅부터 REST API까지 (0) | 2021.09.26 |