๋ฐฑ์ ํ์ผ์ด ์์ด๋ ๋ณต๊ตฌ์ ์คํจํ๋ ์ด์ : ๊ฐ์ธ ์น์ฌ์ดํธ ๋ฐฑ์ ยท๋ณต๊ตฌ ์ ๊ฒ๋ฒ
์น์ฌ์ดํธ๋ฅผ ์ด์ํ๋ค ๋ณด๋ฉด ๋ฐฐํฌ ์ ์ ํ๋ก์ ํธ ํด๋๋ฅผ ์์ถํด ๋๊ฑฐ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์ ํ์ผ์ ๋ด๋ ค๋ฐ๋ ์ผ์ด ์๊น๋๋ค. ํ์ผ์ด ๋ง๋ค์ด์ก๋ค๋ ์ฌ์ค๋ง์ผ๋ก ์์ฌํ๊ธฐ ์ฝ์ง๋ง, ๋ณต๊ตฌํ ๋๋ ๊ธ์ด ๋ณด์ด์ง ์๊ฑฐ๋ ์ด๋ฏธ์ง๊ฐ ๊นจ์ง๊ณ ๋ก๊ทธ์ธ์ ์คํจํ๋ ๋ฌธ์ ๊ฐ ๋ํ๋ ์ ์์ต๋๋ค.
๋ณต๊ตฌ์ ํ์ํ ๊ฒ์ ๋ฐฑ์ ํ์ผ ํ๋๊ฐ ์๋๋ผ ์ฌ์ดํธ๋ฅผ ๊ตฌ์ฑํ๋ ์๋ฃ์ ์คํ ์กฐ๊ฑด์ ๋๋ค. ๊ฒ์๊ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ณ , ์ด๋ฏธ์ง๋ ์๋ฒ ํด๋๋ ๋ณ๋ ์ ์ฅ์์ ์์ผ๋ฉฐ, ํ๋ก๊ทธ๋จ์ ํ๊ฒฝ ๋ณ์์ ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ์์กดํ ์ ์์ต๋๋ค. ์ด๋ ํ ๋ถ๋ถ์ด ๋น ์ง๋ฉด ํ์ผ ์์ฒด๊ฐ ์ ์์ด์ด๋ ์ฌ์ดํธ๋ ๋ถ์์ ํ๊ฒ ๋ณต์๋ฉ๋๋ค.
์ด ๊ธ์ ๊ฐ์ธ ๊ฐ๋ฐ์์ ์๊ท๋ชจ ๊ฒ์ํ ์ด์์๊ฐ ๋ฐฑ์ ๋ฒ์๋ฅผ ์ ํ๊ณ ๋ณต๊ตฌ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ํน์ ์๋น์ค๋ฅผ ๊ตฌ๋งคํ๋๋ก ์ ๋ํ๊ธฐ๋ณด๋ค, ํ์ฌ ๊ตฌ์กฐ์์ ๋ฌด์์ ๋จ๊ฒจ์ผ ํ๋์ง ํ์ธํ๋ ๋ฐ ์ด์ ์ ๋ง์ท์ต๋๋ค.
์ค์ต ๋ฒ์: ๊ธ ์์ฑ ๊ณผ์ ์์ ์์ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ๋ง๋ ์ด๋ฏธ์ง ์ธ ์ฅ์ผ๋ก ๋ฐฑ์ ๋๋ฝ์ ์ฌํํ์ต๋๋ค. ์ค์ ์ด์ ์ฌ์ดํธ์ ์ฅ์ ๊ฒฝํ์ ๊พธ๋ฏผ ์ฌ๋ก๊ฐ ์๋๋๋ค. PostgreSQL ๋ช ๋ น์ ๊ณต์ ๋ฌธ์๋ฅผ ๋ฐํ์ผ๋ก ํ ๋ณ๋ ์์ ์ด๋ฉฐ ์ด ์ค์ต์์ ์คํํ ๋ช ๋ น์ด ์๋๋๋ค.
1. ์ฝ๋ ๋ฐฑ์ ๊ณผ ๋ฐ์ดํฐ ๋ฐฑ์ ์ ๋ค๋ฅด๋ค
ํ๋ก์ ํธ ์ฝ๋์๋ ๊ฒ์ํ์ ๋ณด์ฌ์ฃผ๋ ๋ก์ง๊ณผ ํ๋ฉด ํ ํ๋ฆฟ์ด ๋ค์ด ์์ต๋๋ค. ํ์ง๋ง ์ค์ ๊ฒ์๊ธ์ด ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋์ด ์๋ค๋ฉด ์ฝ๋ ํด๋๋ฅผ ๋ณต์ฌํด๋ ๊ฒ์๊ธ ๋ฐ์ดํฐ๊น์ง ๋ณต์ฌ๋์ง๋ ์์ต๋๋ค. ์ ๋ก๋ ํด๋๋ฅผ Git์์ ์ ์ธํ๋ค๋ฉด ์ ์ฅ์๋ฅผ ๋ณต์ ํ ๋ ์ด๋ฏธ์ง๋ ๋ฐ๋ผ์ค์ง ์์ต๋๋ค.
๋ฐ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง ๋ณต์ํด๋ ํ๋ก๊ทธ๋จ์ด ์๋์ผ๋ก ์คํ๋๋ ๊ฒ์ ์๋๋๋ค. ์ด๋ค ์ฝ๋ ๋ฒ์ ์ด ํด๋น ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํธํ๋๋์ง, ์คํ์ ํ์ํ ์ค์ ์ ์ด๋์ ๊ฐ์ ธ์ค๋์ง ์์์ผ ํฉ๋๋ค. ๋ฐฑ์ ๋ฒ์๋ฅผ ์ ํ ๋๋ ํ์ผ ํ์ฅ์๋ณด๋ค ์๋ฃ๊ฐ ์ ์ฅ๋๋ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถํ์ธ์.
| ๋์ | ๋ด๊ธด ์ ๋ณด | ๋ณต๊ตฌ ๋ ํ์ํ ํ์ธ |
|---|---|---|
| ์์ค ์ฝ๋ยทํ ํ๋ฆฟ | ํ๋ฉด๊ณผ ์ฒ๋ฆฌ ๋ก์ง | ๋์ํ๋ ๋ฒ์ ยท์คํ ๋ช ๋ น |
| ๋ฐ์ดํฐ๋ฒ ์ด์ค | ๊ธยท๋๊ธยทํ์ยทํ์ผ ๊ฒฝ๋ก | ์คํค๋งยท๋ฐ์ดํฐยท๊ถํ |
| ์ ๋ก๋ ํ์ผ | ๋ณธ๋ฌธ ์ด๋ฏธ์งยท์ฒจ๋ถ ์๋ฃ | ์ค์ ํ์ผ๊ณผ DB ๊ฒฝ๋ก์ ์ผ์น |
| ์คํ ์ค์ | DB ์ฐ๊ฒฐยท์ ์ฅ์ยท์ธ๋ถ ์๋น์ค ์ค์ | ์์ ํ ๋ณด๊ด ์์นยท๋ณต์ ๋ฐฉ๋ฒ |
| ์ด์ ๋ฉ๋ชจ | ๋๋ฉ์ธยท๋ฐฐํฌยท๋ณต๊ตฌ ์์ | ์ฅ์ ๋ ๋ฐ๋ก ๋ฐ๋ผ ํ ์ ์๋๊ฐ? |
์ด ํ๋ฅผ ์์ ์ ์ฌ์ดํธ์ ๋ง์ถฐ ์ฑ์ฐ๋ฉด ๋ฐฑ์ ๋ชฉ๋ก์ ๋ง๋ค ์ ์์ต๋๋ค. ์ธ๋ถ ํ์ผ ์ ์ฅ์๋ฅผ ์ด๋ค๋ฉด ๋ฒํท๊ณผ ๊ฒฝ๋ก๋ ๊ธฐ๋กํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ ๋ฐฑ์ ์ด ํ์ผ ์ ์ฅ์๊น์ง ํฌํจํ๋์ง๋ ์๋น์ค ์๋ด์์ ๋ฐ๋ก ํ์ธํ์ธ์. โํด๋ผ์ฐ๋์ ์๋คโ๋ ์ฌ์ค๊ณผ โ๋ด๊ฐ ์ํ๋ ์์ ์ผ๋ก ๋ณต์ํ ์ ์๋คโ๋ ์ฌ์ค์ ๋ค๋ฆ ๋๋ค.
2. ๋ฐฑ์ ์ฑ๊ณต์ ์ธ ๋จ๊ณ๋ก ๋๋ ํ์ธํ๊ธฐ
๋ฐฑ์ ํ์ธ์ ํ์ผ ์์ฑ, ์๋ฃ ํ์ธ, ์๋น์ค ํ์ธ์ผ๋ก ๋๋ ์ ์์ต๋๋ค. ์ฒซ ๋จ๊ณ๋ ๋ฐฑ์ ์์ ์ด ์ข ๋ฃ๋๊ณ ๊ฒฐ๊ณผ ํ์ผ์ด ์๊ฒผ๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ๋ ๋ฒ์งธ๋ ๊ทธ ํ์ผ์ด ์ฝํ๊ณ ํ์ํ ์๋ฃ๋ฅผ ํฌํจํ๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ๋ง์ง๋ง์ ์๋ฃ๋ฅผ ๋ณ๋ ํ๊ฒฝ์ ๋ณต์ํด ๊ธฐ๋ฅ์ด ๋์ํ๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค.
- ํ์ผ ๋จ๊ณ: ์์ ์ข ๋ฃ ์ํ, ํ์ผ ์กด์ฌ, ํฌ๊ธฐ, ์์ถ ๊ฒ์ฌ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค.
- ์๋ฃ ๋จ๊ณ: ํ๋ณธ ๊ฒ์๊ธ, ๋๊ธ ๊ด๊ณ, ์ด๋ฏธ์งยท์ฒจ๋ถ ํ์ผ์ ์กด์ฌ๋ฅผ ํ์ธํฉ๋๋ค.
- ์๋น์ค ๋จ๊ณ: ๋ชฉ๋กยท๋ณธ๋ฌธยท๋ก๊ทธ์ธยท๊ฒ์ ๋ฑ ํ์ํ ๋์์ ํ์ธํฉ๋๋ค.
ํ์ผ ํฌ๊ธฐ๋ง ํ์ธํ๋ฉด ๋น ๋ฐฑ์ ์ ๋์น ์ ์๊ณ , ์์ถ ๊ฒ์ฌ๋ง ํต๊ณผํด๋ ํ์ํ ์ด๋ฏธ์ง๊ฐ ๋น ์ก์ ์ ์์ต๋๋ค. DB์ ํ ์๊ฐ ๋ง์๋ ๊ธ๊ณผ ์ฒจ๋ถ ์๋ฃ์ ์ฐ๊ฒฐ์ด ํ๋ฆด ์ ์์ต๋๋ค. ๊ฐ ๋จ๊ณ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ๊ธฐ๋กํด์ผ ์์ธ์ ์ฐพ๊ธฐ ์ฝ์ต๋๋ค.
์ด์์๊ฐ ์ ํ ์๋ฃ ์กฐ๊ฑด๋ ๊ตฌ์ฒด์ ์ด์ด์ผ ํฉ๋๋ค. โ์๋ฒ ์คํ ์ฑ๊ณตโ๋ณด๋ค โ์ต์ ๊ธ๊ณผ ์์ ๊ธ ๊ฐ๊ฐ ํ ํธ์ด ์ด๋ฆฌ๊ณ , ๋ณธ๋ฌธ ์ด๋ฏธ์ง๊ฐ ํ์๋๋ฉฐ, ํ ์คํธ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ ์ ์์โ์ฒ๋ผ ์ค์ ์ด์ฉ ๋์์ผ๋ก ์ ์ด๋์ธ์.
3. ์ค์ ์ค์ต: ZIP์ด ์ ์์ด์ง๋ง ์ด๋ฏธ์ง๊ฐ ๋น ์ง ๊ฒฝ์ฐ
์ค์ต์ฉ DB์๋ ๊ฒ์๊ธ ์ธ ๊ฐ์ ๊ฐ๊ฐ์ ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ์ ์ฅํ์ต๋๋ค. ์ด๋ฏธ์ง๋ DB ์์ ๋ฃ์ง ์๊ณ uploads/a.png, uploads/b.png, uploads/c.png๋ผ๋ ๋ณ๋ ํ์ผ๋ก ๋ง๋ค์์ต๋๋ค. DB ์ฌ๋ณธ์ SQLite์ Connection.backup()์ผ๋ก ์์ฑํ์ต๋๋ค.[1]
์ด ์๋ฃ๋ก ์ธ ๊ฐ์ง ZIP์ ๋ง๋ค์์ต๋๋ค. ํ๋๋ DB๋ง, ๋ ๋ฒ์งธ๋ DB์ ์ด๋ฏธ์ง ๋ ์ฅ, ๋ง์ง๋ง์ DB์ ์ด๋ฏธ์ง ์ธ ์ฅ์ ํฌํจํ์ต๋๋ค. ๊ฐ ZIP์ DB์ ํฌํจ๋ ์ด๋ฏธ์ง๋ฅผ ์๋ก์ด ํด๋์ ๋ณต์ํ ๋ค, DB๋ฅผ ์ด์ด ๊ฒ์๊ธ ์๋ฅผ ์ฝ๊ณ ์ด๋ฏธ์ง ๊ฒฝ๋ก์ ํ์ผ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ์ต๋๋ค.
| ๋ฐฑ์ ๊ตฌ์ฑ | ZIP ๊ฒ์ฌ | ๋ณต์๋ ๊ธ | ํฌํจ ์ด๋ฏธ์ง | ๋๋ฝ ์ด๋ฏธ์ง |
|---|---|---|---|---|
| DB๋ง ํฌํจ | ํต๊ณผ | 3๊ฐ | 0์ฅ | 3์ฅ |
| DB + ์ด๋ฏธ์ง 2์ฅ | ํต๊ณผ | 3๊ฐ | 2์ฅ | 1์ฅ |
| DB + ์ด๋ฏธ์ง 3์ฅ | ํต๊ณผ | 3๊ฐ | 3์ฅ | 0์ฅ |
์ค์ต์์ ํ์ธํ ๊ฒฐ๊ณผ๋ฅผ ์ง์ ์ ์ํ ๋ํ๋ก ์ ๋ฆฌํ์ต๋๋ค. ์ค์ ์ด์ ์๋ฒ์ ํ๋ฉด์ด๋ ์ฅ์ ๊ธฐ๋ก์ ์๋๋๋ค.
์ธ ํ์ผ ๋ชจ๋ Python์ ZipFile.testzip() ๊ฒ์ฌ์ ํต๊ณผํ์ต๋๋ค. ์ด ํจ์๋ ์์นด์ด๋ธ์ ๋ค์ด ์๋ ํ์ผ์ CRC์ ํค๋๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ์ ์์ผ ๋ None์ ๋ฐํํ์ง๋ง, ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ํ ํ์ผ์ด ์ ๋ถ ํฌํจ๋์๋์ง๋ ํ๋จํ์ง ์์ต๋๋ค.[2]
์ฆ โ์์ถ ํ์ผ์ด ์์๋์ง ์์๋คโ์ โ์ฌ์ดํธ ๋ณต๊ตฌ์ ํ์ํ ์๋ฃ๊ฐ ๋ชจ๋ ์๋คโ๋ ๋ณ๊ฐ์ ๋๋ค. ์ด ์ค์ต์ ํ์ผ๊ณผ DB์ ์ฐ๊ฒฐ์ ํ์ธํ ๊ฒ์ด๋ฉฐ, ์น ์๋ฒยท๋ก๊ทธ์ธยท์ธ๋ถ ์๋น์ค ์ฐ๊ฒฐ๊น์ง ๋ณต๊ตฌํ ์ํ์ ์๋๋๋ค. ๋ง์ง๋ง ๊ตฌ์ฑ์์ ์ด๋ฏธ์ง ๋๋ฝ์ด ์์๋ค๊ณ ์ ์ฒด ์๋น์ค ๋ณต๊ตฌ๊ฐ ๊ฒ์ฆ๋ ๊ฒ์ ์๋๋๋ค.
4. DB์ ํ์ผ์ ๋ฐฑ์ ์์ ์ ๋ง์ถ๊ธฐ
์ค์ ์ฌ์ดํธ์์๋ ๋ฐฑ์ ์ค์๋ ์ ๊ธ๊ณผ ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ์ฌ ์ ์์ต๋๋ค. DB ์ฌ๋ณธ์๋ ์ ๊ธ์ ์ด๋ฏธ์ง ๊ฒฝ๋ก๊ฐ ๋ค์ด๊ฐ์ง๋ง ํ์ผ ์ฌ๋ณธ์๋ ์ด๋ฏธ์ง๊ฐ ์์ง ์์ ์๋ ์์ต๋๋ค. ๋ฐ๋ ์์๋ผ๋ฉด ์ด๋ฏธ์ง๋ ์๋๋ฐ DB๊ฐ ๊ทธ ๊ธ์ ๋ชจ๋ฅผ ์ ์์ต๋๋ค.
๊ทธ๋์ ๋ฐฑ์ ๋ฌถ์์๋ DB ๋ฐฑ์ ์๊ฐ๊ณผ ํ์ผ ๋ณต์ฌ ์๊ฐ์ ํจ๊ป ์ ๋ ํธ์ด ์ข์ต๋๋ค. ์๊ท๋ชจ ์ฌ์ดํธ๋ผ๋ฉด ์ฐ๊ธฐ ์์ ์ ์ ์ ์ ํํ ์ ์ง๋ณด์ ์๊ฐ์ ๋ฌถ์์ ๋ง๋ค ์ ์์ต๋๋ค. ๊ณ์ ์ด์ํด์ผ ํ๋ค๋ฉด ์ ์ฅ์ ์ค๋ ์ท, ๋ฒ์ ๊ด๋ฆฌ, ํ์ผ ๋ณด์กด ์ ์ฑ ๋ฑ์ ์์ ์ ํ๊ฒฝ์ ๋ง๊ฒ ์ค๊ณํด์ผ ํฉ๋๋ค.
PostgreSQL์ pg_dump๋ DB ์์ ์ผ๊ด๋ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ ๊ณตํ์ง๋ง, ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ณ๋๋ก ์ ์ฅํ ์๋ฒ ์ด๋ฏธ์ง ํด๋๊น์ง ํจ๊ป ๋ฌถ์ด์ฃผ์ง๋ ์์ต๋๋ค.[3] ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ๊ณผ ์ฌ์ดํธ ์ ์ฒด ์๋ฃ์ ์ผ๊ด์ฑ์ ๊ฐ์ ์๋ฏธ๋ก ๋ณด์ง ๋ง์ธ์.
๋ณต๊ตฌ ๊ธฐ๋ก์๋ ๋ฐฑ์ ์์ ์ดํ์ ์์ฑ๋ ์๋ฃ๊ฐ ์ด๋๊น์ง ํฌํจ๋๋์ง๋ ์ ์ด๋์ธ์. ์ต์ ๋ฐฑ์ ์ด ์ด์ ๊ฒ์ด๋ผ๋ฉด ์ค๋ ์์ฑ๋ ๊ธ์ ๋ณต๊ตฌํ ์ ์๋ ๋ณ๋ ๋ฐฉ๋ฒ์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๋ฐฑ์ ๊ฐ๊ฒฉ์ ๊ฐ๋นํ ์ ์๋ ์๋ฃ ์์ค ๋ฒ์์ ๋ง์ถฐ ๊ฒฐ์ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค.
5. PostgreSQL ๋ฐฑ์ ์์ ๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ
๋ค์ ๋ช
๋ น์ ์ ์ ์ค์ ์ด ์ค๋น๋ ํ๊ฒฝ์์ site_db๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ custom ํ์์ผ๋ก ๋ด๋ณด๋ด๋ ์์ ์
๋๋ค. ํ์ผ ์ด๋ฆ๊ณผ DB ์ด๋ฆ์ ์ค๋ช
์ฉ์ด๋ฉฐ, ์ค์ ํ๊ฒฝ์ ์ฐ๊ฒฐ ๋ฐฉ์ยท๋ฒ์ ยท๊ถํ์ ๋ง์ถฐ ๋ฐ๊ฟ์ผ ํฉ๋๋ค.
pg_dump -Fc -f site-2026-10-01.dump site_db
-Fc๋ custom ์์นด์ด๋ธ ํ์, -f๋ ๊ฒฐ๊ณผ ํ์ผ์ ์ง์ ํฉ๋๋ค. pg_dump๋ ๋จ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค. ๊ณตํต ์ญํ ๊ณผ ํ
์ด๋ธ์คํ์ด์ค์ฒ๋ผ ํด๋ฌ์คํฐ ์ฐจ์์ ์๋ฃ๋ ๋ณ๋ ๊ฒํ ๊ฐ ํ์ํฉ๋๋ค.[3]
์์ฑํ custom ์์นด์ด๋ธ์ ํญ๋ชฉ ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ ์ ์์ต๋๋ค.
pg_restore --list site-2026-10-01.dump
๋ชฉ๋ก ํ์ธ์ ํ์๊ณผ ๊ตฌ์ฑ ํญ๋ชฉ์ ์ดํด๋ณด๋ ๋จ๊ณ์ด๋ฉฐ ์ค์ ๋ณต๊ตฌ ์ฑ๊ณต์ ์ฆ๋ช ํ์ง ์์ต๋๋ค. ๊ณต์ ๋ฌธ์์ ๋ฐ๋ผ ์ค๋นํ ๋ณ๋์ ๋น ํ ์คํธ DB์ ๋ณต์ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค.[4]
# ๋ณ๋๋ก ์ค๋นํ ๋น ํ
์คํธ DB์ ๋ณต์ํ๋ ์์
pg_restore --exit-on-error --dbname=site_restore_test site-2026-10-01.dump
์ ๋ช
๋ น์ site_restore_test๊ฐ ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์๋ค๋ ์ ์ ์
๋๋ค. ์๋ณธ ์ญํ ยทํ์ฅ ๊ธฐ๋ฅยท์์ ๊ถ ๋ฑ ๋ณต๊ตฌ ์ ์ ๋ ๋ง์์ผ ํฉ๋๋ค. ํ๋ฌธ SQL ๋คํ๋ ๊ฐ์ ๋ฐฉ์์ด ์๋๋ฏ๋ก ํ์ผ ํ์๊ณผ ๋ณต์ ๋๊ตฌ๋ฅผ ๊ตฌ๋ถํ์ธ์.[4]
์ด ์์ ๋ง์ผ๋ก ๋ชจ๋ ์ด์ DB์ ๋ฐฑ์ ์ ์ฑ ์ด ์์ฑ๋์ง๋ ์์ต๋๋ค. ๋ฐ์ดํฐ ํฌ๊ธฐ, ๋ณ๊ฒฝ๋, ๋ณต๊ตฌ ์์ ์๊ตฌ์ ๋ฐ๋ผ ํ์ผ ์์คํ ๋ฐฑ์ ์ด๋ ์ง์์ ์์นด์ด๋น ๋ฑ ๋ค๋ฅธ ์ ๋ต์ด ํ์ํ ์ ์์ต๋๋ค. PostgreSQL ๊ณต์ ๋ฌธ์๋ ์ฌ๋ฌ ๋ฐฑ์ ๋ฐฉ์์ ๋ณ๋๋ก ์ค๋ช ํฉ๋๋ค.[5]
6. ์ด์ ํ๊ฒฝ๊ณผ ๋ถ๋ฆฌํด์ ๋ณต๊ตฌ ์ํํ๊ธฐ
์ฒซ ๋ณต๊ตฌ ์ํ์ ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฎ์ด์ฐ๋ ๋์ ์ DB์ ๋ณ๋ ํ์ผ ํด๋์์ ์งํํ์ธ์. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ๊ฒฐ ์ค์ ๋ ํ ์คํธ ๋์์ผ๋ก ๋ฐ๊ฟ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ณต๊ตฌ๊ฐ ์ ๋ ๊ฒ์ฒ๋ผ ๋ณด์ฌ๋ ์ค์ ๋ก๋ ์ด์ DB๋ฅผ ์ฝ๊ณ ์์ ์ ์์ต๋๋ค.
์ธ๋ถ ์๋น์ค ์ฐ๊ฒฐ๋ ๊ตฌ๋ถํด์ผ ํฉ๋๋ค. ํ ์คํธ ์๋ฒ๊ฐ ์ค์ ์ด๋ฉ์ผ์ ๋ณด๋ด๊ฑฐ๋ ์ด์ ์ ์ฅ์์ ํ์ผ์ ์ฐ์ง ์๋๋ก ์ค์ ์ ํ์ธํ์ธ์. ๋ก๊ทธ์ธ ์ํ๋ฅผ ๊ณต์ ํ๋ ์ฟ ํค๋ ์ธ๋ถ ์ฝ๋ฐฑ ์ฃผ์๊ฐ ์๋ค๋ฉด ํ ์คํธ ํ๊ฒฝ์์ ์์๋๋ก ๋์ํ๋์ง๋ ์ ๊ฒํฉ๋๋ค.
- ๋ณต๊ตฌ ๋์ DBยทํ์ผ ์ ์ฅ ์์น๊ฐ ์ด์ ํ๊ฒฝ๊ณผ ๋ถ๋ฆฌ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
- ๋ฐฑ์ ์ ๋ณต์ํ๊ณ , ๋ง๋ ์ฝ๋ ๋ฒ์ ๊ณผ ์คํ ํ๊ฒฝ์ ์ค๋นํฉ๋๋ค.
- ๋ชฉ๋ก๊ณผ ํ๋ณธ ๊ฒ์๊ธ์ ์ด์ด ์ ๋ชฉยท๋ณธ๋ฌธยท์์ฑ ์๊ฐ์ ํ์ธํฉ๋๋ค.
- ๋ณธ๋ฌธ ์ด๋ฏธ์ง์ ์ฒจ๋ถ ํ์ผ์ ์ค์ ์กด์ฌ ๋ฐ ๋ค์ด๋ก๋๋ฅผ ํ์ธํฉ๋๋ค.
- ํ ์คํธ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ๊ณ ํ์ํ ์ฝ๊ธฐยท์ฐ๊ธฐ ๊ธฐ๋ฅ์ ํ์ธํฉ๋๋ค.
- ์คํ ์๊ฐ๊ณผ ๋ฐ๊ฒฌํ ๋ฌธ์ ๋ฅผ ๊ธฐ๋กํ ๋ค ํ ์คํธ ์๋ฃ๋ฅผ ์ ๋ฆฌํฉ๋๋ค.
์ ์ฒด ๋ฐ์ดํฐ๊ฐ ๋ง๋ค๋ฉด ํ๋ณธ ๊ฒ์ฌ์ ์๋ ๊ฒ์ฌ๋ฅผ ํจ๊ป ์ฌ์ฉํ์ธ์. ์ต์ ๊ธ๋ง ๊ฒ์ฌํ๋ฉด ์์ ๊ฒฝ๋ก ์ฒด๊ณ๋ก ์ ์ฅ๋ ์ด๋ฏธ์ง๋ฅผ ๋์น ์ ์์ต๋๋ค. ์ต๊ทผ ์๋ฃ, ์ค๋๋ ์๋ฃ, ์ฒจ๋ถ๊ฐ ๋ง์ ๊ธ์ ๋๋ ์ ํํ๋ฉด ์ ๊ฒ ๋ฒ์๋ฅผ ๋ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
7. ๋ณต๊ตฌ ๋ฉ๋ชจ์๋ ๋ฌด์์ ๋จ๊ธธ๊น?
์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ํ์ ๊ธฐ์ตํ๋ ์์ ์์๋ ํท๊ฐ๋ฆด ์ ์์ต๋๋ค. ๋ฐฑ์ ํด๋์ ๋ณต๊ตฌ ๋ฉ๋ชจ๋ฅผ ํจ๊ป ๋จ๊ธฐ๋, ๊ณต๊ฐ๋ ์ ์๋ ๋ฌธ์์๋ ์ค์ ๋น๋ฐ๋ฒํธ์ API ํค๋ฅผ ์ ์ง ๋ง์ธ์. ์ค์ ์ด๋ฆ๊ณผ ์์ ํ ๋ณด๊ด ์์น๋ฅผ ๊ธฐ๋กํ๊ณ ๊ฐ ์์ฒด๋ ๋ณ๋๋ก ๊ด๋ฆฌํ์ธ์.
| ๊ธฐ๋ก ํญ๋ชฉ | ์์ |
|---|---|
| ๋ฌถ์ ์๋ณ์ | site-backup-2026-10-01-0200 |
| ํฌํจ ๋ฒ์ | DB ๋คํยท์ ๋ก๋ ํด๋ยท์ฝ๋ ๋ฒ์ |
| ๋ฐฑ์ ์์ยท์๋ฃ ์๊ฐ | ๋ ์งยท์๊ฐยท์๊ฐ๋ ํจ๊ป ๊ธฐ๋ก |
| ์คํ ์กฐ๊ฑด | PythonยทDBยท์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ |
| ๋ณต๊ตฌ ์์ | DB โ ํ์ผ โ ์ค์ โ ์คํ โ ๊ธฐ๋ฅ ํ์ธ |
| ์ต๊ทผ ์ํ ๊ฒฐ๊ณผ | ํ๋ณธ ๊ธยท์ด๋ฏธ์งยท๋ก๊ทธ์ธ ํ์ธ ๊ฒฐ๊ณผ |
๋ณต๊ตฌ ์์ ์์๋ ์ถ๋ฐ์ ์ผ ๋ฟ์ ๋๋ค. ์ค์ ๋ก๋ DB ํ์ฅ ๊ธฐ๋ฅ, ํ์ผ ๊ถํ, ์๋น์ค ์ค์ ๋ฑ ์ ํ ์กฐ๊ฑด์ด ๋ฌ๋ผ์ง ์ ์์ผ๋ฏ๋ก ์์ ์ ์๋ฒ์์ ํ์ธํ ์์๋ก ๊ฐฑ์ ํ์ธ์. ์๋ ๋ฐฐํฌ๋ง ๊ฐ๋ฅํ๊ณ ๋ณต๊ตฌ ์คํ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์ด์ ๋ฉ๋ชจ๊ฐ ์์ง ์ถฉ๋ถํ์ง ์์ ๊ฒ์ ๋๋ค.
8. ๋ฐฑ์ ์ ์๋ณธ๊ณผ ๋ค๋ฅธ ์ฅ์ ๋ฒ์์ ๋ณด๊ดํ๊ธฐ
์๋ณธ๊ณผ ๋ฐฑ์ ์ด ๊ฐ์ ๋์คํฌ์๋ง ์์ผ๋ฉด ๋์คํฌ ๊ณ ์ฅ์ผ๋ก ๋ ๋ค ์ฌ๋ผ์ง ์ ์์ต๋๋ค. ํญ์ ์ฐ๊ฒฐ๋ ์ ์ฅ์๋ ์๋ชป๋ ์ญ์ ๋ ๊ณต๊ฒฉ์ ์ํฅ์ ํจ๊ป ๋ฐ์ ์ ์์ต๋๋ค. ๋ณต์ฌ๋ณธ ๊ฐ์๋ฟ ์๋๋ผ ์ด๋ค ์ฅ์ ๋ฅผ ๋ฐ๋ก ๊ฒฌ๋ ์ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
CISA๋ ์ค์ํ ์๋ฃ์ ์คํ๋ผ์ธยท์ํธํ ๋ฐฑ์ ๊ณผ ์ ๊ธฐ์ ์ธ ๋ณต๊ตฌ ์ํ์ ๊ถ๊ณ ํฉ๋๋ค.[6] ๊ฐ์ธ ์ฌ์ดํธ์์๋ ๋ณ๋ ์ ์ฅ ์์น, ์ ๊ทผ ๊ถํ ๋ถ๋ฆฌ, ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ณด์กด ๊ธฐ๋ฅ์ ๊ฒํ ํ ์ ์์ต๋๋ค. ์ค์ ์ ์ฅ์ ๊ธฐ๋ฅ๊ณผ ๊ณ์ ์ค์ ์ ํ์ธํ ๋ค ์ ์ฉํ์ธ์.
์ํธํ๋ ๋ฐฑ์ ์ ๋ณตํธํ์ ํ์ํ ํค๋ฅผ ํ๋ณดํ ์ ์์ด์ผ ๋ณต๊ตฌ๋ฉ๋๋ค. ๋ณด๊ด ์์น๋ง ์๊ณ ๋น๋ฐ๋ฒํธ๋ ๋ณต๊ตฌ ํค๋ฅผ ์์ด๋ฒ๋ฆฌ๋ฉด ๋ฐฑ์ ํ์ผ์ด ์์ด๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ณต๊ตฌ ์ํ์๋ ์ ๊ทผ ๊ถํ๊ณผ ๋ณตํธํ ์ ์ฐจ๋ ํฌํจํ์ธ์.
์ด์ ๋ฐฑ์ ์ ๊ณง๋ฐ๋ก ๋ชจ๋ ์ง์ฐ๋ ์ ์ฑ ๋ ํผํด์ผ ํฉ๋๋ค. ๋๋ฝ์ด๋ ์๋ชป๋ ์ญ์ ๋ฅผ ๋ค๋ฆ๊ฒ ๋ฐ๊ฒฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ผ๋ณยท์ฃผ๋ณ ๋ฑ ์ฌ๋ฌ ์์ ์ ์ด๋ป๊ฒ ๋ณด๊ดํ ์ง๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋น๋์ ์ ์ฅ ๊ณต๊ฐ์ ๋ง์ถฐ ์ ํ๊ณ , ์ญ์ ๊ธฐ์ค์ ๋ฌธ์์ ๋จ๊ธฐ์ธ์.
9. ๊ฐ๋จํ ZIP ๊ฒ์ฌ ์ฝ๋์ ๊ทธ ํ๊ณ
Python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง์ผ๋ก ZIP ๋ด๋ถ ๊ฒ์ฌ์ ๋ชฉ๋ก ํ์ธ์ ์์ํ ์ ์์ต๋๋ค. ๋ค์ ์ฝ๋๋ ์์ถ์ ํ์ง ์๊ณ ๊ฒ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ์ด ๊ฒ์ฌ๋ ํ์ํ ์ด๋ฏธ์ง๊ฐ ๋ชจ๋ ์๋์ง๋ ์๋น์ค๊ฐ ์ ์ ๋์ํ๋์ง๋ ํ์ธํ์ง ์์ต๋๋ค.[2]
from pathlib import Path
import zipfile
backup = Path("site-backup.zip")
with zipfile.ZipFile(backup) as archive:
broken = archive.testzip()
print("archive check:", "PASS" if broken is None else "FAIL")
if broken is not None:
print("first broken member:", broken)
print("archive members:", len(archive.namelist()))
๊ฒ์ฌ ๊ฒฐ๊ณผ๊ฐ PASS์ด๋ฉด ๋ค์ ๋จ๊ณ๋ก DB ๋ณต์๊ณผ ์ฐธ์กฐ ํ์ผ ํ์ธ์ ์งํํฉ๋๋ค. ํ์ผ ๋ชฉ๋ก์ ์ด๋ฏธ์ง๊ฐ ๋ง๋ค๊ณ ๋ชจ๋ ๊ธ์ ์ด๋ฏธ์ง๊ฐ ์๋ค๊ณ ๋จ์ ํ์ง ๋ง์ธ์. DB๊ฐ ์ฐธ์กฐํ๋ ๊ฒฝ๋ก์ ๋ณต์๋ ํ์ผ์ ๋น๊ตํด์ผ ๋๋ฝ์ ํ์ธํ ์ ์์ต๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Q. GitHub์ ์ฝ๋๊ฐ ์์ผ๋ฉด ๋ณ๋ ๋ฐฑ์ ์ ํ์ ์๋์?
์ ์ฅ์์ ํฌํจ๋์ง ์์ DBยท์ ๋ก๋ ํ์ผยท์คํ ์ค์ ์ ๋ฐ๋ก ํ๋ณดํด์ผ ํฉ๋๋ค. ์ ์ฅ์๋ฅผ ๋ณต์ ํ์ ๋ ์ค์ ๋ก ๋ฌด์์ด ๋ฐ๋ผ์ค๋์ง ํ์ธํ๋ ๊ฒ์ด ๋จผ์ ์ ๋๋ค.
Q. ์๋ DB ๋ฐฑ์ ์ด ์์ผ๋ฉด ์ด๋ฏธ์ง๋ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๋์?
์ด๋ฏธ์ง๊ฐ DB ์ธ๋ถ์ ์ ์ฅ๋๋ค๋ฉด ๋ณ๋ ๋์์ ๋๋ค. ๋ฐฑ์ ์๋น์ค์ ํฌํจ ๋ฒ์๋ฅผ ํ์ธํ๊ณ , ํ์ผ ๊ฒฝ๋ก์ ์ค์ ์ ์ฅ ์๋ฃ๋ฅผ ํจ๊ป ๋ณต๊ตฌํ ์ ์๋์ง ์ํํ์ธ์.
Q. ๋งค์ผ ๋ฐฑ์ ํ๋ฉด ์ค๋ ์๋ฃ๋ ๋ณต๊ตฌํ ์ ์๋์?
๋ง์ง๋ง ๋ฐฑ์ ์ดํ ์์ฑ๋ ์๋ฃ๋ ํฌํจ๋์ง ์์ ์ ์์ต๋๋ค. ํ์ํ ๋ณต๊ตฌ ์์ ์ ์ ํ ๋ค ๋ฐฑ์ ๊ฐ๊ฒฉ๊ณผ ์ถ๊ฐ ๋ณต๊ตฌ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
Q. ZIP ๊ฒ์ฌ์ ํต๊ณผํ๋๋ฐ ์ ๋ณต๊ตฌ ์คํจ๋ผ๊ณ ํ๋์?
ZIP ๊ฒ์ฌ๋ ๋ค์ด ์๋ ํ์ผ์ ์ํ๋ฅผ ํ์ธํฉ๋๋ค. ๋๋ฝ๋ ์ด๋ฏธ์ง๋ ๋ง์ง ์๋ ์คํ ์ค์ ๊น์ง ํ๋จํ์ง ์์ต๋๋ค. ์ค์ต์์๋ ์ธ ZIP ๋ชจ๋ ํต๊ณผํ์ง๋ง ๋ ๊ตฌ์ฑ์์๋ ์ด๋ฏธ์ง๊ฐ ๋น ์ ธ ์์์ต๋๋ค.
Q. ๋ณต๊ตฌ ์๊ฐ์ ํ์ผ์ ๋ณต์ฌํ๋ ์๊ฐ๋ง ์ฌ๋ฉด ๋๋์?
์๋น์ค๋ฅผ ๋ค์ ์ฌ์ฉํ ์ ์๋ ์์ ๊น์ง ๊ธฐ๋กํ๋ ํธ์ด ์ ์ฉํฉ๋๋ค. DB ๋ณต์, ์ค์ ์ค๋น, ์คํ, ๊ธฐ๋ฅ ํ์ธ์ ๊ฑธ๋ฆฐ ์๊ฐ๋ ํฌํจํด์ผ ์ด์ ๊ณํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Q. ์ผ๋ง๋ ์์ฃผ ๋ณต๊ตฌ๋ฅผ ์ํํด์ผ ํ๋์?
์๋ฃ์ ์ค์๋์ ๋ณ๊ฒฝ ๋น๋์ ๋ฐ๋ผ ์ฃผ๊ธฐ๋ฅผ ์ ํ์ธ์. ์ ๊ธฐ ์ํ ์ธ์๋ ์ ์ฅ์ ์ด์ , DB ์ ๊ทธ๋ ์ด๋, ๋ฐฑ์ ๋ฐฉ์ ๋ณ๊ฒฝ ๋ค์๋ ๋ณต๊ตฌ ์ ์ฐจ๊ฐ ์ฌ์ ํ ๋ง๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์ ๋ฐฑ์ ์ ๋ง๋ค ๋๋ ๊ฒฐ๊ณผ ํ์ผ ์ด๋ฆ๋ง ๊ธฐ๋กํ์ง ๋ง๊ณ , ํฌํจ๋ ์๋ฃ์ ์ต๊ทผ ๋ณต๊ตฌ ์ํ ๊ฒฐ๊ณผ๋ ํจ๊ป ๋จ๊ฒจ๋ณด์ธ์. ์ค์ ๋ก ๋ณต์ํด ๋ณธ ๊ธฐ๋ก์ด ์์ผ๋ฉด ์ฅ์ ๋ ํ์ํ ์์ ๊ณผ ๋น ์ง ํญ๋ชฉ์ ํจ์ฌ ๊ตฌ์ฒด์ ์ผ๋ก ํ๋จํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ์๋ฃ์ ๊ฒ์ฆ ๋ฒ์
๊ณต์ ๋ฌธ์ ํ์ธ์ผ: 2026๋ 10์ 1์ผ. ์ค์ต์ ์์ SQLite DB์ ๊ฒ์๊ธ ์ธ ๊ฐ์ ๋ก์ปฌ PNG ์ธ ์ฅ์ ๋์์ผ๋ก ์งํํ์ต๋๋ค. ZIP์์ DB์ ํ์ผ์ ๋ณ๋ ํด๋์ ๋ณต์ํ๊ณ ํ ์ยท์ฐธ์กฐ ํ์ผ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ์ต๋๋ค. PostgreSQL ์ด์ ๋ณต๊ตฌ, ์ธ๋ถ ์ ์ฅ์, ์ธ์ฆ ๊ธฐ๋ฅ, ๋ณต๊ตฌ ์์ ์๊ฐ์ ์ค์ต ๊ฒ์ฆ ๋ฒ์์ ํฌํจํ์ง ์์์ต๋๋ค.
๐ฌ ๋๊ธ 0๊ฐ