[도서 리뷰] - 자바 ORM 표준 JPA 프로그래밍 ( 엔티티 매핑 )

DevHwan·2023년 3월 4일
0

들어가며

책을 읽고 정리한 지는 꽤 되어가는 데 스케줄이 계속 이어지다 보니 글 쓰는 일을 계속 미루게 되었다.. 새로 읽고 있는 도서가 있는 데 해당 책도 정리하고 싶은 내용이 많기 때문에 이전 책부터 빠르게 정리하고자 한다. 이번 내용에서 다루는 것들은 엔티티 매핑에 관한 것이다. 책에도 세부적으로 나와있으나 사실 속성이나 어노테이션과 같은 것들은 공식 문서를 한 번씩 들여다보는 것이 큰 도움이 된다. 책을 먼저 보고, 공식 문서도 꼭 읽어보기를 바란다.

엔티티 매핑

JPA를 사용하는 데 가장 중요한 일 중 하나는 엔티티와 테이블을 정확히 매핑하는 것이다. JPA에서 지원하는 매핑을 위한 어노테이션을 크게 4가지로 분류해보자.

  • 객체와 테이블 매핑 : Entity, Table
  • 기본키 매핑 : Id
  • 필드와 컬럼 매핑 : Column
  • 연관관계 매핑 : ManyToOne, JoinColumn

레거시 코드에서는 어노테이션이 아닌 XML을 이용한 매핑 정보 구성을 갖기도 한다. 최근 흐름에서는 대부분 어노테이션을 이용한 매핑 기술을 선호하는 것으로 보인다.

@Entity

JPA를 사용해서 테이블과 매핑할 클래스에 사용하는 어노테이션이다.

속성값으로는 name이 존재하여 JPA에서 사용한 엔티티 이름을 지정할 수 있다. 기본값은 클래스 이름을 그대로 사용한다.

  • 기본 생성자가 반드시 필요하다.
  • 필드에 final 키워드를 사용할 수 없다.
  • final 클래스, enum, interface, inner 클래스 등에 사용할 수 없다.

@Table

속성값

  • name : 테이블 이름을 지정할 수 있다. 기본값으로 엔티티 이름을 사용한다.
  • catalog : catalog 기능이 있는 데이터베이스에서 catalog를 매핑한다. catalog는 데이터베이스의 메타데이터들로 구성된 데이터 베이스 내의 인스턴스를 의미한다.
  • schema : schema 기능이 있는 데이터베이스에서 schema를 매핑한다.
  • uniqueConstraints : DDL 생성 시에 유니크 제약조건을 생성한다. 2개 이상의 복합 유니크 제약 조건을 생성할 수 있다.

데이터베이스 스키마 자동생성

JPA에서는 단순히 매핑 정보만 지원하는 것 뿐 아니라 해당 정보를 가지고 데이터베이스 스키마를 자동으로 생성하는 기능을 지원한다.

주의사항

스키마 자동 생성 기능을 사용하면 애플리케이션 실행 시점에 데이터베이스 테이블이 자동으로 생성되므로 개발자가 테이블을 직접 생성하는 소요를 줄일 수 있다. 그러나 스키마 자동 생성 기능이 만든 DDL은 운영 환경에서 사용할 만큼 완벽하지 않을 수 있으므로 개발환경에서 사용하거나 참고하는 정도로 사용하는 것이 좋다. 본인도 프로젝트를 진행하면서 개발단계에서는 DDL을 적극적으로 이용하고 있다.

하이버네이트에서는 다음과 같은 옵션들을 제공한다.

  • create : 기존 테이블을 제거하고 새로 생성한다. ( 애플리케이션 시작되는 시점 )
  • create-drop : 애플리케이션이 종료되는 시점에 생성된 DDL을 제거한다. ( 애플리케이션이 시작되는 시점에 제거하고 생성한 후 종료될 때 다시 제거 )
  • update : 데이터베이스 테이블과 엔티티 매핑정보를 비교하여 변경 사항을 수정한다.
  • validate : 데이터베이스 테이블과 엔티티 매핑정보를 비교하여 차이가 있으면 경고 메세지와 애플리케이션 실행을 하지 않는다. DDL을 수정하지 않는다. ( update와의 차이점 )

다양한 옵션들이 존재하는 데 validate를 제외한 나머지는 DDL을 수정하는 옵션으로 운영환경에서 사용되지 않는다. 테스트를 진행하는 개발자 환경과 CI 서버에는 create or create-drop을, 테스트 서버에서는 update or validate, 운영서버에서는 validate를 사용하거나 auto 옵션을 사용하지 않는다.

기타로 컬럼 어노테이션에 속성들을 추가하여 null 제약조건이나 길이조건 등을 추가할 수 있다.

마무리

글을 정리하다보니 내용이 너무 길어지게 되었다. 기본 키 할당 전략이나 기타 어노테이션에 대한 내용들은 다음글에 정리하고자 한다! 👍

profile
달리기 시작한 치타

0개의 댓글