스프링 - Spring Data JPA란 무엇일까?

2024. 8. 9. 10:47스프링

2024/08/09

 

 

※   JPA, Spring Data JPA의 개념과 사용방법에 대해 알아보자


   ▶ 
JPA란 무엇일까?

      ●   DB를 직접 다룰때의 문제점
         ✅ 애플리케이션에서 아래 형태의 객체 데이터를 DB에 저장해서 관리해야한다면 어떻게 해야 할까?

public class Memo {
    private Long id;
    private String username;
    private String contents;
}

              1)  DB 테이블 만들기

create table memo (
       id bigint not null auto_increment,
        contents varchar(500) not null,
        username varchar(255) not null,
        primary key (id)
);

              2)  애플리케이션에서 SQL 작성

String sql = "INSERT INTO memo (username, contents) VALUES (?, ?)";
String sql = "SELECT * FROM memo";

              3)  SQL을 JDBC를 사용해서 직접 실행해줘야 합니다.

jdbcTemplate.update(sql, "Robbie", "오늘 하루도 화이팅!");
jdbcTemplate.query(sql, ...);

              4) SQL 결과를 객체로 직접 만들어줘야 합니다.

@Override
public MemoResponseDto mapRow(ResultSet rs, int rowNum) throws SQLException {
		// SQL 의 결과로 받아온 Memo 데이터들을 MemoResponseDto 타입으로 변환해줄 메서드
		Long id = rs.getLong("id");
		String username = rs.getString("username");
		String contents = rs.getString("contents");
		return new MemoResponseDto(id, username, contents);
}


         ✅ SQL 의존적이라 변경에 취약
           ○ 
메모 데이터에 비밀번호를 추가해야 한다면?

public class Memo {
    private Long id;
    private String username;
    private String contents;
		
		// 비밀번호 추가
		private String password;
}

              1)  SQL을 직접 수정해야 한다.

String sql = "INSERT INTO memo (username, contents, password) VALUES (?, ?, ?)";

              2)  MemoResponseDto 객체에 값을 넣어주는 부분도 당연히 추가한다.

📌  단순히 메모장에 비밀번호 하나 더 추가했는데 해야하는 일들이 엄청 많이 생긴다.
       이처럼 ORM이 없는 환경에서는 백엔드 개발자가 비즈니스 로직 개발보다,
       SQL 작성 및 수정에 더 많은 노력을 들여야 했었다.

 

 

   ▶  ORM이란?

💡 ORM : Object-Relational Mapping
      Object : "객체" 지향 언어 (자바, 파이썬)
      Relational : "관계형" 데이터베이스 (H2, MySQL)

 

📌  반복적이고 번거로운 애플리케이션 단에서의 SQL 작업을 줄여주기 위해서
       ORM(객체 관계 매핑)기술들이 등장하게 된.

       ●    ORM은 이름 그대로 객체와 DB의 관계를 매핑 해주는 도구
         ○    객체 즉, 자바의 클래스와 DB의 데이터를 직접 매핑 하려면 앞서 살펴본 것 처럼 매우 번거롭고 많은 작업들이 필요했지만 ORM을 사용하면 이를 자동으로 처리해준다.

 


   ▶  JPA란?

💡 JPA: Java Persistence API
      자바 ORM 기술에 대한 표준 명세

 

 

       ●    JPA는 Java ORM 기술의 대표적인 표준 명세를 뜻한다.


         ○     JPA는 애플리케이션과 JDBC 사이에서 동작되고 있다.
         ○     JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리해준다.
         ○    또한 객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB 작업을 처리할 수 있다.



   ▶  하이버네이트(Hibernate)란?

       ●    JPA 는 표준 명세이고, 이를 실제 구현한 프레임워크사실상 표준하이버네이트다.
       ●    스프링 부트에서는 기본적으로 ‘하이버네이트’ 구현체를 사용 중이다.

 


   ▶  Spring Data JPA란?

 


       ●   Spring Data JPAJPA를 쉽게 사용할 수 있게 만들어놓은 하나의 모듈을 말한다.
         ○   JPA를 추상화시킨 Repository 인터페이스를 제공한다.

       ●    Repository 인터페이스 Hibernate와 같은 JPA 구현체를 사용해서 구현한 클래스를 통해 사용된다.
         ○    개발자들은 Repository 인터페이스를 통해 JPA를 간편하게 사용할 수 있다.

 

   ▶  Spring Data JPA의 SimpleJpaRepository



       ●    Spring Data JPA에서는 JpaRepository 인터페이스를 구현하는 클래스를 자동으로 생성해준다.
         ○    Spring 서버가 뜰 때 JpaRepository 인터페이스를 상속받은 인터페이스가 자동으로 스캔이 되면 ➡️
         ○    해당 인터페이스의 정보를 토대로 자동으로 SimpleJpaRepository 클래스를 생성해 주고 ➡️
         ○    이 클래스를 Spring Bean’으로 등록한다.


         👉  따라서 인터페이스의 구현 클래스를 직접 작성하지 않아도 JpaRepository 인터페이스를 통해 JPA의 기능을 사용할 수 있다.

 

   ▶  Spring Data JPA 사용 방법

      ●    JpaRepository 등록

[그림1] JPA 등록 예시


          ○    JpaRepository<"@Entity 클래스", "@Id의 데이터 타입">를 상속받는 interface로 선언한.
            -  Spring Data JPA에 의해 자동으로 Bean 등록된다.
            -  제네릭스의 @Entity 클래스 위치에 Memo Entity를 추가했기 때문에 해당 MemoRepository는 DB의 memo 테이블과 연결되어 CRUD 작업을 처리하는 인터페이스가 된다.

 

 

 

 

 지금까지 JPA와 Spring Data JPA의 개념과 사용방법에 대해 알아보았습니다. 

 


※ 위 이미지들은 스파르타코딩클럽에 저작권이 있으므로 무단 도용 금지 및 상업 목적으로 사용할 수 없습니다.

'스프링' 카테고리의 다른 글

스프링 - 영속성 컨텍스트란?  (0) 2024.08.13
스프링 - Entity란?  (0) 2024.08.12
스프링 - IoC Container와 Bean  (0) 2024.08.08
쿠키와 세션이란 무엇일까?  (0) 2024.08.05
스프링 - IoC와 DI의 개념  (0) 2024.08.02