Entity 어노테이션

Geun Nam Park·2026년 8월 2일

Spring Boot

목록 보기
6/9

개요

JPA를 활용하여 Entity 코드를 작성할 때, 필요한 어노테이션들 중 대표적인 몇 개의 기능을 간략하게 알아보려고 한다.


@Entity
@Table(
    name = "members",
    uniqueConstraints = {
        @UniqueConstraint(name = "EMAIL_UNIQUE", columnNames = {"email"})
    }
)
@Builder
@Getter // Setter는 무결성을 위해 제외 권장
@NoArgsConstructor(access = AccessLevel.PROTECTED) // JPA용 기본 생성자
@AllArgsConstructor // 모든 필드 생성자
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "user_name", nullable = false, length = 50)
    private String username;

    private String email; // @Column 생략 시 필드명 그대로 컬럼 생성

    @Enumerated(EnumType.STRING) // 반드시 STRING 사용!
    private RoleType roleType;
}

@Entity

데이터베이스의 테이블과 직접 연결되는 핵심 클래스이다.

속성
name:

  • JPA에서 사용할 엔터티 이름을 지정.
  • 생략하면 기본값으로 클래스 이름을 사용.

catalog/schema:

  • 데이터베이스의 catalog나 schema를 지정할 때 사용.
  • 특정 DB 환경에서 테이블의 상위 공간을 명시해야 할 때만 사용.

uniqueConstraints:

  • 테이블 생성 시 복합 유니크 제약조건을 설정.
  • 단일 컬럼이나, 여러 컬럼을 묶어서 유일성을 보장해야 할 때 사용.

주의사항

  • 기본 생성자 필수: @Entity가 붙은 클래스는 파라미터가 없는 public 또는 protected 생성자가 반드시 있어야 한다.
  • final 클래스 사용 불가: JPA가 프록시 객체를 만들어야 하므로 클래스에 final, enum, interface를 사용할 수 없다.

@Id

테이블의 기본키(PK, Primary Key)를 지정한다.
@Entity 클래스 내에 반드시 하나 이상 존재해야 한다.


@GeneratedValue

기본 키의 생성 전략을 설정한다.

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

strategy

  • GenerationType.IDENTITY: DB에 비어있는 채로 넣으면 DB가 알아서 PK값을 채워준다. DB가 알아서 내부의 AUTO_INCREMENT 기능을 작동시켜 1, 2, 3, ... 순서대로 번호가 매겨진다.

  • GenerationType.SEQUENCE: DB 시퀀스를 사용해 값을 생성한다. DB가 생성해 둔 전용 시퀀스에서 번호를 먼저 받아와 엔터티를 할당한다.

  • GenerationType.AUTO: DB 방언에 맞춰 JPA가 자동으로 전략을 선택한다.


@Column

객체 필드를 테이블 컬럼에 매핑하며, 컬럼의 제약조건을 설정한다.

속성
name:
테이블의 실제 컬럼 이름을 지정한다.

nullable:
false로 설정하면 NOT NULL 제약조건이 붙는다.

length:
문자열 데이터의 길이를 제한한다.(기본값 255)


@Enumerated

자바의 Enum(열거형) 타입을 테이블 컬럼에 매핑한다.

주의사항

  • 반드시 @Enuerated(EnumType.STRING)으로 사용해야 한다.
  • EnumType.STRINGenum을 이름 순서대로 저장한다.
  • 기본값인 EnumType.ORDINAL을 쓰면 순서(0, 1, 2, ...)가 저장되어, 추후 Enum사이에 새 값이 추가될 때 데이터가 꼬일 수 있다.

Lombok 필수 어노테이션

반복적으로 작성해야하는 코드들(매서드,생성자 등)을 어노테이션으로 자동 생성해 주는 라이브러리


@Builder

GoF 디자인 패턴 중 하나인 빌더(Builder) 패턴을 어노테이션으로 자동 생성해준다.

속성
객체를 생성할 때 생성자 파라미터의 순서 오류를 방지하고, 코드의 가독성을 극대화한다.

주의사항
생성자를 쓰면 new Member("홍길동", "hong@google.com")처럼 순서를 맞춰야 한다.


@Getter / @Setter

필드 값의 조회(getter)와 변경(setter)을 위한 메스드를 자동으로 생성한다.

주의사항
엔터티에는 데이터 무결성을 위해 @Setter를 가급적 사용하지 않거나 꼭 필요한 곳에만 별도로 메서드를 만드는 것이 좋다.


@NoArgsConstructor

파라미터가 없는 기본 생성자를 자동으로 생성한다.

Tips
JPA는 프록시 기술 구현을 위해 기본 생성자가 필수이다. 무분별한 객체 생성을 막기 위해 @NoArgsConstructor(access = AccessLevel.PROTECTED) 방식을 권장한다.


@AllArgsConstructor

클래스의 모든 필드를 파라미터로 받는 생성자를 자동으로 생성한다.

속성
빌더 패턴(@Builder)과 함께 사용하여 깔끔하게 객체를 생성할 때 자주 조합된다.

0개의 댓글