책을 읽고 정리한 지는 꽤 되어가는 데 스케줄이 계속 이어지다 보니 글 쓰는 일을 계속 미루게 되었다.. 새로 읽고 있는 도서가 있는 데 해당 책도 정리하고 싶은 내용이 많기 때문에 이전 책부터 빠르게 정리하고자 한다. 이번 내용에서 다루는 것들은 엔티티 매핑에 관한 것이다. 책에도 세부적으로 나와있으나 사실 속성이나 어노테이션과 같은 것들은 공식 문서를 한 번씩 들여다보는 것이 큰 도움이 된다. 책을 먼저 보고, 공식 문서도 꼭 읽어보기를 바란다.
JPA를 사용하는 데 가장 중요한 일 중 하나는 엔티티와 테이블을 정확히 매핑하는 것이다. JPA에서 지원하는 매핑을 위한 어노테이션을 크게 4가지로 분류해보자.
레거시 코드에서는 어노테이션이 아닌 XML을 이용한 매핑 정보 구성을 갖기도 한다. 최근 흐름에서는 대부분 어노테이션을 이용한 매핑 기술을 선호하는 것으로 보인다.
@Entity
JPA를 사용해서 테이블과 매핑할 클래스에 사용하는 어노테이션이다.
속성값으로는 name이 존재하여 JPA에서 사용한 엔티티 이름을 지정할 수 있다. 기본값은 클래스 이름을 그대로 사용한다.
@Table
속성값
JPA에서는 단순히 매핑 정보만 지원하는 것 뿐 아니라 해당 정보를 가지고 데이터베이스 스키마를 자동으로 생성하는 기능을 지원한다.
스키마 자동 생성 기능을 사용하면 애플리케이션 실행 시점에 데이터베이스 테이블이 자동으로 생성되므로 개발자가 테이블을 직접 생성하는 소요를 줄일 수 있다. 그러나 스키마 자동 생성 기능이 만든 DDL은 운영 환경에서 사용할 만큼 완벽하지 않을 수 있으므로 개발환경에서 사용하거나 참고하는 정도로 사용하는 것이 좋다. 본인도 프로젝트를 진행하면서 개발단계에서는 DDL을 적극적으로 이용하고 있다.
하이버네이트에서는 다음과 같은 옵션들을 제공한다.
다양한 옵션들이 존재하는 데 validate를 제외한 나머지는 DDL을 수정하는 옵션으로 운영환경에서 사용되지 않는다. 테스트를 진행하는 개발자 환경과 CI 서버에는 create or create-drop을, 테스트 서버에서는 update or validate, 운영서버에서는 validate를 사용하거나 auto 옵션을 사용하지 않는다.
기타로 컬럼 어노테이션에 속성들을 추가하여 null 제약조건이나 길이조건 등을 추가할 수 있다.
글을 정리하다보니 내용이 너무 길어지게 되었다. 기본 키 할당 전략이나 기타 어노테이션에 대한 내용들은 다음글에 정리하고자 한다! 👍