H2 ์์ฝ์ด ์ปฌ๋ผ๋ช ์ผ๋ก ์ธํ ํ ์ด๋ธ ์์ฑ ์คํจ ๋ฐ InitData ์ค๋ฅ
1. ๋ฐ์ ๋ฐฐ๊ฒฝ
๋ฆฌํฉํ ๋ง ๋จ๊ณ์์ ๋ก์ปฌ ํ๊ฒฝ ํตํฉ ํ
์คํธ๋ฅผ ์ํด InitData๋ฅผ ์์ฑํ๋ค. InitData๋ ์ ํ๋ฆฌ์ผ์ด์
์คํ ์ ํ
์คํธ์ฉ ๋ฐ์ดํฐ๋ฅผ DB์ ์๋์ผ๋ก insertํด์ฃผ๋ ํด๋์ค๋ค.
H2 ์ธ๋ฉ๋ชจ๋ฆฌ DB๋ฅผ ์ฌ์ฉํ๋ ๋ก์ปฌ ํ๊ฒฝ์์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ ๋๋ง๋ค ๋ฐ์ดํฐ๊ฐ ์ด๊ธฐํ๋๋ค. ๋งค๋ฒ ์๋์ผ๋ก ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๋ฒ๊ฑฐ๋ก์์ ์ค์ด๊ธฐ ์ํด InitData๋ฅผ ์์ฑํ๋๋ฐ, ์ดํ ์ ํ๋ฆฌ์ผ์ด์
์คํ ์ monthly_goals ํ
์ด๋ธ์ ์ฐพ์ง ๋ชปํ๋ค๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
InitData ์คํ ์์ ์ด ํ
์ด๋ธ ์์ฑ๋ณด๋ค ๋นจ๋ผ์ ์๊ธด ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ง๋ง, ์ค์ ์์ธ์ H2 ์์ฝ์ด๋ฅผ ์ปฌ๋ผ๋ช
์ผ๋ก ์ฌ์ฉํด ํ
์ด๋ธ ์์ฑ ์์ฒด๊ฐ ์คํจํ ๊ฒ์ด์๋ค.2. ๋ฌธ์
์ ํ๋ฆฌ์ผ์ด์
์คํ ์ค InitData๊ฐ ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ insertํ๋ ์์ ์ monthly_goals ํ
์ด๋ธ์ ์ฐพ์ง ๋ชปํด ์คํ์ ์คํจํ๋ค.
Table "MONTHLY_GOALS" not found; SQL statement:
insert into monthly_goals (created_at, goal_count, month, updated_at, user_id, year, id) values (...)
์ค๋ฅ ๋ฉ์์ง๋ง ๋ณด๋ฉด ๋จ์ํ ํ
์ด๋ธ์ด ์์ง ์์ฑ๋์ง ์์ ์ํ์์ InitData๊ฐ ๋จผ์ ์คํ๋ ๊ฒ์ฒ๋ผ ๋ณด์๋ค.
3. ์์ธ ํ์ ๊ณผ์
1๋จ๊ณ - InitData ์คํ ์์ ๋ฌธ์ ๋ก ์์ฌ
์ฒ์์๋ InitData ์คํ ์์ ์ด ํ
์ด๋ธ ์์ฑ๋ณด๋ค ๋นจ๋ผ์ ๋ฐ์ํ ๋ฌธ์ ๋ผ๊ณ ํ๋จํ๋ค. ๊ทธ๋์ ์คํ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ ํ ๋ฌ ์ดํ๋ก ๋ฆ์ถ๊ธฐ ์ํด ApplicationReadyEvent๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝํ๋ค.
ํ์ง๋ง ์คํ ์์ ์ ๋ฆ์ถ ๋ค์๋ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฅผ ํตํด ๋จ์ํ ์คํ ์์ ๋ฌธ์ ๊ฐ ์๋๋ผ๋ ๊ฒ์ ํ์ธํ๋ค.
2๋จ๊ณ - ํ ์ด๋ธ ์์ฑ ๋ก๊ทธ ํ์ธ
๋ก๊ทธ๋ฅผ ๋ค์ ํ์ธํด๋ณด๋ create table monthly_goals ๋ก๊ทธ๋ ์ถ๋ ฅ๋๊ณ ์์๋ค. ์ฆ, Hibernate๊ฐ ํ
์ด๋ธ ์์ฑ์ ์๋ํ๊ธด ํ์ง๋ง ์ค์ ๋ก๋ ์์ฑ์ ์คํจํ ์ํฉ์ด์๋ค.
3๋จ๊ณ - DDL ์คํ WARN ๋ก๊ทธ ํ์ธ
ํ ์ด๋ธ ์์ฑ ๋ก๊ทธ ์์ชฝ์ ํ์ธํ์ DDL ์คํ ์ค ๊ฒฝ๊ณ ๋ก๊ทธ๊ฐ ์ถ๋ ฅ๋์ด ์์๋ค.
GenerationTarget encountered exception accepting command :
Error executing DDL "create table monthly_goals (...month integer not null...)"
[*]month integer not null
์์ธ์ month, year๊ฐ H2 ์์ฝ์ด์๊ธฐ ๋๋ฌธ์ด๋ค. H2์์๋ ์์ฝ์ด๋ฅผ ์ปฌ๋ผ๋ช
์ผ๋ก ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ด monthly_goals ํ
์ด๋ธ ์์ฑ์ด ์คํจํ๋ค.
๊ฒฐ๊ตญ ํ
์ด๋ธ์ด ์์ฑ๋์ง ์์ ์ํ์์ InitData๊ฐ insert๋ฅผ ์๋ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ Table "MONTHLY_GOALS" not found ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.

์ด๊ธฐ MonthlyGoal ์ํฐํฐ ์ฝ๋๋ค. year, month ํ๋๊ฐ ๋ณ๋ ์ปฌ๋ผ๋ช
์ง์ ์์ด ์ฌ์ฉ๋์ด H2 ์์ฝ์ด์ ์ถฉ๋ํ๋ค.
AnnualGoal ์ํฐํฐ์ year ์ปฌ๋ผ๋ ๊ฐ์ ์ด์ ๋ก ํ
์ด๋ธ ์์ฑ์ ์คํจํ๋ค.

์ด๊ธฐ AnnualGoal ์ํฐํฐ ์ฝ๋๋ค. year ํ๋๊ฐ ๊ทธ๋๋ก DB ์ปฌ๋ผ๋ช
์ผ๋ก ๋งคํ๋๋ฉด์ H2 ์์ฝ์ด์ ์ถฉ๋ํ๋ค.
4. ํด๊ฒฐ
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ํฐํฐ ํ๋๋ช ์ ๊ทธ๋๋ก ์ ์งํ๋, ์ค์ DB ์ปฌ๋ผ๋ช ๋ง H2 ์์ฝ์ด๊ฐ ์๋ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด์๋ค.
์ด๋ฅผ ์ํด @Column(name = ...)์ ์ฌ์ฉํด year๋ goal_year๋ก, month๋ goal_month๋ก ๋งคํํ๋ค.

MonthlyGoal ์ํฐํฐ์์ @Column(name = "goal_year"), @Column(name = "goal_month")๋ก DB ์ปฌ๋ผ๋ช
์ ๋ณ๊ฒฝํ ์ฝ๋๋ค.

AnnualGoal ์ํฐํฐ์์ year ํ๋๋ฅผ goal_year ์ปฌ๋ผ์ผ๋ก ๋งคํํ๋๋ก ์์ ํ ์ฝ๋๋ค.
ํ๋๋ช
์ ๊ธฐ์กด์ฒ๋ผ year, month๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ Java ์ฝ๋์ ์๋ฏธ๋ ๊ทธ๋๋ก ๊ฐ์ ธ๊ฐ ์ ์์๋ค. ๋์ DB ์ปฌ๋ผ๋ช
๋ง goal_year, goal_month๋ก ๋ณ๊ฒฝํด H2 ์์ฝ์ด ์ถฉ๋์ ํผํ๋ค.
5. ์ฐธ๊ณ
- H2์์๋
year,month,day,value,key๋ฑ์ด ์์ฝ์ด์ ํด๋นํ ์ ์๋ค. - MySQL์์๋ ์ ์ ๋์ํ๋๋ผ๋ H2์์๋ ์์ฝ์ด ์ปฌ๋ผ๋ช ๋๋ฌธ์ ํ ์ด๋ธ ์์ฑ์ด ์คํจํ ์ ์๋ค.
MODE=MySQL์ค์ ์ ์ฌ์ฉํ๋๋ผ๋ ์์ฝ์ด ์ถฉ๋ ๋ฌธ์ ๊ฐ ํญ์ ํด๊ฒฐ๋๋ ๊ฒ์ ์๋๋ค.- ๋ก์ปฌ ํ ์คํธ์ฉ H2๋ฅผ ์ฌ์ฉํ ๋๋ ์ํฐํฐ ํ๋๋ช ์ด DB ์์ฝ์ด์ ๊ฒน์น์ง ์๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข๋ค.
6. ๋ฐฐ์ด ์
H2๋ฅผ ๋ก์ปฌ ํ๊ฒฝ์์ ์ฌ์ฉํ ๋๋ ์ปฌ๋ผ๋ช
์ด H2 ์์ฝ์ด์ ๊ฒน์น์ง ์๋์ง ํ์ธํด์ผ ํ๋ค. ํนํ year, month์ฒ๋ผ ๋๋ฉ์ธ์์ ์์ฐ์ค๋ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ด๋ฆ๋ DB ์
์ฅ์์๋ ์์ฝ์ด์ผ ์ ์๋ค.
๋ํ Hibernate์ ํ
์ด๋ธ ์์ฑ ์คํจ๊ฐ ํญ์ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋จ๊ณ์์ ๋ช
ํํ ์ค๋ฅ๋ก ๋๋ฌ๋๋ ๊ฒ์ ์๋๋ค. ํ
์ด๋ธ ์์ฑ ์คํจ๊ฐ WARN ๋ ๋ฒจ๋ก๋ง ์ฐํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ด ๊ณ์ ์คํ๋ ์ ์๊ธฐ ๋๋ฌธ์, ์ค์ insert ์์ ์์์ผ Table not found ์ค๋ฅ๋ก ๋ฐ๊ฒฌ๋ ์ ์๋ค.
Table not found ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋๋ insert ์คํ ์์ ๋ง ๋ณผ ๊ฒ์ด ์๋๋ผ, ๊ทธ๋ณด๋ค ์์ DDL ์์ฑ ๋ก๊ทธ์์ ํ
์ด๋ธ ์์ฑ ์คํจ๊ฐ ์์๋์ง๋ ํจ๊ป ํ์ธํด์ผ ํ๋ค.