jpa:
hibernate:
ddl-auto: create
show-sql: true
application.yml내에 ddl-auto를 켜놓으면 JPA가 @Entity를 보고 테이블을 자동으로 생성한다.
따라서 내가 작성한 DDL에 따라 테이블을 생성할 수 없다.
resoucres\schema.sql이라는 파일명으로 DDL을 작성하여 테이블 설계를 하였다.
제약조건에 따라 테이블 생성 순서를 유의 해야한다.
CREATE TABLE USERS (
id UUID PRIMARY KEY ,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ,
username VARCHAR(50) NOT NULL UNIQUE ,
email VARCHAR(100) NOT NULL UNIQUE ,
password VARCHAR(60) NOT NULL ,
profile_id UUID UNIQUE ,
FOREIGN KEY (profile_id) REFERENCES BINARY_CONTENTS(id) ON DELETE SET NULL
);
.
.
.
이렇게 작성한 DDL을 바탕으로 테이블을 만들기 위해서는 jpa의 ddl-auto를 none으로 만들어줘야한다.
yml에 spring.sql.init.mode: always를 넣어줘야 src/main/resources 내 schema.sql(DDL)과 data.sql(DML)을 찾아 실행하게 된다.
mode: always는 Spring Boot가 schema.sql과 data.sql을 언제 실행할지 결정하는 옵션이다.
Spring Boot가 시작될때 DB 종류와 상관없이 SQL 초기화 스크립트를 항상 실행한다는 의미.
mode: never는 SQL 초기화 스크립트 실행안함
(기본값) mode: embedded는 내장 DB(H2...)에서만 실행
spring:
datasource:
url: jdbc:postgresql://localhost:포트/내db
username: 유저이름
password: 비번
driver-class-name: org.postgresql.Driver
# url: jdbc:h2:mem:test
jpa:
hibernate:
ddl-auto: none # ?? ??? update, ??? none ??
show-sql: true # ?? ?? ??
sql:
init:
mode: always
이렇게 설정하고 실행하면 DataGrip에 테이블들이 생성된걸 확인 할 수 있다.

'코드잇 스프린트 > 실습' 카테고리의 다른 글
| Entity를 Controller까지 그대로 노출 할때 발생할 수 있는 문제점 (0) | 2026.03.09 |
|---|---|
| 디스코드 프로젝트 실습: Entity 정의하기(JPA 어노테이션,cascade,고아객체) (0) | 2026.03.05 |
| JPA ERROR : user는 PostgreSQL 예약어라서 테이블명을 따로 정해야한다. (0) | 2026.03.03 |
| PostgreSQL DB 와 Spring Boot(InteliJ) 연동하기 (0) | 2026.03.03 |
| [sprint5] 디스코드 어플리케이션 채널 생성시 NPE 발생 (0) | 2026.02.23 |