Spring/팀스파르타

17. JPA란 무엇일까? Entity란 무엇일까?

열심히 해 2024. 11. 1. 21:07

ORM : Object-Relational Mapping, 객체 관계 맵핑

Object : "객체"지향 언어 (자바, 파이썬)

Relational : "관계형" 데이터베이스 (H2, MySQL)

Mapping

 

반복적이고 번거로운 애플리케이션 단에서의 SQL 작업을 줄여주기 위해서 ORM 기술들이 등장 하게 됩니다.

 

 

JPA: Java Persistence API 

자바 ORM 기술에 대한 표준 명세

 

 

 

 

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

 

  • 하이버네이트(Hibernate)란?
    • JPA 는 표준 명세이고, 이를 실제 구현한 프레임워크 중 사실상 표준이 하이버네이트입니다.
    • 스프링 부트에서는 기본적으로 ‘하이버네이트’ 구현체를 사용 중입니다.
    사실상 표준 (de facto, 디 팩토) 보통 기업 간 치열한 경쟁을 통해 시장에서 결정되는 비공식적 표준입니다.

 

 

 

 


 

 

 

Entity: JPA에서 관리되는 클래스(객체)

 

Entity 클래스는 DB의 테이블과 매핑되어 JPA에 의해 관리됩니다.

 

@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
@Table(name = "memo") // 매핑할 테이블의 이름을 지정
public class Memo {
    @Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // nullable: null 허용 여부
    // unique: 중복 허용 여부 (false 일때 중복 허용)
    @Column(name = "username", nullable = false, unique = true)
    private String username;

    // length: 컬럼 길이 지정
    @Column(name = "contents", nullable = false, length = 500)
    private String contents;
}

 

  • @Entity : JPA가 관리할 수 있는 Entity 클래스로 지정할 수 있습니다.
    • @Entity(name = "Memo") : Entity 클래스 이름을 지정할 수 있습니다. (default: 클래스명)
    • JPA가 Entity 클래스를 인스턴스화 할 때 기본 생성자를 사용하기 때문에 반드시 현재 Entity 클래스에서 기본 생성자가 생성되고 있는지 확인해야 합니다.

 

 

  • @Table : 매핑할 테이블을 지정해줍니다.
    • @Table(name = "memo") : 매핑할 테이블의 이름을 지정할 수 있습니다. (default: Entity 명)

 

 

  • @Id : 테이블의 기본 키를 지정해줍니다.
    • 이 기본 키는 영속성 컨텍스트에서 Entity를 구분하고 관리할 때 사용되는 식별자 역할을 수행합니다.
    • 따라서 기본 키 즉, 식별자 값을 넣어주지 않고 저장하면 오류가 발생합니다.

 

 

  • @Column :
    • @Column(name = "username") : 필드와 매핑할 테이블의 컬럼을 지정할 수 있습니다. (default: 객체의 필드명)
    • @Column(nullable = false) : 데이터의 null 값 허용 여부를 지정할 수 있습니다. (default: true)
    • @Column(unique = true) : 데이터의 중복 값 허용 여부를 지정할 수 있습니다. (default: false)
    • @Column(length = 500) : 데이터 값(문자)의 길이에 제약조건을 걸 수 있습니다. (default: 255)

 

 

  • @Id : 테이블의 기본 키를 지정해줍니다.
    • 이 기본 키는 영속성 컨텍스트에서 Entity를 구분하고 관리할 때 사용되는 식별자 역할을 수행합니다.
    • 따라서 기본 키 즉, 식별자 값을 넣어주지 않고 저장하면 오류가 발생합니다.

 

 

  • @GeneratedValue 옵션을 추가하면 기본 키 생성을 DB에 위임할 수 있습니다.
    • 여러가지 전략 중 IDENTITY 전략을 살펴보겠습니다.
    • @GeneratedValue(strategy = GenerationType.IDENTITY**)**
      • id bigint not null auto_increment : auto_increment 조건이 추가된 것을 확인할 수 있습니다.
      • 해당 옵션을 추가해주면 개발자가 직접 id 값을 넣어주지 않아도 자동으로 순서에 맞게 기본 키가 추가됩니다.