IT๊ธฐ์ดˆ

์„œ๋ฒ„ ๋ฐฑ์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ• – rsync์™€ cron ํ™œ์šฉ

๐Ÿฅ„ํ…Œํฌ ํ•œ ์Šคํ‘ผ 2026. 5. 29. 09:04

๋ชฉ์ฐจ

  1. ๋ฐฑ์—…ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ธ์  ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ›„ํšŒํ•œ๋‹ค
  2. ๋ฌด์—‡์„ ๋ฐฑ์—…ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
  3. rsync๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
  4. rsync๋กœ ๋กœ์ปฌ ๋ฐฑ์—…ํ•˜๊ธฐ
  5. rsync๋กœ ์›๊ฒฉ ์„œ๋ฒ„์— ๋ฐฑ์—…ํ•˜๊ธฐ
  6. cron์œผ๋กœ ๋ฐฑ์—… ์ž๋™ํ™”ํ•˜๊ธฐ
  7. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—… ์ž๋™ํ™”
  8. ๋ฐฑ์—… ๋ณด์กด ๊ธฐ๊ฐ„ ๊ด€๋ฆฌํ•˜๊ธฐ
  9. ์ •๋ฆฌ ๋ฐ ๋‹ค์Œ ๋‹จ๊ณ„

1. ๋ฐฑ์—…ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ธ์  ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ›„ํšŒํ•œ๋‹ค

์„œ๋ฒ„ ์šด์˜์ž๋“ค ์‚ฌ์ด์—๋Š” ์ด๋Ÿฐ ๋ง์ด ์žˆ์Šต๋‹ˆ๋‹ค. "๋ฐฑ์—…์„ ํ•˜๋Š” ์‚ฌ๋žŒ๊ณผ, ์•„์ง ๋ฐ์ดํ„ฐ๋ฅผ ์žƒ์–ด๋ณธ ์  ์—†๋Š” ์‚ฌ๋žŒ๋งŒ ์žˆ๋‹ค"๊ณ ์š”.

๋””์Šคํฌ ๊ณ ์žฅ, ์‹ค์ˆ˜๋กœ ์ธํ•œ ํŒŒ์ผ ์‚ญ์ œ, ๋žœ์„ฌ์›จ์–ด ๊ฐ์—ผ, ์„œ๋ฒ„ ์ œ๊ณต์—…์ฒด์˜ ์žฅ์•  ๋“ฑ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ด์œ ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ์ผ์€ ์–ธ์ œ๋“  ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์œ ์ผํ•œ ํ•ด๊ฒฐ์ฑ…์€ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘” ๋ฐฑ์—…์ž…๋‹ˆ๋‹ค.

2. ๋ฌด์—‡์„ ๋ฐฑ์—…ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

๋ฐ˜๋“œ์‹œ ๋ฐฑ์—…ํ•ด์•ผ ํ•  ํ•ญ๋ชฉ์œผ๋กœ๋Š” ์›น ์„œ๋น„์Šค์˜ ์—…๋กœ๋“œ ํŒŒ์ผ(/var/www/html ๋“ฑ), ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ, ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ(/etc ๋””๋ ‰ํ† ๋ฆฌ ์ฃผ์š” ์„ค์ •), ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ์ฝ”๋“œ(GitHub ์—ฐ๋™์ด ์—†๋Š” ๊ฒฝ์šฐ), SSL ์ธ์ฆ์„œ ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๋“ค์ด ๊ถŒ์žฅํ•˜๋Š” 3-2-1 ๊ทœ์น™์€ ๋ฐ์ดํ„ฐ ์‚ฌ๋ณธ 3๊ฐœ ์œ ์ง€, 2๊ฐ€์ง€ ์„œ๋กœ ๋‹ค๋ฅธ ์ €์žฅ ๋งค์ฒด ์‚ฌ์šฉ, 1๊ฐœ๋Š” ์™ธ๋ถ€(์˜คํ”„์‚ฌ์ดํŠธ)์— ๋ณด๊ด€ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›๋ณธ ์„œ๋ฒ„, ๋‹ค๋ฅธ ์„œ๋ฒ„์˜ ๋ฐฑ์—…, ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€(S3 ๋“ฑ) ์„ธ ๊ณณ์— ๋ณด๊ด€ํ•˜๋Š” ์‹์ž…๋‹ˆ๋‹ค.

3. rsync๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

**rsync(Remote Sync)**๋Š” ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๊ณ  ๋ณต์‚ฌํ•˜๋Š” ๋ฆฌ๋ˆ…์Šค ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ „์ฒด ํŒŒ์ผ์„ ๋งค๋ฒˆ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. SSH๋ฅผ ํ†ตํ•ด ์›๊ฒฉ ์„œ๋ฒ„๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ „์†กํ•˜๋ฉฐ, ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ์ „์†ก์ด ์ค‘๋‹จ๋์„ ๋•Œ ์ด์–ด์„œ ์ „์†กํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

4. rsync๋กœ ๋กœ์ปฌ ๋ฐฑ์—…ํ•˜๊ธฐ

๊ฐ™์€ ์„œ๋ฒ„ ๋‚ด์—์„œ ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ๋ฐฑ์—…ํ•˜๋Š” ๊ธฐ๋ณธ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

 
 
rsync -av ์›๋ณธ๊ฒฝ๋กœ ๋ชฉ์ ์ง€๊ฒฝ๋กœ

/var/www/html ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ /backup/www๋กœ ๋ฐฑ์—…ํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

 
 
rsync -av /var/www/html/ /backup/www/

-a๋Š” ๊ถŒํ•œ·์†Œ์œ ์ž·ํƒ€์ž„์Šคํƒฌํ”„ ๋“ฑ ๋ชจ๋“  ์†์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ์•„์นด์ด๋ธŒ ๋ชจ๋“œ์ด๊ณ , -v๋Š” ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ์—์„œ ์‚ญ์ œ๋œ ํŒŒ์ผ์„ ๋ฐฑ์—… ๋””๋ ‰ํ† ๋ฆฌ์—์„œ๋„ ์‚ญ์ œํ•˜๋ ค๋ฉด --delete ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 
 
rsync -av --delete /var/www/html/ /backup/www/

5. rsync๋กœ ์›๊ฒฉ ์„œ๋ฒ„์— ๋ฐฑ์—…ํ•˜๊ธฐ

๋‹ค๋ฅธ ์„œ๋ฒ„๋กœ ๋ฐฑ์—…์„ ์ „์†กํ•  ๋•Œ๋Š” SSH๋ฅผ ํ†ตํ•ด rsync๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 
 
rsync -avz -e ssh /var/www/html/ ์‚ฌ์šฉ์ž๋ช…@๋ฐฑ์—…์„œ๋ฒ„IP:/backup/www/

-z๋Š” ์ „์†ก ์ค‘ ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•ด ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค. SSH ํ‚ค ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ -e ์˜ต์…˜์— ํ‚ค ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

 
 
rsync -avz -e "ssh -i ~/.ssh/backup_key.pem" /var/www/html/ ubuntu@๋ฐฑ์—…์„œ๋ฒ„IP:/backup/www/

6. cron์œผ๋กœ ๋ฐฑ์—… ์ž๋™ํ™”ํ•˜๊ธฐ

rsync ๋ช…๋ น์–ด๋ฅผ cron์— ๋“ฑ๋กํ•˜๋ฉด ์ •๊ธฐ์ ์œผ๋กœ ์ž๋™ ๋ฐฑ์—…์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

 
 
nano /home/ubuntu/scripts/backup.sh

์Šคํฌ๋ฆฝํŠธ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

 
 
#!/bin/bash
DATE=$(date +%Y%m%d)
rsync -avz /var/www/html/ /backup/www_$DATE/
echo "Backup completed: $DATE"

์Šคํฌ๋ฆฝํŠธ์— ์‹คํ–‰ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ณ  crontab์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

 
 
chmod +x /home/ubuntu/scripts/backup.sh
crontab -e

๋งค์ผ ์ƒˆ๋ฒฝ 3์‹œ์— ์‹คํ–‰ํ•˜๋„๋ก ์•„๋ž˜ ์ค„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 
 
0 3 * * * /home/ubuntu/scripts/backup.sh >> /var/log/backup.log 2>&1

7. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—… ์ž๋™ํ™”

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํŒŒ์ผ ๋ฐฑ์—…๊ณผ ๋ณ„๋„๋กœ ์ง„ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. MySQL ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์•„๋ž˜ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

 
 
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
mysqldump -u root -p๋น„๋ฐ€๋ฒˆํ˜ธ --all-databases > /backup/db_$DATE.sql
gzip /backup/db_$DATE.sql

๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ช…๋ น์–ด์— ์ง์ ‘ ์“ฐ๋Š” ๋Œ€์‹  ~/.my.cnf ํŒŒ์ผ์— ์ž๊ฒฉ์ฆ๋ช…์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๋ณด์•ˆ์ƒ ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

 
 
[client]
user=root
password=๋น„๋ฐ€๋ฒˆํ˜ธ

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์ดํ›„ mysqldump --all-databases์ฒ˜๋Ÿผ ๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

8. ๋ฐฑ์—… ๋ณด์กด ๊ธฐ๊ฐ„ ๊ด€๋ฆฌํ•˜๊ธฐ

๋งค์ผ ๋ฐฑ์—…์„ ๋งŒ๋“ค๋ฉด ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก ๋””์Šคํฌ๊ฐ€ ๊ฐ€๋“ ์ฐน๋‹ˆ๋‹ค. 30์ผ ์ด์ƒ ๋œ ๋ฐฑ์—… ํŒŒ์ผ์„ ์ž๋™ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ cron์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

 
 
0 4 * * * find /backup -name "*.sql.gz" -mtime +30 -delete

9. ์ •๋ฆฌ ๋ฐ ๋‹ค์Œ ๋‹จ๊ณ„

์˜ค๋Š˜ ๋ฐฐ์šด ํ•ต์‹ฌ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • rsync๋Š” ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋งŒ ์ „์†กํ•˜๋Š” ํšจ์œจ์ ์ธ ๋ฐฑ์—… ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • rsync์™€ cron์„ ์กฐํ•ฉํ•˜๋ฉด ์ •๊ธฐ ์ž๋™ ๋ฐฑ์—… ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŒŒ์ผ ๋ฐฑ์—…๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—…์€ ๋ณ„๋„๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • 3-2-1 ๊ทœ์น™์— ๋”ฐ๋ผ 3๊ณณ ์ด์ƒ์— ๋ฐฑ์—…์„ ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.
  • ์˜ค๋ž˜๋œ ๋ฐฑ์—…์€ ์ž๋™ ์‚ญ์ œ ์ •์ฑ…์„ ์„ค์ •ํ•ด ๋””์Šคํฌ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ธ€์—์„œ๋Š” ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์™€ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์˜ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.