Spring-Boot JPA: 어노테이션

JPA

소개

  • Java Persistence API
  • Object-Relation Mapping, ORM 프레임워크
  • 비즈니스 로직에 집중 가능
  • 여러 구현체 제공: Hibernate, EclipseLink, DataNucleus 등
  • 객체와 DB 테이블 사이의 매핑
    애플리케이션 객체를 분석해서 적절한 sql를 생성하여 JDBC API를 이용하여 DB 사용

JDBC API 란?

  • Java DataBase Connectivity API
  • 자바 프로그램 내에서 DB의 종류에 상관없이 DB와 관련된 작업들을 처리할 수 있도록 도와주는 API

장점

  • CRUD SQL를 작성할 필요가 없다.
  • 조회된 결과를 객체로 매핑하는 작업도 대부분 자동으로 처리한다.
  • 데이터 저장 계층에서 작성해야 할 코드가 대폭 줄어든다.
  • SQL이 아닌 객체 중심으로 개발하며 생산성과 유지보수가 좋아진다.
  • DB 변경 시 코드를 거의 수정하지 않고 손쉽게 변경할 수 있다.

JPA가 해결해주는 문제점

SQL을 직접 다룰 때 발생하는 문제점

  • DB에 데이터를 관리하려면 SQL 사용
  • 자바로 작성한 애플리케이션은 JDBC API 사용
    => CRUD 반복
  • 해결: JPA를 사용함으로써 개발자는 직접 SQL을 작성하는 것이 아니라 JPA가 제공하는 API를 사용하면 된다.

패러다임의 불일치

  • 애플리케이션이 발전하면서 내부의 복잡성이 커짐
  • 객체지향 프로그래밍은 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공
    예: 추상화, 캡슐화, 정보은닉, 상속, 다형성 등
  • BUT, 관계형 DB는 데이터 중심으로 구조화 -> 위의 객체지향 프로그래밍은과 같은 장치들이 없다.
  • 해결: JPA가 객체와 테이블을 매핑해서 패러다임의 불일치를 개발자 대신 해결해준다.

Spring-boot JPA 어노테이션

객체

@Entity

  • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다.
  • @Entity가 붙은 클래스는 JPA가 관리한다.

제약 사항

  • 기본 생성자는 필수로 구현해야 한다.
  • final 클래스, enum, interface, inner 클래스에는 사용할 수 없다.
  • 저장할 필드에 final을 사용하면 안 된다.

속성

  • name: 엔터티 이름을 지정, 기본값은 클래스 이름

@Table

  • 엔터티와 매핑할 테이블을 지정한다.

속성

  • name: 매핑할 테이블의 이름을 지정
  • catalog: DB의 catalog를 매핑
  • schema: DB 스키마와 매핑
  • uniqueConstraint : DDL 쿼리를 작성할 때 제약 조건을 생성

기본키

@Id

기본키 생성 방법

  1. 기본 키를 직접 할당
    @Id 만 사용
  2. 자동 생성 전략 사용
    @GeneratedValue 추가 및 키 생성 전략 선택

키 생성 전략

  1. IDENTITY: 기본 키 생성을 데이터베이스에 위임한다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private String id; 
  1. SEQUENCE: 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다.
  2. TABLE: 키 생성 테이블을 사용한다.
  3. AUTO: 선택한 데이터베이스의 방식이 따라 위의 세 가지 전략 중 하나를 자동으로 선택한다.

필드

@Column

  • 객체 필드와 DB 테이블 칼럼을 매핑한다.

속성

  • name
    매핑할 테이블의 칼럼 이름을 지정
  • insertable
    • true: 엔터티 저장 시 선언된 필드도 같이 저장
    • false: 데이터베이스에 저장하지 않는다. (읽기 전용일 때 사용)
  • updatable
    • true: 엔터티 수정 시 선언된 필드도 같이 수정
    • false: 데이터베이스를 수정하지 않는다. (읽기 전용일 때 사용)
  • table
    지정한 필드를 다른 테이블에 매핑
  • nullable
    null 허용 여부를 결정
  • unique
    제약 조건을 걸 때 사용
  • columnDefinition
    DB 컬럼 정보를 직접적으로 지정할 때 사용
  • length
    varchar의 길이를 조정(기본값 255)
  • precision, scale
    BigInteger, BigDecimal 타입에서 사용
    각각 소수점 포함 자리수/소수의 자리수를 의미

좋은 웹페이지 즐겨찾기