본문 바로가기
IT&DEV - IT & 개발/Backend

JPA 어노테이션 사용법을 알아보자

by Hoft 2025. 3. 25.
728x90
반응형
반응형

안녕하세요 🙌 
JPA를 처음 접하면 어노테이션이 너무 많아서 헷갈리죠? 😵
그래서 오늘은 JPA에서 자주 사용하는 어노테이션을 하나씩 알아보면서 익혀보고자 합니다

JPA 어노테이션을 제대로 이해하면 DB와 객체 매핑이 쉬워지고, 성능도 최적화할 수 있어요.


1. 기본 키 관련 어노테이션 🔑

@Id

  • 엔티티에서 기본 키(Primary Key) 로 사용할 필드에 붙입니다.
  • PK가 없으면 JPA에서 관리할 수 없어요!
@Entity
public class User {
    @Id
    private Long id;
}

@GeneratedValue

  • 기본 키 값을 자동 생성하도록 설정합니다.
  • strategy 속성으로 생성 전략을 지정할 수 있어요.
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

GenerationType 전략 종류

  • IDENTITY : DB의 AUTO_INCREMENT 사용 (MySQL에서 많이 씀)
  • SEQUENCE : DB의 시퀀스(Sequence) 사용 (Oracle, PostgreSQL에서 사용)
  • TABLE : 별도의 키 생성용 테이블을 사용 (잘 안 씀)
  • AUTO : DB에 맞게 자동 선택 (권장 X, 명확하게 지정하는 게 좋음)

2. 연관 관계 매핑 어노테이션 🔄

@ManyToOne

  • N:1 관계에서 사용하는 어노테이션입니다.
  • 기본적으로 EAGER(즉시 로딩)인데, 성능을 위해 LAZY(지연 로딩)로 설정하는 게 좋음.
@Entity
public class Order {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private User user;
}

@OneToMany

  • 1:N 관계에서 사용.
  • mappedBy 속성으로 관계의 주인을 설정해야 합니다.
  • 기본적으로 LAZY 로딩이라 성능 최적화에 유리해요.
@Entity
public class User {
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private List<Order> orders = new ArrayList<>();
}

@ManyToMany

  • N:N 관계에서 사용 (예: 학생(Student)과 강의(Course))
  • @JoinTable을 사용해 중간 테이블을 지정할 수 있음.
@Entity
public class Student {
    @ManyToMany
    @JoinTable(name = "student_course",
               joinColumns = @JoinColumn(name = "student_id"),
               inverseJoinColumns = @JoinColumn(name = "course_id"))
    private List<Course> courses = new ArrayList<>();
}

3. 기타 유용한 어노테이션 🛠️

@Column

  • 특정 필드의 DB 컬럼 속성을 설정할 때 사용합니다.
  • nullable, length, unique 같은 속성을 지정할 수 있어요.
@Column(nullable = false, length = 100, unique = true)
private String email;

@Enumerated

  • enum 타입을 사용할 때 필요합니다.
  • ORDINAL(숫자)보다는 STRING(문자열) 방식이 유지보수에 좋아요.
@Enumerated(EnumType.STRING)
private UserStatus status;

@Lob

  • 대용량 데이터를 저장할 때 사용 (예: BLOB, CLOB)
@Lob
private String description;

@CreationTimestamp, @UpdateTimestamp

  • 엔티티 생성/수정 시 자동으로 시간을 기록해줍니다.
@CreationTimestamp
private LocalDateTime createdAt;

@UpdateTimestamp
private LocalDateTime updatedAt;

 

오늘은 JPA에서 가장 많이 쓰이는 어노테이션을 정리해봤어요!

어노테이션을 잘 활용하면 코드가 간결해지고 유지보수가 편해집니다.
JPA를 더 깊이 이해하고 싶다면 직접 코드로 실험해보는 걸 추천드려요! 💪

 

 

728x90
반응형

댓글