본문 바로가기

DB/JPA

JPA - DB 테이블 자동 생성과 양방향 연관관계 설정

728x90

기본 구조 설명

JPA에서는 DB 테이블을 애플리케이션이 실행될 때 자동으로 생성해주는 기능이 있다. 예를 들어, UserTeam 두 엔티티가 있다고 가정하자.

  • User: 사용자
  • Team: 팀

관계는 다음과 같다:

  • 하나의 팀(Team)에는 여러 명의 유저(User)가 속할 수 있다.
  • 한 유저는 하나의 팀에만 속할 수 있다.

즉, JPA의 연관관계로 표현하면 다음과 같다:

// User.java
@ManyToOne
private Team team;
// Team.java
@OneToMany(mappedBy = "team")
private List<User> users;

application.yml 설정

자동 테이블 생성을 위해 application.yml에 아래와 같이 설정을 추가한다.


spring:
  jpa:
    generate-ddl: true
    hibernate:
      ddl-auto: create
  • generate-ddl: true → 서버 시작 시 DDL 생성 여부
  • ddl-auto: create → DDL 실행 전략 설정

ddl-auto 전략 설명

전략 설명
none DDL 실행 안 함 (기본값)
create 기존 테이블 제거 후 다시 생성
create-drop 앱 실행 시 테이블 생성, 종료 시 제거
update 변경된 엔티티 정보만 적용 (운영 환경에서는 주의)
validate 엔티티와 DB 스키마 비교. 다르면 오류 발생

정리

  • JPA는 연관관계를 통해 객체지향적으로 테이블을 설계할 수 있게 해준다.
  • ddl-auto 옵션은 학습이나 개발 환경에서는 create 또는 update를, 운영 환경에서는 validate 또는 none을 권장한다.
  • 양방향 연관관계를 사용할 땐 무한 루프 주의 (→ @ToString(exclude = ...) 사용) 
728x90
반응형