dummy data
ํ๋ก ํธ์๋์ ํ ์คํธ๊ฐ ํ์ํ๋ฐ ์์ง ๋ฐฑ์๋์์ ๋ฐ์ดํฐ ์ ๋ ฅ์ด ๋ถ๊ฐ๋ฅํ ์ํฉ์ด๋ค...! ๊ทธ๋ ๋๋ฏธ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ ๋ ฅํ๋ ๋ฐฉ์์ ์ฌ์ฉํด๋ณด์. ๋๋ฏธ๋ฐ์ดํฐ๋ ์ค์ ๋ฐ์ดํฐ์ ๊ฐ์ ํํ๋ก ๋ง๋ค์ด์ง ๊ฐ์ง ๋ฐ์ดํฐ๋ผ๊ณ ํ ์์๋ค. ๊ฐ๋ฐ๊ณผ์ ์์ ํ ์คํธ๋ฅผ ์งํํ๊ฑฐ๋, ์ฑ๋ฅ์ ์ฒดํฌํ ๋ ์ฌ์ฉํ ์์๋ค.
๊ฐ์ฅ๋จผ์ ddl-auto์ ๋ํด์ ์์๋ณด์.
ddl-auto
ddl-auto๋ ์คํ๋ง๋ถํธ์ JPA ์ค์ ์์ ์ฌ์ฉ๋๋ ์์ฑ์ด๋ค. ์ด์์ฑ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์คํค๋ง ์์ฑ ์ ๋ต์ ์ค์ ํ๋๋ฐ ์ฌ์ฉํ๋ค. ์ด๋ ์ฌ์ฉ๋๋ ์ต์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. none : ๊ธฐ๋ณธ์ค์ ๊ฐ, Hibernate๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์์ฑํ์ง ์๋๋ค.
2. validate : hibernate๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋ Entity์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ด ์ผ์นํ๋์ง ํ์ธํ๋ค.
3. update : ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ ์๋์ผ๋ก ์์ ํ๋๋ก ํ๋ค. ๋ง์ฝ Entity์ ์๋ก์ด ํ๋๊ฐ ์ถ๊ฐ๋ ์, ๊ทธ์ ๋ํ ์๋ก์ด column์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์ถ๊ฐ๋๋ค.
4. create : ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ ๋ง๋ค ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์์ฑํ๊ณ , ์ข ๋ฃ ์์ ์คํค๋ง๋ฅผ ์ญ์ ํ๋ค.
5. create-drop : create์ ๋น์ทํ๋ค. ํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ์์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์ญ์ ํ๋ค.
# ์ค์ : ์ค์ ์ด์ํ๊ฒฝ์์๋ ddl-auto ์ค์ ์ none , validate๋ก ์ค์ ํด์ผํ๋ค.
๊ฐ๋ฐ ๋์ค์ ๋๋ฏธ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋ ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๋๋ฏธ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ์์๋๋ฐ ์ด๋ hibernate์ ddl-auto ์์ฑ์ด none / create๋ก ์ค์ ๋์ด ์์ด์ผํ๋ค.
์ค์ ํ๊ธฐ
application.yml ์ค์
spring:
datasource:
url: jdbc:h2:mem:testdb
driverClassName: org.h2.Driver
username: sa
password:
h2:
console:
enabled: true
profiles:
active: local
jpa:
hibernate:
ddl-auto: create-drop
defer-datasource-initialization: true
sql:
init:
data-locations: classpath:database/data.sql # ๋๋ฏธ๋ฐ์ดํฐ ํ์ผ ์ฐ๊ฒฐ
schema-locations: classpath:table.sql # ์คํค๋ง(ํ
์ด๋ธ) ํ์ผ ์ฐ๊ฒฐ
mode: always
platform: h2
์ถ๊ฐ๋์ฌํญ
- defer-datasource-initialization : true - springboot๊ฐ ๋ฐ์ดํฐ ์์ค ์ด๊ธฐํ๋ฅผ ์ง์ฐ์ํจ๋ค. JPA ์ํฐํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๋งคํํ๊ธฐ ์ ์ SQL ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์์๊ฒ ํ๋ค
- sql.init.data-locations : classpath:database/data.sql - ๋๋ฏธ๋ฐ์ดํฐ ์ฝ์ ์ ์ํ SQL์คํฌ๋ฆฝํธ ์์น๋ฅผ ๋ํ๋ธ๋ค. ์ง์ ํ์ง์์๋ฉด hibernate๊ฐ resourceํด๋ ๋ด์ import.sql์ ์ฐพ์์ ์คํ์ํจ๋ค.
- sql.init.mode : always - ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์์๋ง๋ค SQL์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ฒ ํ๋ค.
- sql.init.platform : h2 - SQL ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ซํผ์ ์ง์ ํ๋ค.
์ํฐํฐ ์ค์
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long memberId;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false, unique = true)
private String nickname; // ๋๋ค์
@Column(nullable = false, unique = true)
private String phone;
@Column(nullable = false)
private String password;
}
data.sql ์ค์
resources > database > data.sql ์์ฑ
data.sql์ sql์ ์ ๋ ฅํด์ฃผ๋ฉด๋๋ค. ์ด๋ ์ค์ํ์ 2๊ฐ์ง๋ฅผ ์ ๋ฆฌํด๋ณด๋ฉด
1. table ์ด๋ฆ์ด ์ํฐํฐ์์ ์์ฑํ ์ด๋ฆ๊ณผ ์ผ์นํด์ผํ๋ค. (DB์ ์ด๋ฆ๊ณผ ์ผ์น)
2. ๋ฐ์ดํฐ๋ฅผ ๋ฃ์๋ ํฐ๋ฐ์ดํ(" ")๊ฐ ์๋ ์์๋ฐ์ดํ(' ')๋ก ์์ฑํด์ผํ๋ค.