반응형
JPA에서는 애플리케이션 로딩 시점에 DB 테이블을 자동으로 생성하는 기능을 지원해준다. 편리하긴 하지만 운영 환경에서 그대로 사용하지는 않거나 다듬어 사용하고, 로컬이나 개발 단계에서 사용하기 편리한 기능이다.
해당 기능을 사용하면 DDL을 자동 생성하며 데이터베이스 방언을 활용해서 각 DBMS에 맞는 적절한 DDL을 생성해 준다. 스프링 프로젝트의 경우 application.yml에서 해당 값을 설정할 수 있으며 jpa.hibernate.ddl-auto에 create 값을 넣어주면 자동으로 JPA가 테이블을 생성해준다.
jpa:
hibernate:
ddl-auto: create
실제 위처럼 설정을 하고 애플리케이션을 실행하면 아래와 같이 DDL 쿼리가 날아가는 것을 볼 수 있다.
ddl-auto 옵션
- create: 기존 테이블 삭제 후 다시 생성(DROP + CREATE)
- create-drop: create와 동일하지만 종료 시점에 DROP
- update: 변경 사항만 반영(운영에 사용하면 안됨! 지우는 것은 반영X 추가만 반영!)
- validate: 테이블이 정상 매핑되었는지 확인
- none: 아무 동작도 하지 않음(아무값이나 적어도 됨)
스키마 자동 생성 기능 주의할 점
- 운영 장비에는 절대 create, create-drop, update를 사용하면 안된다!!!
- 개발 초기에는 create 또는 update
- 테스트 서버는 update 또는 validate
- 스테이징과 운영서버는 validate 또는 none
DDL 생성 기능
어노테이션을 활용해서 DDL 생성 시에 컬럼에 제약 조건을 걸어줄 수 있다. 해당 기능은 런타임에 영향을 주지 않고 DB 자체에만 영향을 끼친다.
@Column
위 어노테이션을 활용해서 해당 컬럼에 제약 조건을 설정해줄 수 있다.
- unique: 해당 컬럼을 고유값으로
- length: 해당 컬럼값의 길이를 제한
- nullable: 해당 컬럼이 not null인지를 결정
@Entity
@NoArgsConstructor
public class Member {
@Id
private Long id;
@Column(nullable = false, length = 10) // null 허용, 길이 제한
private String name;
}
댓글