Cloudflare는 무엇을 해 주나: 도메인, DNS, 프록시, 터널
TL;DR
- 도메인은 어디서 사느냐(등록 업체)와 누가 이름을 풀어 주느냐(DNS)가 따로다. 가비아에서 사고 DNS는 Cloudflare에 맡길 수 있다.
- Cloudflare DNS에는 프록시(주황 구름)와 DNS만(회색 구름) 두 가지 모드가 있다. 프록시를 켜면 방문자는 내 서버가 아니라 Cloudflare를 먼저 만난다.
- Cloudflare Tunnel을 쓰면 공유기 포트를 하나도 열지 않고 집 서버를 인터넷에 공개할 수 있다.
들어가며
개인 프로젝트를 하나둘 만들다 보면 xxx.vercel.app 같은 기본 주소 대신 내 도메인을 붙이고 싶어진다. 도메인을 사면 바로 "네임서버", "A 레코드", "CNAME" 같은 말이 쏟아진다. 그리고 거의 모든 안내 글에 Cloudflare가 등장한다.
이 글은 Cloudflare가 정확히 무슨 일을 해 주는지, 개인 개발자가 어떤 기능을 쓰면 좋은지 정리한 것이다.
1. 도메인 등록과 DNS는 다른 일이다
도메인과 관련된 일은 크게 둘로 나뉜다.
| 일 | 하는 곳 | 비유 |
|---|---|---|
| 등록(Registrar) | 가비아, Cloudflare Registrar, 후이즈 등 | 이름의 소유권 등기 |
| DNS(이름 풀이) | 등록 업체의 기본 DNS, Cloudflare, Route 53 등 | 이름 → 주소를 알려 주는 전화번호부 |
도메인을 산 곳과 DNS를 관리하는 곳은 같을 필요가 없다. 등록 업체 화면에서 네임서버를 바꾸면, 그 뒤로 "이 도메인의 주소는 어디냐"는 질문에는 새 네임서버가 답한다.
# 네임서버를 Cloudflare로 옮긴 도메인은 이렇게 보인다
$ dig +short NS example.com
xxx.ns.cloudflare.com.
yyy.ns.cloudflare.com.가비아와 Cloudflare Registrar
- 가비아:
.kr처럼 국내 도메인을 사기 쉽고, 한국어 고객 지원과 국내 결제 수단을 쓸 수 있다. - Cloudflare Registrar: 도메인을 원가(등록 기관에 내는 값 그대로)로 판다. 갱신 비용이 오르지 않아서
.com같은 도메인을 오래 들고 가기 좋다. 대신 DNS는 반드시 Cloudflare를 써야 하고,.kr처럼 지원하지 않는 확장자가 있다.
그래서 나는 둘 다 쓴다. 확장자와 가격을 보고 사는 곳은 고르되, DNS는 Cloudflare 한 곳에 모은다. 도메인이 여러 개여도 레코드를 같은 화면, 같은 방식으로 관리할 수 있다.
2. DNS 레코드 몇 가지
개인 프로젝트에서 자주 쓰는 레코드는 몇 개 안 된다.
| 레코드 | 뜻 | 예 |
|---|---|---|
| A / AAAA | 이름 → IPv4 / IPv6 주소 | 내 서버 IP를 직접 가리킬 때 |
| CNAME | 이름 → 다른 이름 | blog → 호스팅 업체가 준 주소 |
| TXT | 아무 글자 | 도메인 소유 확인, 메일 발송 인증(SPF 등) |
| MX | 메일 받을 서버 | 도메인 메일 |
서브도메인(blog., app. 등)마다 CNAME 하나씩 만들면, 도메인 하나로 여러 프로젝트를 나눠 붙일 수 있다.
3. 주황 구름과 회색 구름
Cloudflare DNS 레코드 옆에는 구름 아이콘이 있다. 이게 Cloudflare를 이해하는 핵심이다.
| 모드 | 방문자가 받는 주소 | 하는 일 |
|---|---|---|
| DNS만 (회색) | 내 서버(또는 호스팅) 주소 그대로 | 전화번호부 역할만 |
| 프록시 (주황) | Cloudflare의 주소 | 방문자 → Cloudflare → 내 서버. 중간에서 HTTPS, 캐시, 공격 차단을 해 준다 |
프록시를 켜면 좋은 점이 많다.
- 원래 서버 주소가 숨겨진다. 방문자는 Cloudflare의 IP만 본다.
- HTTPS 인증서를 Cloudflare가 처리한다.
- DDoS 방어와 방화벽 규칙(국가 차단, 요청 수 제한 등)을 무료로 쓸 수 있다.
- 정적 파일 캐시로 서버 부담이 준다.
반대로 끄는 게 나을 때도 있다. Vercel처럼 자체 CDN과 인증서를 가진 호스팅을 쓸 때는 보통 회색으로 둔다. 두 CDN이 겹치면 인증서 발급이나 캐시가 꼬일 수 있기 때문이다.
프록시 뒤에서 조심할 것
프록시를 켜면 서버 입장에서 요청을 보낸 상대가 Cloudflare가 된다. 두 가지를 챙겨야 한다.
- 방문자 IP: 서버가 보는 접속 IP는 Cloudflare의 IP다. 진짜 방문자 IP는 Cloudflare가 붙여 주는
CF-Connecting-IP헤더에 있다. 이 헤더는 Cloudflare가 덮어쓰기 때문에, 방문자가 마음대로 적을 수 있는X-Forwarded-For보다 믿을 수 있다. - HTTPS 여부: 방문자는 HTTPS로 접속해도 서버는 평문 HTTP 요청을 받을 수 있다. Spring Boot라면
server.forward-headers-strategy설정으로X-Forwarded-Proto를 읽게 해야, 서버가 만드는 링크가http://로 나가지 않는다.
4. Cloudflare Tunnel: 포트를 열지 않고 공개하기
집에 있는 서버(라즈베리파이, 남는 노트북 등)를 인터넷에 공개하는 전통적인 방법은 공유기 포트 포워딩이다. 하지만 이 방법은 문제가 많다.
- 집 IP가 그대로 드러난다.
- 열어 둔 포트로 전 세계의 스캐너가 찾아온다.
- 통신사가 IP를 바꾸면 주소가 깨진다.
Cloudflare Tunnel은 방향을 뒤집는다. 집 서버에서 cloudflared라는 프로그램이 Cloudflare 쪽으로 먼저 연결을 맺고, 방문자의 요청은 그 연결을 타고 들어온다.
방문자 → Cloudflare ──(이미 열려 있는 바깥쪽 연결)── cloudflared → 집 서버(localhost)- 공유기 포트를 하나도 열지 않는다. 바깥에서 집으로 먼저 들어오는 연결이 없다.
- 집 IP가 드러나지 않는다.
- HTTPS, 방화벽 규칙, 접근 제한(Cloudflare Access) 같은 프록시 기능을 그대로 쓴다.
- 무료다.
설정도 간단하다. 대시보드에서 터널을 만들고, 서버에 cloudflared를 설치해 토큰으로 연결한 뒤, "이 서브도메인 → 서버의 이 포트"를 지정하면 된다. DNS 레코드도 자동으로 만들어진다.
정리
| 기능 | 언제 쓰나 |
|---|---|
| Registrar | 원가로 오래 들고 갈 도메인 |
| DNS | 도메인이 여러 개여도 한 곳에서 관리 |
| 프록시(주황) | 내 서버를 직접 공개할 때. 주소 숨기기, HTTPS, 공격 차단 |
| DNS만(회색) | 자체 CDN이 있는 호스팅에 연결할 때 |
| Tunnel | 집 서버를 포트 포워딩 없이 공개할 때 |
개인 개발자에게 Cloudflare는 "도메인 관리 화면"으로 시작해서, 쓰다 보면 집 서버를 안전하게 공개하는 문까지 되어 준다. 이걸 실제로 어떻게 엮었는지는 개인 프로젝트 인프라 설계에 정리했다.