IT

[Spring] ORM, JPA, Hibernate, Spring Data JPA 개념

data-cloud 2025. 1. 24. 00:30
반응형

 

🌱 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

 

SQL Mapper - Mybatis

 

ORM - JPA

 

반응형

 

🌱 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의 차이점

 

반응형

'IT' 카테고리의 다른 글

[SpringBoot] 단위테스트(Unit Test)와 JUnit  (1) 2025.01.24
[SpringBoot] 테스트 개념과 종류  (1) 2025.01.24
[Spring] @Transactional  (1) 2025.01.24
[Java] Checked Exception과 Unchecked Exception  (3) 2025.01.22
[Java] java.time 패키지  (2) 2025.01.22