🌱 ORM 이란?
ORM이란 Object-Relational Mapping의 약자로, 객체(Object)와 관계형 데이터(Relational data)를 매핑하기 위한 기술이다.
과거 관계형 데이터를 조회하기 위하여 사용했던 SQL Mapper와의 차이점을 간략하게 알아보자.
- SQL Mapper
- Object와 SQL의 필드를 매핑하여 데이터를 객체화하는 기술이다.
- SQL 문으로 직접 디비를 조작한다.
- DBMS에 종속적이다.
- 관련기술 : Mybatis, jdbcTemplate - ORM
- Object와 DB테이블을 매핑하여 데이터를 객체화하는 기술이다.
- SQL 문을 직접 작성하지 않아도 메서드로 데이터를 조작할 수 있다. (객체 간 관계를 바탕으로 SQL문을 자동으로 생성한다.)
- DBMS에 종속적이지 않다.
- 관련기술 : JPA, Hibernate
🌱 JPA 란?
JPA는 Java Persistence API의 약자로, 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.
여기서 중요하게 여겨야 할 부분은 JPA는 특정 기능을 가지고 있는 라이브러리가 아니고 말 그대로 인터페이스라는 점이다.
따라서 JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus와 같은 ORM 프레임워크를 사용해야 한다.
🌱 Hibernate 란?
Hibernate는 앞서 설명했듯이 JPA 구현체의 한 종류이다. JPA와 Hibernate는 마치 자바의 interface와 해당 interface를 구현한 class와 같은 관계이다.
- 장점
- SQL 작성 없이 메서드 호출만으로 쿼리가 수행되어 생산성이 매우 높아진다.
- 테이블의 컬럼이 추가된다고 가정했을 때, Mybatis의 경우에는 관련 객체와 SQL을 수정해야 하지만, JPA는 객체만 신경 써야 할 확률이 높아 유지보수 측면에서 보다 유리하다.
- JPA는 추상화된 데이터 접근 계층을 제공하기 때문에 특정 벤더에 종속적이지 않아 DB 변경에 보다 유리하다. - 단점
- 메서드 호출만으로 쿼리를 수행하기 때문에 SQL을 직접 작성하는 것보다 성능이 떨어질 수 있다.
- 위와 동일한 이유로 DB 데이터를 조작하는데 세밀함이 떨어질 수 있다.
- 러닝커브가 높다.
🌱 Spring Data JPA 란?
Spring Data JPA는 Spring Framework에서 제공하는 모듈 중 하나로, 개발자가 JPA를 더 쉽고 편하게 사용할 수 있도록 도와준다. 예상 가능하고 반복적인 코드들을 대신 작성해 줘서 코드를 줄여주는 역할을 한다.
이는 JPA를 한 단계 추상화시킨 Repository라는 인터페이스를 제공함으로써 이루어진다. 가령 아래의 코드처럼 자주 사용되는 코드를 개발자가 직접 구현하지 않아도 Spring Data JPA를 통해 사용할 수 있게 된다.
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
/*
Spring Data JPA를 사용한다면,
서비스단에서 호출하는 findAll()을 개발자가 직접 구현하지 않아도 사용 가능하다.
*/
/*
정해진 규칙을 토대로 메서드를 입력하면, 메서드명을 추론하여 쿼리를 유추한다.
*/
User findByUserId(Long userId);
}
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> findAll() {
return userRepository.findAll();
}
public User findUser(String userId) {
return userRepository.findByUserId(userId);
}
}
🌱 JPA, Hibernate, Spring Data JPA 관계
앞서 알아본 JPA, Hibernate, Spring Data JPA를 도식화하면 아래와 같이 표현할 수 있다.
References.
1. 언제나분홍 - ORM이란?
2. DOing - [Spring] Spring Data JPA 이해하기 (feat ORM, JPA)
3. adam2.log - JPA는 도대체 뭘까? (orm, 영속성, hibernate, spring-data-jpa)
4. Suhwan Jee - JPA, Hibernate, 그리고 Spring Data JPA의 차이점
'Spring' 카테고리의 다른 글
[SpringBoot] 단위테스트(Unit Test)와 JUnit (0) | 2023.09.30 |
---|---|
[SpringBoot] 테스트 개념과 종류 (0) | 2023.09.28 |
[Spring] @Transactional (0) | 2023.09.19 |
[SpringBoot] 스프링부트 콘솔 배너 변경 (0) | 2023.04.08 |
[Mybatis] 조회쿼리 성능 향상 (0) | 2023.03.21 |