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
반응형
'IT&DEV - IT & 개발 > Backend' 카테고리의 다른 글
MySQL 연결 오류 해결: Authentication plugin 'caching_sha2_password' cannot be loaded 오류 해결 방법 (0) | 2025.03.14 |
---|---|
[SpringBoot] application.properties를 application.yml로 변경하는 방법 (0) | 2025.01.23 |
[Java] Map, List, HashMap, Array 비교하기 - 쉽게 풀어보자! (0) | 2025.01.09 |
POJO (Plain Old Java Object) 에 대한 정리 (0) | 2025.01.08 |
[OMV6] Docker에 Ubuntu와 Mysql 설치 (ifconfig/mysql 패스워드) (0) | 2023.05.25 |
댓글