1 minute read

Updated:

스프링 부트에서 JPA로 데이터베이스 다루기

JPA란?

  • 자바 표준 ORM
  • 쿼리를 매핑하는 SQL Mapper(Mybatis, iBatis)와 달리 객체를 매핑하는 것이 ORM(JPA)
  • 지향하는 바가 다른 2개 영역(객체지향 프로그래밍 언어와 관계형데이터베이스) 간의 패러다임 일치를 시켜줌.
  • 개발자는 객체지향적 프로그래밍을 하고, JPA는 이를 관계형데이터베이스에 맞게 SQL 대신 생성하여 실행함.

Spring Data JPA

  • 인터페이스인 JPA를 사용하기 위해선 구현체가 필요함.
  • 구현체들을 더 쉽게 사용하고자 추상화시킨 Spring Data JPA 모듈을 이용하여 JPA 기술을 다룸.

장점

  1. 구현체 교체의 용이성
  2. 저장소 교체의 용이성
    • Hibernate 외 다른 구현체로 쉽게 교체하기 위함
    • 관계형 데이터베이스 외에 다른 저장소(대용량 데이터 처리 시 MongoDB)로 쉽게 교체하기 위함. Spring Data 하위 프로젝트들은 기본적인 CRUD 인터페이스가 동일하기 때문.

Entity 클래스

  • JPA 사용시 테이블과 링크될 클래스
  • 주요 어노테이션
    @Entity //테이블과 링크될 클래스임을 나타냄.
    
    @Id //해당 테이블의 PK. 이때, PK는 Long 타입의 Auto_increment를 추천. 주민등록번호, 복합키는 유니크 키를 별도로 추가.
    
    @GeneratedValue(strategy = GenerationType.IDENTITY) //PK 생성 규칙.
    
    @Column(length = 500, nullable = false) //테이블의 칼럼을 나타냄. 굳이 선언하지 않아도 해당 클래스의 필드는 모두 칼럼이 됨. 기본값 외에 추가로 변경이 필요한 옵션이 있을 때 사용
    

Entity 클래스에는 절대 Setter 메소드를 생성하지 않음.

  • 해당 클래스의 인스턴스 값들이 언제 어디서 변해야하는지 코드상 명확히 구분할 수 없으므로, 차후 변경 시 복잡해짐.
  • 대신, 값 변경이 필요한 경우 해당 이벤트에 맞는 public 메소드를 호출하여 변경.
  • 생성자 대신 @Builer를 통해 제공하는 빌더 클래스 사용

JpaRepository 생성

  • ibatis나 Mybatis에서 Dao라고 불리는 DB layer 접근자.
  • JPA에선 Repository라 부르며 인터페이스로 생성.
  • JpaRepository<Entity 클래스, PK타입>
  • Entity 클래스와 기본 Entity Repository는 함께 위치해야 함. 도메인 패키지에서 함께 관리하는 것이 기본.