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 JPA는 JPA를 쉽게 사용할 수 있게 만들어놓은 하나의 모듈을 말한다.
○ 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 등록
○ 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 |