SpringBoot

[SpringBoot] ORM, JPA

wwxs 2024. 10. 16. 09:16

ORM (Object Relational Mapping)

  • 객체와 관계형 데이터베이스 간의 데이터를 매핑해주는 기술
  • 데이터베이스의 테이블과 애플리케이션의 객체 간의 구조적 불일치를 해결하는 솔루션

ORM의 특징

  • 객체와 테이블이 매핑: 1:1로 연결하여 데이터를 매핑
  • 객체지향적인 데이터 조작: SQL 대신 자바 객체 메서드로 CRUD 작업 수행
  • 반복적인 SQL 작성 없이 데이터 조작 가능, DBMS에 독립적
  • 학습 곡선 높음, 복잡한 쿼리 작성 어려움

ORM의 동작 원리

  • 각 테이블은 클래스에, 테이블의 각 행(row)은 객체에 매핑
  • Entity - 데이터베이스 테이블과 매핑되는 클래스
  • Field: 클래스의 필드는 테이블의 열(column)에 해당

 

JPA (Java Persistence Api)

  • ORM의 종류 중 하나
  • Java 애플리케이션에서 관계형 데이터베이스를 쉽게 다룰 수 있는 ORM 표준

영속성 컨텍스트

  • 엔터티의 생명 주기를 관리하는 공간
  • DB와의 연결을 유지하면서 엔터티 객체들을 관리

 

더보기
 // === 고객 테이블(Customer)
    create table Cutomer (
            id int PRIMARY KEY AUTO_INCREMENT,
            name VARCHAR(50),
            email VARCHAR(50)
    );

 

  // === 고객 클래스(Customer)
    @Entity
    public class Customer {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;

        private String name;
        private String email;
    }

 

 

ORM 에서 사용되는 주요 어노테이션

1. @Entity

  • 클래스를 DB 테이블과 매핑할 때 사용
  • 옵션 없이 사용 가능
  • +) name 옵션: 엔터티 이름을 지정, 테이블명과 다를 경우 명시

2. @Id

  • 해당 필드를 Db 테이블의 기본 키로 지정
  • 옵션 없이 사용, 다른 어노테이션과 함께 기본 키 생성 방식이나 타입 설정 가능
  • +) 주로 GeneratedValue와 함께 사용

3. @GeneratedValue

  • 기본 키 자동 생성 전략 설정
  • +) 다양한 옵션이 있음
    • strategy옵션: GenerationType.IDENTITY(auto_increment)

4. @Column

  • 필드를 특정 테이블 열과 매핑
  • 생략 시 기본으로 필드 이름이 열 이름으로 사용
  • +) 다양한 옵션이 있음
    • name옵션: 열 이름 지정
    • nullable옵션: 열이 null값을 허용할 지 여부를 설정 (기본값 true)
    • length옵션: String 타입의 열 길이를 지정 (기본값 255)
    • unique옵션: 해당 필드의 값이 유일해야 하는지 여부를 지정 (기본값 false)

5. @Table

  • 클래스가 어떤 테이블과 매핑되는지 명시
  • +) 생략 시 기본으로 클래스 이름이 테이블 이름으로 사용
  • +) name 옵션: 클래스의 이름과 테이블의 이름이 다를 시 사용

cf) 각 옵션들을 '옵션명=옵션사항'으로 명시한다, 각 옵션은 ,(콤마)로 구분한다.

더보기
@Column(name = "user_password", nullable = false, unique = true)

 

JPA(ORM, 객체와 RDBMS의 연결) vs MyBatis(SQL Mapper, SQL 중심 접근)

 

환경설정

  • bulid.gradle
    • 필요한 의존성: Spring Data JPA, MySQL Driver
  • application.properties, application.yml
    • 애플리케이션 설정: 연결할 DB와 사용자 정보, 비밀번호 등을 설정