오늘의 인기 글
최근 글
최근 댓글
Today
Total
12-30 13:56
관리 메뉴

우노

[Kotlin] ORM, JPA, Spring Data JPA 본문

Web_App/Kotlin

[Kotlin] ORM, JPA, Spring Data JPA

운호(Noah) 2024. 12. 18. 15:43

구성 요소 요약

JPA (Java Persistence API)
   ├── ORM (Object-Relational Mapping)
   │    └── Entity
   ├── Spring Data JPA
   │    └── Repository
   │         ├── JpaRepository
   │         └── CrudRepository
  • JPA : ORM을 Java에서 쉽게 사용할 수 있도록 정의한 표준 API입니다.
    • ORM : 객체와 데이터베이스 간 매핑을 처리하는 기술입니다.
      • Entity : 데이터베이스의 테이블과 매핑되는 자바 객체입니다.
    • Spring Data JPA : JPA를 쉽게 사용할 수 있도록 도와주는 Spring 모듈입니다.
      • Repository : 데이터베이스에 접근하기 위한 인터페이스입니다.
        • JpaRepository : 기본적인 CRUD 기능뿐만 아니라 페이징, 정렬, 쿼리 메소드 등을 지원하는 기능이 추가된 인터페이스입니다.
        • CrudRepository : 가장 기본적인 CRUD 기능(생성, 읽기, 수정, 삭제)을 제공하는 인터페이스입니다.

Entity

  • 목적: 데이터베이스 테이블과 매핑되는 자바 객체입니다.

  • 특징: @Entity 어노테이션을 사용하여 데이터베이스 테이블을 자바 클래스와 연결합니다.

  • 예제

      @Entity
      public class Product {
          @Id
          @GeneratedValue(strategy = GenerationType.IDENTITY)
          private Long id;
    
          private String name;
          private Double price;
    
          // Getters, Setters
      }
    

ORM (Object-Relational Mapping)

  • 목적: 데이터베이스와 객체(Entity) 간의 매핑을 관리하는 기술입니다.

  • 장점: SQL을 직접 작성하지 않고 객체 지향적으로 데이터베이스 작업을 처리할 수 있어 생산성과 유지보수성을 높입니다.

  • 예제

      @Entity
      public class User {
          @Id
          @GeneratedValue(strategy = GenerationType.IDENTITY)
          private Long id;
    
          private String name;
          private String email;
    
          // Getters, Setters
      }
    

JPA (Java Persistence API)

  • 목적: Java에서 ORM(Object-Relational Mapping)을 사용하기 위한 표준 API입니다.
  • 기능:
    • Entity 매핑: 객체와 데이터베이스 테이블 간의 매핑을 제공합니다.
    • 영속성 컨텍스트 관리: 엔티티 상태를 관리하여, 데이터의 생명 주기를 처리합니다.
    • JPQL (Java Persistence Query Language): 객체지향적 쿼리 언어를 사용하여 데이터를 조회합니다.
    • 트랜잭션 관리: 데이터 작업의 원자성 보장합니다.
  • 필수 구현체: JPA는 표준 API이므로 Hibernate, EclipseLink, DataNucleus와 같은 구현체가 필요합니다.

Spring Data JPA

  • 목적: JPA를 쉽게 사용할 수 있도록 돕는 Spring 모듈입니다. JPA를 사용한 데이터 접근을 더 간편하게 구현할 수 있게 해줍니다.
  • 기능:
    • 자동 구현: 인터페이스에서 JpaRepository를 상속받으면 기본적인 CRUD 작업이 자동으로 제공됩니다.
    • 쿼리 메소드: 메서드 이름으로 쿼리를 생성할 수 있습니다. 예: findByName(String name)
    • 페이징 및 정렬 지원: PagingAndSortingRepository로 페이징과 정렬 기능을 제공합니다.
    • 커스텀 쿼리: @Query 어노테이션으로 복잡한 쿼리를 정의할 수 있습니다.

Repository

  • 목적: 데이터베이스에 접근하기 위한 인터페이스로, CRUD (Create, Read, Update, Delete) 및 쿼리 메소드 등을 제공합니다.
  • Spring Data JPA의 주요 인터페이스:
    • JpaRepository: 기본적인 CRUD 기능과 더불어 페이징, 정렬, 쿼리 메소드 기능을 제공합니다.
    • CrudRepository: 기본적인 CRUD 기능만 제공합니다.

JpaRepository

  • 목적: Spring Data JPA에서 데이터베이스 작업을 더 간편하게 처리할 수 있도록 돕는 인터페이스입니다.

  • 특징:

    • 기본적인 CRUD 기능과 페이징, 정렬, 쿼리 메소드 기능을 제공합니다.
    • 개발자가 직접 구현하지 않고, Spring Data JPA가 자동으로 구현해줍니다.
  • 기본적인 CRUD 제공:

    • save() : 엔티티 저장
    • findById() : ID로 엔티티 조회
    • findAll() : 모든 엔티티 조회
    • delete() : 엔티티 삭제
  • 메서드 이름에 따른 자동 쿼리 생성:

    • 예를 들어, findByName(String name) 메서드를 작성하면 name 필드를 기준으로 데이터를 조회하는 쿼리가 자동으로 생성됩니다.
  • JpaRepository 예시

      public interface UserRepository extends JpaRepository<User, Long> {
          // name 필드를 기준으로 데이터를 조회하는 쿼리가 자동으로 생성됩니다.
          List<User> findByName(String name);
      }
    • 위 예시에서 UserRepository는 JpaRepository를 상속받아 User 엔티티에 대한 CRUD 작업을 자동으로 제공합니다.
    • findByName 메서드는 name 필드를 기준으로 자동으로 쿼리를 생성하여 데이터를 조회합니다.

'Web_App > Kotlin' 카테고리의 다른 글

[Kotlin] Controller와 Service의 계층 구조  (0) 2024.12.20
[Kotlin] @SqlResultSetMapping  (0) 2024.12.20
[Kotlin] @Entity와 @Repository  (0) 2024.12.18
[Kotlin] DTO와 Entity의 관계  (0) 2024.12.17
[Kotlin] @Scheduled 란?  (0) 2024.12.02
Comments