웹개발/SpringBoot

ORM (Object-Relational Mapping)

bergerac 2025. 5. 21. 09:11

1. ORM 이란 무엇인가?

 

Java와 MySQL 사이의 다리, 객체와 관계형데이터베이스 간의 데이터를 1:1로 매핑해주는 기술이다.

 

  • 객체지향적인 데이터 조작이 가능하다.
  • 반복적인 SQL 작성 없이 CRUD 작업이 가능하다.
  • 특정 DBMS에 종속되지 않고 코드 재사용성이 높다.

 

2. ORM 동작원리

 

  • Entity 클래스: 실제 DB의 테이블과 매핑되는 자바 클래스
  • Field: 해당 클래스 내부의 멤버 변수는 테이블의 열(Column)과 매핑
  • 테이블의 **각 행(Row)**은 자바의 객체 인스턴스에 해당
CREATE TABLE customer (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100)
);

 

이와 매핑되는 Java 코드는 다음과 같이 작성한다.

@Entity
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private String name;
    private String email;
}

3. JPA(Java Persistence API)란?

PA는 자바 진영에서 제공하는 표준 ORM API다. Hibernate, EclipseLink 등이 JPA의 구현체로 존재하며, 스프링 부트에서는 주로 Hibernate가 기본 사용된다. JPA는 아래와 같은 개념들을 중심으로 동작한다:

  • 영속성 컨텍스트(Persistence Context): 엔티티 객체의 생명 주기를 관리하는 공간으로, DB와 연결된 상태에서 객체를 캐싱하고 변경을 추적한다.
  • 엔티티(Entity): 테이블과 매핑되는 클래스
  • 리포지토리(Repository): 객체를 DB에 저장하거나 조회하는 인터페이스

4. 주요 Annotation 정리

ORM에서는 여러 애너테이션을 통해 객체와 DB 간 매핑을 선언적으로 설정할 수 있다.

  • @Entity: 이 클래스가 테이블과 매핑됨을 선언
  • @Id: 기본키(PK) 지정
  • @GeneratedValue: 기본키 생성 전략 설정 (GenerationType.IDENTITY는 MySQL의 AUTO_INCREMENT)
  • @Column: 열(Column)과 매핑되며, name, nullable, length, unique 등의 옵션을 통해 제약 조건 설정 가능
  • @Table: 매핑될 테이블 이름 지정 (기본은 클래스명과 동일)
@Entity(name = "user_table")
@Table(name = "user_table")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "user_name", nullable = false, unique = true, length = 50)
    private String username;
}

 

 

 

'웹개발 > SpringBoot' 카테고리의 다른 글

Controller Mapping Annotation  (0) 2025.05.23
Jpa Repository  (0) 2025.05.22
SpringBoot 활용  (0) 2025.05.20
IoC(제어의 역전),DI(의존성 주입)  (1) 2025.05.19
서블릿(Servlet)vs 스프링부트(SpringBoot)  (1) 2025.05.18