개발 일지/Spring

[Spring] 엔티티 매핑

미숫가루설탕많이 2023. 2. 23. 18:01

 JPA를 이용해서 데이터베이스의 테이블과 상호 작용 하기 위해서는 데이터베이스의 테이블과 엔티티 클래스 간의 매핑 작업이 필요하다.

 

 Spring JPA에서 엔티티 매핑은 객체지향 프로그래밍과 관계형 데이터베이스 간의 매핑을 지원한다. 이를 통해, 객체 모델과 데이터 모델 간의 일관성을 유지할 수 있고 객체를 사용하여 데이터베이스 작업을 수행할 수 있다.

 

 

 

 

엔티티(Entity)

 

 엔티티는 데이터베이스에서 저장되는 데이터를 나타내는 클래스이고 데이터베이스의 테이블과 매핑된다.

 

 @Entity 애너테이션을 사용해서 엔티티 클래스를 선언할 수 있다.

 

 이 클래스는 기본 생성자를 가져야 하며, 모든 필드는 기본 생성자나 매개변수가 있는 생성자를 통해서 설정될 수 있어야 한다.

 

 각 엔티티 클래스는 테이블의 열(column)에 해당하는 필드를 갖는다. 이 필드는 데이터베이스의 열과 유사한 형식과 제약 조건을 가지며, 데이터베이스의 테이블과 일치해야 한다.

 

 필드는 @Column 애너테이션을 사용하여 매핑한다.

 

 또한, 엔티티 클래스는 @Id 애너테이션을 사용해서 엔티티를 고유하게 식별하는 필드를 지정해야 한다. 이 필드는 일반적으로 데이터베이스 테이블의 기본 키(primary key)와 매핑된다.

 

 이렇게 Entity 클래스를 정의하면 Spring JPA는 객체를 데이터베이스의 레코드로 변환하거나 데이터베이스 레코드를 객체로 변환하는 작업을 자동으로 수행한다.

 이를 통해 개발자는 데이터베이스와 직접 상호 작용하는 코드를 작성하지 않아도 된다는 큰 이점이 있다.

 

 

 

 

엔티티와 테이블 매핑

 

  • @Entity 애너테이션은 클래스 레벨에 추가하면 JPA의 관리대상 엔티티가 된다.

  • 엔티티 클래스가 테이블 스키마 명세의 역할을 하길 바란다면 @Table 애너테이션에 테이블명을 지정해 줄 수 있다.

  • 클래스 이름 중복 등의 특별한 이유가 없으면 @Entity와 @Id 애너테이션만 추가한다.

  • 기본키 생성 전략으로 IDENTITY 또는 SEQUENCE 전략을 사용하면 데이터베이스에서 지원해 주는 AUTO_INCREMENT 또는 SEQUENCE를 이용할 수 있다.

  • @Column 정보를 명시적으로 지정하면 다른 누군가가 엔티티 클래스 코드를 확인했을 때 테이블 설계가 어떤 식으로 되어 있는지 알아보기 쉽다.

  • 엔티티 클래스 필드 타입이 Java의 원시타입일 경우, @Column 애너테이션을 통해 최소한 'nullable = false'을 설정해 에러를 미연에 방지할 수 있다.

  • @Transient 애너테이션을 필드에 추가하면 JPA가 테이블 컬럼과 매핑하지 않겠다는 의미로 인식한다. 주로 임시 데이터를 메모리에서 사용하기 위한 용도로 사용된다.

  • 테이블에 이미 저장되어 있는 enum 순서 번호와 enum에 정의되어 있는 순서가 일치하지 않게 되는 문제를 피하려면 EnumType.STRING을 사용하면 된다.

  • java.util.Date, java.util.Calendar 타입으로 매핑하기 위해서는 @Temporal 애너테이션을 추가해야 하지만 LocalDate, LocalDateTime 타입의 경우, @Temporal 애너테이션은 생략해도 된다.