SchemaKeeper๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง

์ด ๊ธฐ์‚ฌ์˜ ๋ชฉ์ ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ ํ‚คํผ PostgreSQL DBMS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PHP ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ์˜ ์ •๋ณด๋Š” ์šฐ์„  PostgreSQL ๊ธฐ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐฐ์น˜๋œ ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์„œ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์˜ ์žฅ์ ์ด๋‚˜ ๋‹จ์ ์„ ์„ค๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋…์ž๊ฐ€ ์ด๋ฏธ ์„ ํƒ์„ ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์งˆ๋ฌธ์ด ๊ณ ๋ ค๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ ๋คํ”„๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(์ดํ•˜ VCS)์— ์–ด๋–ค ํ˜•์‹์œผ๋กœ ์ €์žฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
  2. ๋คํ”„๋ฅผ ์ €์žฅํ•œ ํ›„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•
  3. ์ถฉ๋Œ์ด๋‚˜ ๋Œ€๊ทœ๋ชจ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ ์—†์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์œผ๋กœ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•
  4. ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ณ‘๋ ฌ ์ž‘์—… ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
  5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ์˜ ๋” ๋งŽ์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•

    ์Šคํ‚ค๋งˆํ‚คํผ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ €์žฅ ํ”„๋กœ์‹œ์ € ์ž‘์—…์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. PL / pgSQL. ๋‹ค๋ฅธ ์–ธ์–ด์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋Š” ์ง„ํ–‰๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ด ํšจ๊ณผ์ ์ด์ง€ ์•Š๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

VCS์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ ๋คํ”„๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•

๋„์„œ๊ด€ ์Šคํ‚ค๋งˆ ํ‚คํผ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค saveDump, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๊ฐœ์ฒด ๊ตฌ์กฐ๋ฅผ ๋ณ„๋„์˜ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ์€ VCS์— ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฃนํ™”๋œ ํŒŒ์ผ๋กœ ๊ตฌ๋ถ„๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐœ์ฒด๋ฅผ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ฒด ์œ ํ˜•
๊ณ„ํš
์ด๋ฆ„
ํŒŒ์ผ์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ

ํ…Œ์ด๋ธ”
๊ณต๊ฐœ
๊ณ„์ •
./public/tables/accounts.txt

์ €์žฅ ํ”„๋กœ์‹œ์ €
๊ณต๊ฐœ
์ธ์ฆ(ํ•ด์‹œ bigint)
./public/functions/auth(int8).sql

์†Œ๊ฐœ
์˜ˆ์•ฝ
๊ด€์„ธ
./booking/views/tariffs.txt

ํŒŒ์ผ์˜ ๋‚ด์šฉ์€ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ์ฒด์˜ ๊ตฌ์กฐ๋ฅผ ํ…์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ €์žฅ ํ”„๋กœ์‹œ์ €์˜ ๊ฒฝ์šฐ ํŒŒ์ผ ๋‚ด์šฉ์€ ๋ธ”๋ก์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์ €์žฅ ํ”„๋กœ์‹œ์ €์˜ ์ „์ฒด ์ •์˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. CREATE OR REPLACE FUNCTION.

์œ„ ํ‘œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ํŒŒ์ผ ๊ฒฝ๋กœ์—๋Š” ํ•ด๋‹น ๊ฐ์ฒด์˜ ์œ ํ˜•, ์Šคํ‚ค๋งˆ, ์ด๋ฆ„์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๋คํ”„ ๋ฐ ์ฝ”๋“œ ๊ฒ€ํ† ๋ฅผ ๋” ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ ์žฅ .sql ์ €์žฅ ํ”„๋กœ์‹œ์ € ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ์˜ ๊ฒฝ์šฐ ํŒŒ์ผ์ด ์—ด๋ฆด ๋•Œ IDE๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ์ž๋™์œผ๋กœ ์ œ๊ณตํ•˜๋„๋ก ์ด ์˜ต์…˜์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋คํ”„๋ฅผ ์ €์žฅํ•œ ํ›„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•

ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ์˜ ๋คํ”„๋ฅผ VCS์— ์ €์žฅํ•˜๋ฉด ๋คํ”„๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์„œ๊ด€์—์„œ ์Šคํ‚ค๋งˆ ํ‚คํผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค verifyDump, ๋ถ€์ž‘์šฉ ์—†์ด ์ฐจ์ด์ ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ™•์ธํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. saveDump, ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๊ณ  VCS์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ์— ์ €์žฅ๋˜๋ฏ€๋กœ VCS๋Š” ๋ณ€๊ฒฝ๋œ ๊ฐ์ฒด๋งŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฐฉ๋ฒ•์˜ ๊ฐ€์žฅ ํฐ ๋‹จ์ ์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณด๋ ค๋ฉด ํŒŒ์ผ์„ ๋ฎ์–ด์จ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถฉ๋Œ์ด๋‚˜ ๋Œ€๊ทœ๋ชจ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ ์—†์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์œผ๋กœ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ธฐ๋Šฅ ๋•๋ถ„์— deployDump ์ €์žฅ ํ”„๋กœ์‹œ์ €์˜ ์†Œ์Šค ์ฝ”๋“œ๋Š” ์ผ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ์ฝ”๋“œ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ ํ”„๋กœ์‹œ์ € ์ฝ”๋“œ์—์„œ ์ƒˆ ์ค„์„ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฒ„์ „ ์ œ์–ด์— ์ฆ‰์‹œ ํ‘ธ์‹œํ•˜๊ฑฐ๋‚˜ ๋คํ”„ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ํ•ด๋‹น ํŒŒ์ผ์„ ์ƒ์„ฑ/์‚ญ์ œํ•˜์—ฌ ์ €์žฅ ํ”„๋กœ์‹œ์ €๋ฅผ ์ƒ์„ฑ/์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์Šคํ‚ค๋งˆ์— ์ƒˆ ์ €์žฅ ํ”„๋กœ์‹œ์ €๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด public ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“œ์„ธ์š” .sql ๋””๋ ‰ํ† ๋ฆฌ์—์„œ public/functions, ๋ธ”๋ก์„ ํฌํ•จํ•˜์—ฌ ์ €์žฅ ํ”„๋กœ์‹œ์ €์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ทธ ์•ˆ์— ๋„ฃ์Šต๋‹ˆ๋‹ค. CREATE OR REPLACE FUNCTION, ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค. deployDump. ์ €์žฅ ํ”„๋กœ์‹œ์ € ์ˆ˜์ • ๋ฐ ์‚ญ์ œ๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”๋“œ๋Š” VCS์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋™์‹œ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

์ €์žฅ ํ”„๋กœ์‹œ์ €์˜ ์†Œ์Šค ์ฝ”๋“œ์— ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ฑฐ๋‚˜ ํŒŒ์ผ ์ด๋ฆ„๊ณผ ์ €์žฅ ํ”„๋กœ์‹œ์ € ์ด๋ฆ„์ด ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ deployDump ์‹คํŒจํ•˜๊ณ  ์˜ค๋ฅ˜ ํ…์ŠคํŠธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋คํ”„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋คํ”„์™€ ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ์ €์žฅ ํ”„๋กœ์‹œ์ € ๋ถˆ์ผ์น˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. deployDump.

์ƒˆ ์ €์žฅ ํ”„๋กœ์‹œ์ €๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ํŒŒ์ผ ์ด๋ฆ„์„ ์ˆ˜๋™์œผ๋กœ ์ž…๋ ฅํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ํ™•์žฅ์ž๊ฐ€ ์žˆ์œผ๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. .sql. ํ†ตํ™” ํ›„ deployDump ์˜ค๋ฅ˜ ํ…์ŠคํŠธ์—๋Š” ํŒŒ์ผ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์ด๋ฆ„์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

deployDump ์ถ”๊ฐ€ ์ž‘์—… ์—†์ด ํ•จ์ˆ˜ ๋˜๋Š” ๋ฐ˜ํ™˜ ์œ ํ˜•์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ณ ์ „์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด
๋จผ์ € ์‹คํ–‰ DROP FUNCTION, ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ์•ผ CREATE OR REPLACE FUNCTION.

๋ถˆํ–‰ํžˆ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. deployDump ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•˜๋‚˜ ์ด์ƒ์˜ ํŠธ๋ฆฌ๊ฑฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋ฆฌ๊ฑฐ ๊ธฐ๋Šฅ์ด ์ œ๊ฑฐ๋˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์ €์žฅ ํ”„๋กœ์‹œ์ €์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ ์Šคํ‚ค๋งˆ ํ‚คํผ, ๊ตฌ์กฐ์˜ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ „์†กํ•˜๋ ค๋ฉด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ž‘์—…์„ ์œ„ํ•œ ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ต๋ฆฌ/์ด์ฃผ.

์ถœ์‹œ ์ „์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. deployDump. ์ด๋ฅผ ํ†ตํ•ด ๊ตฌ์กฐ๋ฅผ ๋ชจ๋‘ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฌธ์ œ ์ƒํ™ฉ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ €์žฅ ํ”„๋กœ์‹œ์ €์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด ์ดํ›„์— ๋ฌธ์ œ ์—†์ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ž‘์—…์€ ๋‹ค์Œ ์„น์…˜์—์„œ ๋” ์ž์„ธํžˆ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ณ‘๋ ฌ ์ž‘์—… ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์—… ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰ํ•˜์—ฌ VCS์— ์ €์žฅ๋œ ๋คํ”„์— ๋”ฐ๋ผ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ „์ฒด ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™”๋ฅผ 3๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. base.sql
  2. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ ์šฉ
  3. ๋„์ „ deployDump

base.sql ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ ์šฉ๋˜๊ณ  ์‹คํ–‰๋˜๋Š” ์‹œ์ž‘์ ์ž…๋‹ˆ๋‹ค. deployDump์ฆ‰, base.sql + ะผะธะณั€ะฐั†ะธะธ + deployDump = ะฐะบั‚ัƒะฐะปัŒะฝะฐั ัั‚ั€ัƒะบั‚ัƒั€ะฐ ะ‘ะ”. ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค pg_dump. ์‚ฌ์šฉ๋œ base.sql ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.

์™„์ „ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ธ์ถœํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. refresh.sh. ์›Œํฌํ”Œ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž์‹ ์˜ ํ™˜๊ฒฝ์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. refresh.sh ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  2. ๊ฐœ๋ฐœ์ž๋Š” ๋‹น๋ฉดํ•œ ์ž‘์—…์— ๋Œ€ํ•œ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋„๋ก ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค(ALTER TABLE ... ADD COLUMN ๊ธฐํƒ€)
  3. ์ž‘์—…์„ ์™„๋ฃŒํ•œ ํ›„ ๊ฐœ๋ฐœ์ž๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. saveDumpVCS์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ฐœ๋ฐœ์ž ์žฌ์ถœ์‹œ refresh.sh, ๊ทธ ๋‹ค์Œ์— verifyDump์ด์ œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ํฌํ•จํ•  ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ชฉ๋ก์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  5. ๊ฐœ๋ฐœ์ž๋Š” ๋ชจ๋“  ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ๋กœ ์ „์†กํ•˜๊ณ  ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. refresh.sh ะธ verifyDump, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ปดํŒŒ์ผ๋˜๋ฉด verifyDump ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ €์žฅ๋œ ๋คํ”„ ๊ฐ„์— ์ฐจ์ด๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์„ค๋ช…ํ•œ ํ”„๋กœ์„ธ์Šค๋Š” gitflow ์›์น™๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. VCS์˜ ๊ฐ ๋ถ„๊ธฐ์—๋Š” ์ž์ฒด ๋ฒ„์ „์˜ ๋คํ”„๊ฐ€ ํฌํ•จ๋˜๋ฉฐ ๋ถ„๊ธฐ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋ฉด ๋คํ”„๋„ ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ณ‘ํ•ฉ ํ›„์—๋Š” ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ, ๋‹ค๋ฅธ ๋ถ„๊ธฐ(์˜ˆ: ๋™์ผํ•œ ํ…Œ์ด๋ธ”)์—์„œ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์ง„ ๊ฒฝ์šฐ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถฉ๋Œ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ถ„๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ, ๋‘ ๊ฐœ์˜ ๊ฐ€์ง€๊ฐ€ ๋ถ„๊ธฐ๋ฉ๋‹ˆ๋‹ค. feature1 ะธ feature2, ๋‹ค์Œ๊ณผ ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ, ํ•˜์ง€๋งŒ ์„œ๋กœ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ž„๋ฌด๋Š” ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ. ์ด ๊ฒฝ์šฐ ๋จผ์ € ๋ถ„๊ธฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ณ‘ํ•ฉ ๊ฐœ๋ฐœ ๋‚˜๋จธ์ง€ ๋ถ„๊ธฐ์— ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ๋ถ„๊ธฐ๋ฅผ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ. ์ถฉ๋Œ ํ•ด๊ฒฐ ๋‹จ๊ณ„ ์ค‘์— ๋ณ‘ํ•ฉ ๊ฒฐ๊ณผ๊ฐ€ ํฌํ•จ๋œ ์ตœ์ข… ๋คํ”„์™€ ์ผ์น˜ํ•˜๋„๋ก ๋งˆ์ง€๋ง‰ ๋ถ„๊ธฐ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ์˜ ๋” ๋งŽ์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•

VCS์— ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ์˜ ๋คํ”„๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœ๋•์…˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•„์š”ํ•œ ๊ตฌ์กฐ๋ฅผ ์ •ํ™•ํžˆ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ”„๋กœ๋•์…˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ์ „์†ก๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œผ๋กœ DDL PostgreSQL์—์„œ๋Š” ๊ฑฐ๋ž˜์ƒ์˜, ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ "๊ณ ํ†ต ์—†์ด" ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์Œ ๋ฐฐํฌ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ROLLBACK:

  1. ๊ฑฐ๋ž˜ ์‹œ์ž‘
  2. ํŠธ๋žœ์žญ์…˜์—์„œ ๋ชจ๋“  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ˆ˜ํ–‰
  3. ๋™์ผํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ์‹คํ–‰ deployDump
  4. ๊ฑฐ๋ž˜๋ฅผ ์™„๋ฃŒํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ verifyDump. ์˜ค๋ฅ˜๊ฐ€ ์—†์œผ๋ฉด ์‹คํ–‰ COMMIT. ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด ์‹คํ–‰ํ•˜์„ธ์š”. ROLLBACK

์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋Š” ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ํฌํ•จํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ์— ๋Œ€ํ•œ ๊ธฐ์กด ์ ‘๊ทผ ๋ฐฉ์‹์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ฐฉ๋ฒ• ๋•๋ถ„์— โ€œPHP + PostgreSQLโ€ ํ”„๋กœ์ ํŠธ์—์„œ ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ๋Œ์–ด๋‚ด๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ์„ ๊ฑฐ์˜ ํฌ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ PL / pgSQL PHP๋กœ ์ž‘์„ฑ๋œ ๋™์ผํ•œ ๊ธฐ๋Šฅ๋ณด๋‹ค ๋” ํˆฌ๋ช…ํ•ด ๋ณด์ด๊ณ  ๋” ์ ์€ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€