
오늘은 Cloudflare를 사용해 동적 IP를 고정 IP처럼 활용하여 도메인을 안정적으로 운영하고, n8n 워크플로우 자동화 도구를 24시간 무료로 운영할 수 있는 환경을 구축하는 방법을 소개합니다.
N8N 단계별 설치 가이드 내용중 클라우드페어의 SSL 인증서만 사용하였지만, 동적IP 사용시에는 Let’s Encrypt 를 사용한 무료 인증서를 추가로 적용해야 제대로 작동됨을 알려드립니다.
1. 상황 설명
- 도메인: 본인 도메인
- 운영 환경: Google Cloud VM (동적 IP 사용 중)
- 문제: 서버를 정지 후 다시 시작하면 IP가 변경되어 도메인이 작동하지 않음.
- 원인:
- Google Cloud의 무료 사용 시간(매달 720시간) 제한으로, 비용 절감을 위해 서버를 정지했다가 재시작하는 경우가 많음.
- 서버를 재시작하면 새로운 임시 IP가 할당됨.
- 목표: 동적 IP 변경에도 도메인이 자동으로 업데이트되어 고정 IP처럼 작동하도록 만들기. 이를 통해 n8n 워크플로우 자동화 도구를 24시간 무료로 운영하는 환경을 구축하기.
2. 준비물
- Cloudflare 계정
- 무료 플랜으로도 충분히 설정 가능.
- Cloudflare API 토큰
- API 토큰은 Cloudflare에서 동적 IP 업데이트를 처리하기 위해 필요합니다.
- Google Cloud VM
- Ubuntu 기반 서버.
- Let’s Encrypt SSL 인증서
- HTTPS를 필수적으로 활성화하기 위해 필요합니다.
3. 단계별 설정 방법
3.1 Cloudflare API 토큰 생성
- Cloudflare 로그인 합니다.
- 프로필 아이콘 클릭 > API 토큰 > 토큰 생성 선택합니다.



- API 토큰 템플릿 중 영역 DNS 편집의 템플릿 사용을 클릭합니다.
- 영역 리소스 항목에서 이미지에 보이는것처럼 본인의 도메인만 선택후 요약계속을 클릭합니다.


- 토큰 생성 후 복사 (한 번만 표시되므로 반드시 저장)


3.2 Google Cloud VM에서 도구 설치
- SSH로 VM에 접속합니다.
- 아래 명령어를 실행하여 curl과 jq를 설치합니다.
sudo apt updatesudo apt install curl jq -y

3.3 동적 IP 업데이트 스크립트 작성
- SSH에서 아래 명령어로 새 스크립트를 만듭니다.
nano /home/사용자명/update-dns.sh
- 사용자명은 우분투 서버 계정의 이름입니다.
pb6x11@instance-seiran:~$ 에서 pb6x11이 사용자명입니다.
본인의 서버 계정을 확인후 사용자명을 입력하면 됩니다.
- 아래 코드를 복사하여 붙여넣습니다
#!/bin/bash
# Cloudflare API 설정
API_TOKEN="your_api_token" # Cloudflare에서 생성한 API 토큰
ZONE_NAME="도메인이름" # 도메인 이름
RECORD_NAME="도메인이름" # A 레코드 이름
# 현재 서버의 외부 IP 가져오기
CURRENT_IP=$(curl -s http://checkip.amazonaws.com)
# Cloudflare Zone ID 가져오기
ZONE_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$ZONE_NAME" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" | jq -r '.result[0].id')
# Cloudflare DNS 레코드 ID 가져오기
RECORD_ID=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?name=$RECORD_NAME" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" | jq -r '.result[0].id')
# Cloudflare DNS 레코드 업데이트 (프록시 활성화 포함)
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"$RECORD_NAME\",\"content\":\"$CURRENT_IP\",\"ttl\":1,\"proxied\":true}"
- 저장 및 종료:
- Ctrl + O, Enter, Ctrl + X.
- 스크립트에 실행 권한 부여
chmod +x /home/사용자명/update-dns.sh
3.4 스크립트 자동 실행 설정
- Crontab 열기:
crontab -e
crontab -e
- 1번을 입력합니다.
- 아래 줄을 추가하여 스크립트를 1분마다 실행되도록 설정.
*/1 * * * * /home/사용자명/update-dns.sh >/dev/null 2>&1
- 저장 후 종료:
- Ctrl + O, Enter, Ctrl + X.
- 스크립트를 실행하여 에러가 있는지 확인합니다.

4. HTTPS 설정 (필수)
HTTPS를 활성화하려면 Let’s Encrypt를 사용하여 무료 SSL 인증서를 설정해야 합니다. Cloudflare의 SSL 인증서만 사용하면 동적 IP 환경에서 HTTPS가 정상 작동하지 않을 수 있습니다.
클라우드페어의 프록시 인증서만으로는 원본 서버와 Cloudflare 간의 연결에서 문제가 발생할 수 있습니다.
Let’s Encrypt를 통해 원본 서버에도 유효한 인증서를 설치하면, 클라이언트와 원본 서버 간의 모든 연결이 안전해집니다
Cloudflare SSL 모드 호환성:
Cloudflare에서 “Full (Strict)/전체(엄격)” 모드를 사용(필히변경합니다)하려면 원본 서버에 유효한 인증서가 반드시 필요합니다
- Certbot 설치
sudo apt update
sudo apt install certbot python3-certbot-nginx -y- 인증서 발급 및 Nginx 설정 자동화
sudo certbot --nginx -d 본인 도메인 -d www.본인 도메인- Nginx를 재설정합니다.
sudo nano /etc/nginx/sites-enabled/n8n# HTTP 요청을 HTTPS로 리다이렉트
server {
listen 80;
server_name 본인 도메인 www.본인 도메인;
# HTTP 요청을 HTTPS로 리다이렉트
return 301 https://$host$request_uri;
}
# HTTPS 설정 (Cloudflare SSL 사용)
server {
listen 443 ssl;
server_name 본인 도메인 www.본인 도메인;
# Cloudflare Origin SSL 인증서 경로
ssl_certificate /etc/nginx/ssl/cloudflare.pem;
ssl_certificate_key /etc/nginx/ssl/cloudflare-key.pem;
# 추가 SSL 설정
ssl_protocols TLSv1.2 TLSv1.3; # Cloudflare가 지원하는 SSL 프로토콜
ssl_prefer_server_ciphers off; # Cloudflare SSL 기본 설정
ssl_session_cache shared:SSL:10m;
# HTTP Basic Authentication 설정
auth_basic "Restricted Access"; # 인증 창에 표시될 메시지
auth_basic_user_file /etc/nginx/.htpasswd; # 인증 파일 경로 (필요 시 생성)
# n8n에 대한 프록시 설정
location / {
proxy_pass http://localhost:5678; # n8n의 로컬 주소
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
}
}- 저장 후 종료:
- Ctrl + O, Enter, Ctrl + X.
- Nginx를 재시작하여 적용
sudo systemctl restart nginxHTTPS 설정 후 최종확인
- 브라우저에서 https://본인도메인 과 https://www.본인도메인 으로 접속합니다.
주소창 왼쪽에 자물쇠 아이콘이 표시되면 설정이 완료된 것입니다. - 자동 실행 확인:
- 서버 정지 및 재시작 후, A 레코드가 자동으로 업데이트되는지 확인하세요.


5. Google Cloud VM의 “정지(Stop)”와 “중지(Suspend)” 차이점
Google Cloud VM을 사용할 때, “정지”와 “중지”의 차이를 이해하는 것은 중요한 부분입니다. 각 기능이 어떻게 작동하는지 아래에서 자세히 알아보겠습니다.
1. 정지(Stop)란?
Google Cloud에서 인스턴스를 **정지(Stop)**하면 서버의 상태가 저장되지 않으며, RAM 등의 휘발성 데이터가 모두 삭제됩니다.
특징:
- CPU 및 RAM과 같은 컴퓨팅 리소스 사용이 중지됩니다.
- 외부 IP 주소(임시 IP)는 변경될 수 있습니다.
- 디스크(Storage)는 유지되며, 이에 대한 비용이 계속 발생할 수 있습니다.
- 재시작 시 운영체제(OS)가 완전히 재부팅됩니다.
언제 사용하면 좋을까?
- 인스턴스를 당분간 사용하지 않고 비용을 절약하고 싶을 때.
2. 중지(Suspend)란?
Google Cloud에서 인스턴스를 **중지(Suspend)**하면 현재 실행 중인 상태(메모리 및 프로세스 정보 포함)가 저장되며, 다시 시작할 때 동일한 상태로 복원됩니다.
특징:
- 작업 중이던 프로그램과 데이터가 그대로 유지됩니다.
- 재시작 시 부팅 시간이 단축됩니다.
- 외부 IP 주소는 변경되지 않습니다.
- RAM 사용량을 포함한 일부 비용이 지속적으로 발생할 수 있습니다.
언제 사용하면 좋을까?
- 작업을 이어서 빠르게 재개하고 싶을 때.
- 실행 중인 프로세스를 그대로 유지해야 할 때.
3. 정지(Stop) vs. 중지(Suspend) 비교 요약
| 기능 | 정지 (Stop) | 중지 (Suspend) |
|---|---|---|
| 메모리 상태 | 삭제됨 | 저장됨 |
| 재시작 후 상태 | 새로 시작 | 이전 상태 복원 |
| 부팅 시간 | 정상 부팅 | 더 빠른 부팅 |
| 외부 IP 유지 | 변경될 수 있음 | 유지됨 |
| 비용 발생 | 디스크 요금만 발생 | 디스크 + 일부 메모리 요금 발생 |
1분 안에 프록시와 IP 상태가 제대로 반영되는지 Cloudflare 대시보드에서 확인하면 됩니다.


6. 결론
이제 Google Cloud VM의 동적 IP를 Cloudflare를 통해 자동으로 업데이트하여 고정 IP처럼 사용할 수 있습니다. Let’s Encrypt를 통해 HTTPS를 활성화하여 보안까지 완벽히 갖춘 도메인 운영이 가능합니다. 특히, n8n 워크플로우 자동화 도구를 24시간 무료로 운영하려는 사용자에게 최적의 솔루션입니다.
쉽게 따라할 수 있는 이 가이드를 통해 여러분도 안정적이고 비용 효율적인 도메인 관리를 경험해 보세요!
N8N 단계별 설치 가이드
N8N 설치하기 1단계 : 클라우드 서버 설치 다시보기






