−25%

Windows 연간 결제, 10월 31일까지. 요금제 보기

EQVPS
시작하기

다운타임 없이 VPS를 새 업체로 옮기기

2026년 10월 10일 · 4 분 읽기 · EQVPS Team

서버 이전 공포담에는 모두 같은 중간 부분이 있습니다. 누군가 DNS를 먼저 바꾸고 나서 복사를 시작한 것이죠. 이전 중 다운타임은 복사가 느려서 생기는 일이 거의 없습니다. 단계를 잘못된 순서로 밟아서 생깁니다.

다른 업체에서 넘어오든, 저희 요금제 사이에서 옮기든 통하는 순서는 이렇습니다.

1. 이틀 전: TTL 낮추기

바꿀 DNS 레코드(보통 A, AAAA, 그리고 이들을 가리키는 CNAME)를 찾아 TTL을 300초로 낮추세요. 그런 다음 최소한 예전 TTL만큼 기다립니다. TTL이 하루인 레코드는 변경 후에도 일부 리졸버가 하루 동안 예전 주소를 계속 내준다는 뜻이고, 서버에서 무엇을 해도 그걸 앞당길 수 없습니다.

사람들이 가장 많이 건너뛰는 단계이고, 5분이면 끝날 전환을 사용자 절반이 예전 서버를 보는 하루로 만드는 것도 바로 이 단계입니다.

2. 기존 서버 목록 만들기

이 머신을 다른 곳에 다시 세울 테니, 실제로 무엇을 하고 있는지 적어 두세요. 기억하는 것 말고, 실제로 하는 것을요.

ss -tlnp                                # what is listening, and which process
crontab -l; ls /etc/cron.d              # scheduled jobs
systemctl list-timers --all             # the scheduled jobs people forget
systemctl list-units --type=service --state=running

목록에 다음도 추가하세요. TLS 인증서와 갱신 방식, 비밀 값이 담긴 환경 파일, 방화벽 규칙, 사용자와 그들의 SSH 키, 데이터베이스와 그 크기, 그리고 IP 주소로 서버에 접근하는 모든 것. 마지막 그룹이 까다롭습니다. 파트너의 허용 목록, 결제 업체의 웹훅 설정, 모니터링 체크 같은 것들이죠.

3. 기존 서버 옆에 새 서버 세우기

새 서버를 주문하고 기존 서버는 그대로 두세요. VPS 목록에서 판매된 용량이 아니라 실제로 쓰는 양과 같거나 더 큰 디스크를 가진 요금제를 고르세요. 기존 머신이 들어오는 트래픽(웹사이트, 웹훅, API)을 조금이라도 받는다면 새 머신에는 전용 IPv4가 필요합니다. NAT 요금제는 SSH 포트로만 인바운드 연결을 받는데, 그게 왜 중요한지는 포워딩된 포트 하나로 할 수 있는 것과 없는 것에서 설명합니다.

접속해서 같은 패키지를 설치하고 사용자와 방화벽을 다시 만드세요. 키와 첫 로그인은 연결 가이드에 나와 있습니다.

4. 파일은 두 번 동기화하기

첫 동기화는 기존 서버가 계속 일하는 동안 모든 것을 복사합니다. 몇 시간이 걸려도 괜찮습니다.

rsync -aHAX --numeric-ids --info=progress2 /var/www/ root@203.0.113.10:/var/www/

--numeric-ids는 파일 소유자를 번호 그대로 유지해서, 두 시스템이 사용자를 다른 순서로 만들었을 때 생기는 고전적인 "모든 게 엉뚱한 사용자 소유" 사태를 막아 줍니다. SSH로 rsync를 써 본 적이 없다면 VPS로 파일 옮기기가 단계별로 안내합니다.

두 번째 동기화는 전환 직전에 하며, 첫 동기화 이후 바뀐 것만 복사합니다. 보통 몇 초면 끝납니다.

5. 데이터베이스는 신중하게 옮기기

파일은 쉽습니다. 쓰기를 받는 데이터베이스는 "다운타임 없음"에 작은 타협이나 추가 작업이 필요한 유일한 부분입니다.

간단한 방법: 테스트용으로 한 번 덤프해서 복원해 두고, 전환할 때 1분간 쓰기를 멈춘 뒤(앱을 읽기 전용으로 바꾸거나 중지), 새 덤프를 떠서 새 서버에 복원하고 거기서 앱을 시작합니다. 작은 프로젝트 대부분은 미리 공지한 1~2분의 중단이면 됩니다.

중단 없는 방법: 기존 데이터베이스에서 새 데이터베이스로 복제를 구성하고, 따라잡게 한 뒤 전환 시점에 새 쪽을 주 데이터베이스로 승격합니다. 준비가 더 들지만, 1분의 쓰기 손실도 받아들일 수 없다면 그럴 가치가 있습니다.

6. 다른 사람이 보기 전에 새 서버 테스트하기

DNS가 아직 기존 서버를 가리키고 있으니 새 서버는 조용히 테스트할 수 있습니다. 실제 도메인에 대한 요청을 새 주소로 보내세요.

curl --resolve example.com:443:203.0.113.10 https://example.com/health

인증서가 아직 없다면 같은 방식으로 HTTP로 테스트하거나, hosts 파일에 임시 줄을 넣고 브라우저로 사이트를 둘러보세요. 로그인, 업로드, 백그라운드 작업, 발신 메일을 확인하세요. 빠진 PHP 확장을 찾기에 가장 싸게 먹히는 순간입니다.

7. 전환하고, 기존 서버는 켜 두기

마지막 파일 동기화와 데이터베이스 단계를 마친 뒤 DNS 레코드를 바꾸세요. TTL이 300초면 트래픽 대부분이 몇 분 안에 넘어갑니다. 기존 서버의 접근 로그를 지켜보세요. TTL을 무시하는 리졸버와 클라이언트에서 여전히 요청이 조금씩 들어옵니다. 그대로 며칠 켜 두세요. 그다음 예전 IP를 가리키는 모든 것을 갱신합니다. 파트너 허용 목록, 웹훅 URL, 그리고 메일용으로 새 주소의 역방향 DNS(저희 전용 IP 요금제에서는 직접 설정합니다. 역방향 DNS 참고)와 SPF 레코드입니다.

가장 자주 망가지는 것

저희가 보는 빈도 순으로 대략 꼽으면 이렇습니다. 아무도 목록에 넣지 않은 systemd 타이머, 예전 IP가 하드코딩된 설정 파일, 엉뚱한 사용자 소유가 된 파일, 앱 자체 포트를 막는 방화벽, 기존 서버에서는 갱신되는데 새 서버에서는 갱신되지 않는 인증서, 그리고 새 주소에 아직 역방향 DNS가 없어서 스팸함으로 가는 메일.

이 체크리스트가 맞지 않는 경우

쓰기가 끊임없고 중단을 전혀 허용할 수 없는 바쁜 데이터베이스에는 블로그 체크리스트가 아니라 제대로 된 복제와 리허설이 필요합니다. Windows 서버는 rsync와는 다른 도구로 옮깁니다. 그리고 이전의 진짜 이유가 크기라면 이것부터 읽으세요. 여기서는 요금제를 그 자리에서 키울 수 있습니다. 같은 네트워크 유형의 더 큰 요금제로 바꾸면 이전 없이 재부팅 한 번으로 vCPU, 메모리, 디스크가 늘어납니다. 새 서버가 필요한 건 줄일 때뿐입니다. 머신이 충분히 큰지 확신이 없어서 옮기려는 거라면 정말로 64 GB 메모리가 필요할 때가 수고를 덜어 줄 수 있고, VPS가 맞는 선택인지 고민이라면 VPS, 공유 호스팅, 전용 서버, 클라우드 비교가 도움이 됩니다.

FAQ

DNS TTL은 얼마나 미리 낮춰야 하나요?

최소한 현재 TTL만큼 미리, 이상적으로는 이전 하루이틀 전에 낮추세요. 레코드의 TTL이 86400초라면 리졸버가 예전 응답을 하루 종일 붙잡고 있을 수 있으므로, 전환 한 시간 전에 낮추는 건 아무 소용이 없습니다.

정말로 다운타임 없이 이전할 수 있나요?

상태가 없는 서비스라면 가능합니다. 두 서버를 모두 돌리면서 DNS를 바꾸고 트래픽이 넘어가기를 기다리면 됩니다. 쓰기를 받는 데이터베이스라면 마지막 동기화 동안의 짧은 쓰기 중단을 감수하거나, 복제를 구성해 새 서버가 항상 최신 상태가 되도록 해야 합니다.

DNS를 바꾸기 전에 새 서버를 어떻게 테스트하나요?

내 컴퓨터만 새 서버를 보게 하세요. curl의 --resolve로 실제 도메인에 대한 요청을 새 IP로 보내거나, hosts 파일에 임시 줄을 추가하면 됩니다. 다른 사람들은 계속 기존 서버를 씁니다.

기존 서버는 언제 꺼도 되나요?

예전 TTL이 만료된 뒤 최소 하루 동안 로그에 실제 트래픽이 보이지 않을 때입니다. TTL을 무시하는 리졸버와 클라이언트도 있으니, 가능하면 기존 서버를 그대로 며칠 더 켜 두세요.

이전 후 가장 자주 망가지는 건 무엇인가요?

잊어버린 예약 작업, 설정 파일과 파트너 허용 목록에 하드코딩된 IP 주소, 복사 후의 파일 소유자, 방화벽 규칙, 그리고 메일입니다. 역방향 DNS와 SPF 레코드가 여전히 예전 주소를 가리키고 있는 경우죠.

댓글

아직 댓글이 없습니다. 첫 번째가 되세요.

댓글 남기기

댓글은 표시되기 전에 검토됩니다.