inspeep

๋ฐฑ์—… ํŒŒ์ผ์ด ์žˆ์–ด๋„ ๋ณต๊ตฌ์— ์‹คํŒจํ•˜๋Š” ์ด์œ : ๊ฐœ์ธ ์›น์‚ฌ์ดํŠธ ๋ฐฑ์—…ยท๋ณต๊ตฌ ์ ๊ฒ€๋ฒ•

์กฐํšŒ ์ˆ˜ 9
์ถ”์ฒœ ์ˆ˜ 0
๋Œ“๊ธ€ 0

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

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

์ด ๊ธ€์€ ๊ฐœ์ธ ๊ฐœ๋ฐœ์ž์™€ ์†Œ๊ทœ๋ชจ ๊ฒŒ์‹œํŒ ์šด์˜์ž๊ฐ€ ๋ฐฑ์—… ๋ฒ”์œ„๋ฅผ ์ •ํ•˜๊ณ  ๋ณต๊ตฌ๋ฅผ ์‹œํ—˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋งคํ•˜๋„๋ก ์œ ๋„ํ•˜๊ธฐ๋ณด๋‹ค, ํ˜„์žฌ ๊ตฌ์กฐ์—์„œ ๋ฌด์—‡์„ ๋‚จ๊ฒจ์•ผ ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ท„์Šต๋‹ˆ๋‹ค.

์‹ค์Šต ๋ฒ”์œ„: ๊ธ€ ์ž‘์„ฑ ๊ณผ์ •์—์„œ ์ž„์‹œ 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์žฅ
ZIP ๊ฒ€์‚ฌ๋Š” ์„ธ ๊ฒฝ์šฐ ๋ชจ๋‘ ํ†ต๊ณผํ–ˆ์ง€๋งŒ ์ด๋ฏธ์ง€ ๋ˆ„๋ฝ์€ ๊ฐ๊ฐ 3์žฅ, 1์žฅ, 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๋ฅผ ์ฝ๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

  1. ๋ณต๊ตฌ ๋Œ€์ƒ DBยทํŒŒ์ผ ์ €์žฅ ์œ„์น˜๊ฐ€ ์šด์˜ ํ™˜๊ฒฝ๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฐฑ์—…์„ ๋ณต์›ํ•˜๊ณ , ๋งž๋Š” ์ฝ”๋“œ ๋ฒ„์ „๊ณผ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ชฉ๋ก๊ณผ ํ‘œ๋ณธ ๊ฒŒ์‹œ๊ธ€์„ ์—ด์–ด ์ œ๋ชฉยท๋ณธ๋ฌธยท์ž‘์„ฑ ์‹œ๊ฐ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณธ๋ฌธ ์ด๋ฏธ์ง€์™€ ์ฒจ๋ถ€ ํŒŒ์ผ์˜ ์‹ค์ œ ์กด์žฌ ๋ฐ ๋‹ค์šด๋กœ๋“œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  5. ํ…Œ์ŠคํŠธ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๊ณ  ํ•„์š”ํ•œ ์ฝ๊ธฐยท์“ฐ๊ธฐ ๊ธฐ๋Šฅ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  6. ์‹คํ–‰ ์‹œ๊ฐ„๊ณผ ๋ฐœ๊ฒฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ธฐ๋กํ•œ ๋’ค ํ…Œ์ŠคํŠธ ์ž๋ฃŒ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

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


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 ์šด์˜ ๋ณต๊ตฌ, ์™ธ๋ถ€ ์ €์žฅ์†Œ, ์ธ์ฆ ๊ธฐ๋Šฅ, ๋ณต๊ตฌ ์†Œ์š” ์‹œ๊ฐ„์€ ์‹ค์Šต ๊ฒ€์ฆ ๋ฒ”์œ„์— ํฌํ•จํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

  1. Python โ€” SQLite Connection.backup()
  2. Python โ€” ZipFile.testzip()
  3. PostgreSQL โ€” pg_dump
  4. PostgreSQL โ€” pg_restore
  5. PostgreSQL โ€” Backup and Restore
  6. CISA โ€” #StopRansomware Guide

๐Ÿ’ฌ ๋Œ“๊ธ€ 0๊ฐœ

IT ๊ฒŒ์‹œํŒ

๊ณต์ง€
Notice
๊ณต์ง€ inspeep ์ปค๋ฎค๋‹ˆํ‹ฐ ์ด์šฉ ๋ฐ ๊ฒŒ์‹œ๋ฌผ ๊ด€๋ฆฌ ๊ทœ์ • ์•ˆ๋‚ด
๐Ÿ‘ค ๊ด€๋ฆฌ์ž ๐Ÿ“… 2026.04.15 ๐Ÿ‘€ ์กฐํšŒ 57 ๐Ÿ‘ ์ถ”์ฒœ 0
BEST
์ธ๋„ค์ผ
BEST 2. ์ฝ”๋”ฉ ๋ฌธ์™ธํ•œ์˜ ์›Œ๋“œํ”„๋ ˆ์Šค ์ •๋ณต๊ธฐ: VS Code์™€ FTP์˜ ์Šต๊ฒฉ
๐Ÿ‘ค ๊ด€๋ฆฌ์ž ๐Ÿ“… 2026.03.05 ๐Ÿ‘€ ์กฐํšŒ 135 ๐Ÿ‘ ์ถ”์ฒœ 0
Random Pick
์ธ๋„ค์ผ
๋‰ด์Šค
์ธ๋„ค์ผ
ํœด์ง€๊ฐ€ ์™œ ์ปดํ“จํ„ฐ ์•ž์— ์žˆ์–ด์š”?" ์˜ ์ง„์‹ค
๐Ÿ‘ค Maodun ๐Ÿ“… 2026.10.05 ๐Ÿ‘€ ์กฐํšŒ 2 ๐Ÿ‘ ์ถ”์ฒœ 0
๊ฐœ๋ฐœ
์ธ๋„ค์ผ
๊ฐœ๋ฐœ
์ธ๋„ค์ผ
ํ•€๋ž€๋“œ ๊ตฐ์ธ ์žฅ๊ต๊ฐ€ ๊ฒŒ์ž„์„ ๊ฐœ๋ฐœํ•ด์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฌผ
๐Ÿ‘ค ๋กœ๋ฃจ๋””๋‹ค ๐Ÿ“… 2026.10.01 ๐Ÿ‘€ ์กฐํšŒ 4 ๐Ÿ‘ ์ถ”์ฒœ 0
๋‰ด์Šค
์ธ๋„ค์ผ
๊ฐค๋Ÿญ์‹œ ํƒญ S12 ์‹œ๋ฆฌ์ฆˆ ๊ณต๊ฐœ
๐Ÿ‘ค KEeep ๐Ÿ“… 2026.10.01 ๐Ÿ‘€ ์กฐํšŒ 1 ๐Ÿ‘ ์ถ”์ฒœ 0
๊ฐœ๋ฐœ
์ธ๋„ค์ผ
๋‰ด์Šค
์ธ๋„ค์ผ
์•„์ดํฐ ํ‚ค๋ณด๋“œ ์˜คํƒ€ ์ž˜๋‚˜๋Š” ์ด์œ ..jpg
๐Ÿ‘ค ๋ฃจ๋ฃจ์›จ๋„ ๐Ÿ“… 2026.09.27 ๐Ÿ‘€ ์กฐํšŒ 1 ๐Ÿ‘ ์ถ”์ฒœ 0
๋‰ด์Šค
์ธ๋„ค์ผ
์ปดํ“จํ„ฐ ์œ ํŠœ๋ฒ„๊ฐ€ ๋งํ•ด์ฃผ๋Š” ์ตœ๊ทผ ์šฉ์‚ฐ ์ฐ
๐Ÿ‘ค ๋ฃจ๋ฃจ์›จ๋„ ๐Ÿ“… 2026.09.26 ๐Ÿ‘€ ์กฐํšŒ 1 ๐Ÿ‘ ์ถ”์ฒœ 0
๊ฐœ๋ฐœ
์ธ๋„ค์ผ
์‹ฑ๊ธ€๋ฒ™๊ธ€ 2025~27๋…„ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ๋น„ ์ˆœ์œ„
๐Ÿ‘ค ์•ผ๋ฆฌํƒ€ ๐Ÿ“… 2026.09.26 ๐Ÿ‘€ ์กฐํšŒ 0 ๐Ÿ‘ ์ถ”์ฒœ 0
๋‰ด์Šค
์ธ๋„ค์ผ
์˜์™ธ๋กœ ์Šค๋งˆํŠธํฐ ๋ฐฐํ„ฐ๋ฆฌ ์†Œ๋ชจ ์‹ฌํ•˜๋‹ค๋Š”๊ฑฐ
๐Ÿ‘ค Maodun ๐Ÿ“… 2026.09.23 ๐Ÿ‘€ ์กฐํšŒ 4 ๐Ÿ‘ ์ถ”์ฒœ 0
๋‰ด์Šค
์ธ๋„ค์ผ
์•„์ดํฐ 18 ์‹œ๋ฆฌ์ฆˆ ์‹ฌ๊ฐํ•œ ํŒจ๋‹‰ํ’€ ๊ฒฐํ•จ
๐Ÿ‘ค ๋กœ๋ฃจ๋””๋‹ค ๐Ÿ“… 2026.09.22 ๐Ÿ‘€ ์กฐํšŒ 5 ๐Ÿ‘ ์ถ”์ฒœ 0
๊ฐœ๋ฐœ
์ธ๋„ค์ผ
์‹ ์•ฝ ๊ฐœ๋ฐœ AI 'K-ํด๋“œ' ๊ตฌ๊ธ€์— ๋„์ „์žฅ
๐Ÿ‘ค ๋ฐ”๋ฃจ๋ฐ์—ฌ ๐Ÿ“… 2026.09.21 ๐Ÿ‘€ ์กฐํšŒ 3 ๐Ÿ‘ ์ถ”์ฒœ 0
๋‰ด์Šค
์ธ๋„ค์ผ
ๅŒ—๋ฐฐ์ง€ ๊ฐ€์Šด์— ๋‹ฌ๊ณ , ์†์—” ์‚ผ์„ฑ ๊ฐค๋Ÿญ์‹œํฐ?
๐Ÿ‘ค ๋ฃจ๋ฃจ์›จ๋„ ๐Ÿ“… 2026.09.20 ๐Ÿ‘€ ์กฐํšŒ 6 ๐Ÿ‘ ์ถ”์ฒœ 0
๋‰ด์Šค
์ธ๋„ค์ผ
๊ฐค๋Ÿญ์‹œ s25+ ํญ๋ฐœ์‚ฌ๊ณ ;
๐Ÿ‘ค PPAOE ๐Ÿ“… 2026.09.19 ๐Ÿ‘€ ์กฐํšŒ 6 ๐Ÿ‘ ์ถ”์ฒœ 0
๊ฐœ๋ฐœ
์ธ๋„ค์ผ
๊ฐœ๋ฐœ์ž ํ–ฅํ•ด ๊ณต๊ฒฉ? ๋ฌด์ˆ  ๋กœ๋ด‡ 'ํ†ต์ œ ๋ถˆ๋Šฅ' ๋น„์ƒ
๐Ÿ‘ค ๋กœ๋ฃจ๋””๋‹ค ๐Ÿ“… 2026.09.19 ๐Ÿ‘€ ์กฐํšŒ 4 ๐Ÿ‘ ์ถ”์ฒœ 0
๋‰ด์Šค
์ธ๋„ค์ผ
์Šฌ๋กญ๋А๋‚Œ์—†๋Š” ๋ฐ”์ด๋ธŒ์ฝ”๋”ฉ ์ข†๊ณ ์ˆ˜๊ฐ€ ์ด์‚ฌ๋žŒ์ž„ ใ…‹ใ…‹
๐Ÿ‘ค ๋กœ๋ฃจ๋””๋‹ค ๐Ÿ“… 2026.09.18 ๐Ÿ‘€ ์กฐํšŒ 11 ๐Ÿ‘ ์ถ”์ฒœ 0
๊ฐœ๋ฐœ
์ธ๋„ค์ผ
๋‰ด์Šค
์ธ๋„ค์ผ
์ค‘๊ตญ์ž‡์„ญ๋„ ๊ทน์ฐฌ. ์•„์ดํฐ18 ํ”„๋กœ๋งฅ์Šค A20 ๋ถ„์„ ์š”์•ฝ.
๐Ÿ‘ค ๋ฃจ๋ฃจ์›จ๋„ ๐Ÿ“… 2026.09.18 ๐Ÿ‘€ ์กฐํšŒ 10 ๐Ÿ‘ ์ถ”์ฒœ 0
๊ฐœ๋ฐœ
์ธ๋„ค์ผ
์•…ํ”Œ ์ฐพ์•„์ฃผ๋Š” AI์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ๋ฐœํ•œ ํ—ˆ์„ฑ๋ฒ”
๐Ÿ‘ค Maodun ๐Ÿ“… 2026.09.18 ๐Ÿ‘€ ์กฐํšŒ 12 ๐Ÿ‘ ์ถ”์ฒœ 0
๋‰ด์Šค
์ธ๋„ค์ผ
์‚ผ์„ฑ๊ฐ•๋‚จ ๊ฐค๋Ÿญ์‹œ ํด๋”๋ธ” ์ „์‹œํšŒ
๐Ÿ‘ค KEeep ๐Ÿ“… 2026.09.15 ๐Ÿ‘€ ์กฐํšŒ 13 ๐Ÿ‘ ์ถ”์ฒœ 0
๊ฐœ๋ฐœ
์ธ๋„ค์ผ
์ด๊ฒŒ ํฌ๋ž˜ํ”„ํ†ค ์ถœ์‹  ๊ฐœ๋ฐœ์ž์˜ ๋ง๋กœ์ž„...jpg
๐Ÿ‘ค ๋กœ๋ฃจ๋””๋‹ค ๐Ÿ“… 2026.09.15 ๐Ÿ‘€ ์กฐํšŒ 14 ๐Ÿ‘ ์ถ”์ฒœ 0
« ์ฒ˜์Œ ‹ ์ด์ „ 1 2 3 4 5 6 7 ๋‹ค์Œ › ๋ »
โœ๏ธ ๊ธ€์“ฐ๊ธฐ