|

CDN이란: CDN 뜻과 사용 이유, 워드프레스 연결 방식

공정위 광고 문구 Ver 3.1
공정위 광고 문구 Ver 3.2(모바일 전용)
테스트 환경 RHEL 계열AlmaLinux 9.82026-10-16 확인

CDN(Content Delivery Network)은 원본 서버의 파일을 여러 지역의 엣지 서버에 저장해 두고, 방문자와 가까운 서버에서 응답하는 콘텐츠 전송 네트워크입니다. 엣지 서버가 캐시에서 응답하는지 보기 위해 jsDelivr 같은 공개 라이브러리 배포 서비스의 응답 헤더를 확인한 결과, jQuery 파일은 캐시 사본으로 응답하고 있었습니다. 워드프레스에 연결하는 파일 주소 변경 방식과 DNS 프록시 방식은 공식 문서 기준으로 비교했습니다.

1️⃣ CDN 뜻: 엣지 서버와 원본 서버

POP(Point of Presence)은 엣지 서버가 있는 데이터 센터를 의미하며, 방문자의 요청은 가장 가까운 POP으로 전달됩니다.

요청을 받은 엣지 서버는 저장된 파일이 있으면 바로 응답하고, 없으면 원본 서버에서 파일을 가져와 응답하며 엣지 서버에 저장합니다. AWS의 CDN인 CloudFront는 원본 서버에서 첫 바이트가 도착하는 즉시 방문자에게 전달을 시작합니다(AWS 공식 문서 기준).

CDN 엣지 서버와 원본 서버

엣지 서버에는 방문자가 요청한 파일만 저장되므로, 같은 파일이라도 엣지 서버마다 첫 요청은 원본 서버까지 전달됩니다.

이렇게 요청이 올 때 가져오는 방식이 풀(pull) 방식이며, 파일을 CDN에 미리 업로드해 두는 푸시(push) 방식도 있습니다.

2️⃣ CDN 사용 이유: 거리와 원본 서버 부하

방문자와 서버 사이의 거리가 멀수록 요청 하나가 왕복하는 시간(RTT)이 길어집니다. 페이지 하나를 열면 HTML 외에도 이미지와 CSS, 자바스크립트 요청이 함께 발생하므로, 가까운 엣지 서버가 응답하면 요청마다 왕복 시간이 단축됩니다.

엣지 서버가 응답한 요청은 원본 서버까지 전달되지 않아, 원본 서버의 CPU 사용량과 전송량(대역폭)도 감소합니다. DNS를 Cloudflare 프록시로 연결하면 원본 서버 IP가 노출되지 않고, DDoS 공격도 CDN에서 먼저 차단합니다(Cloudflare 공식 문서 기준).

방문자가 원본 서버와 같은 지역에 모여 있는 사이트는 거리에서 얻는 이점이 작습니다. 이런 사이트에서는 응답 시간 단축보다 원본 서버의 부하 감소와 전송량 절감이 CDN의 더 큰 이점입니다.

3️⃣ 캐시되는 파일: 정적 파일과 HTML

Cloudflare는 기본 설정에서 파일 확장자로 정한 이미지와 CSS, 자바스크립트 같은 정적 파일만 캐시합니다(Cloudflare 공식 문서 기준). 페이지 HTML과 JSON은 기본 캐시 대상에서 제외되어, Cloudflare를 연결한 뒤에도 원본 서버가 응답합니다.

HTML까지 캐시하려면 CDN에서 캐시 규칙을 따로 만들어야 합니다. 이때는 로그인한 사용자나 장바구니처럼 사람마다 내용이 다른 페이지를 규칙에서 제외해, 다른 방문자의 화면이 섞이는 일을 방지합니다.

4️⃣ 워드프레스 연결: 파일 주소 변경과 DNS 프록시

워드프레스에 CDN을 연결할 때는 정적 파일 주소만 CDN 주소로 바꾸거나, 도메인의 DNS를 CDN 프록시로 설정해 모든 요청이 CDN을 거치게 합니다.

방식연결하는 곳CDN을 거치는 요청원본 서버 IP
파일 주소 변경캐시 플러그인의 CDN 설정에 CDN 주소(CNAME) 입력이미지, CSS, 자바스크립트 같은 정적 파일그대로 공개됨
DNS 프록시도메인의 DNS 레코드를 CDN 프록시로 연결사이트의 모든 HTTP·HTTPS 요청CDN 뒤에 가려짐

파일 주소 변경 방식에서는 WP Rocket 같은 캐시 플러그인의 CDN 설정에 CDN 업체가 제공한 주소(CNAME)를 입력합니다. 입력하면 페이지 HTML 안의 이미지와 CSS, 자바스크립트 주소가 CDN 주소로 변경됩니다(WP Rocket 공식 문서 기준). HTML은 원본 서버가 그대로 응답합니다.

WP Rocket 설정 화면: Content Delivery 탭의 Other CDN 보기, Your CDN 스위치와 CDN CNAME(들) 줄
[설정 › WP Rocket]의 [Content Delivery] 탭에서 [Other CDN]을 열면 CDN 주소를 넣는 [CDN CNAME(들)] 줄이 보입니다. CDN 주소를 넣고 위쪽 [Your CDN] 스위치를 켜면 파일 주소가 CDN 주소로 바뀌며, 주소가 여럿이면 [+ CNAME 추가]로 줄을 더합니다.

DNS 프록시 방식을 쓰면 도메인의 DNS를 CDN 업체에서 관리하게 됩니다. Cloudflare는 네임서버를 옮기지 않고 기존 DNS 업체에 CNAME 레코드만 추가해 프록시를 연결하는 방식도 제공합니다. 이 방식은 Business 이상 요금제에서만 사용할 수 있습니다(Cloudflare 공식 문서 기준).

5️⃣ 캐시 적중 확인: cf-cache-status와 age 헤더

CDN이 파일을 캐시에서 응답했는지는 응답 헤더로 확인합니다. 아래는 jsDelivr가 배포하는 jQuery 파일의 응답 헤더를 확인한 명령과 결과입니다.

curl -sI https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js | grep -iE "^(cache-control|cf-cache-status|age|server):"
cache-control: public, max-age=31536000, s-maxage=31536000, immutable
age: 45920
cf-cache-status: HIT
server: cloudflare

[server: cloudflare]는 이 응답을 Cloudflare 엣지 서버가 보냈다는 표시이며, Cloudflare가 붙이는 [cf-cache-status: HIT]는 캐시에서 응답했다는 뜻입니다. [age: 45920]은 이 파일이 캐시에 저장된 지 약 12시간 45분 지났다는 표시입니다. [max-age=31536000]은 1년 동안 저장해도 된다는 원본 서버의 지시입니다.

[HIT] 말고 [MISS], [DYNAMIC], [BYPASS] 값이 나올 때 요청이 어디까지 가는지는 아래 다이어그램에서 값 버튼을 눌러 확인할 수 있습니다.

🧩 cf-cache-status 값마다 요청이 가는 곳
설명 다이어그램
📨 cf-cache-status
🧑‍💻 방문자
받은 응답 헤더cf-cache-status: HITcf-cache-status: MISScf-cache-status: DYNAMICcf-cache-status: BYPASS
캐시에서 바로 응답가져온 파일로 응답원본 응답 전달원본 응답 전달→
🌐 가까운 엣지 서버(POP)
💾 캐시저장된 파일 있음저장된 파일 없음 · 가져온 파일 저장캐시 대상 아님(HTML) · 확인 없음캐시 대상이지만 저장 안 함
방문자와 가까운 서버
원본 서버까지 가지 않음파일 가져옴캐시 확인 없이 전달파일 가져옴→
🖥️ 원본 서버
요청 없음파일 응답HTML 응답응답 헤더 Cache-Control: no-store 또는 private
[cf-cache-status: HIT]는 엣지 서버가 캐시에서 바로 응답했다는 뜻이며, 이 요청은 원본 서버까지 전달되지 않습니다.
캐시에 없어 원본 서버에서 가져온 파일은 [MISS]로 표시되며, 엣지 서버는 응답하면서 그 파일을 저장합니다.
캐시 대상이 아니어서 캐시를 확인하지 않고 원본 서버로 전달한 HTML은 [DYNAMIC]으로 표시됩니다.
원본 서버의 응답에 [Cache-Control: no-store]나 [private] 지시가 있으면 캐시 대상인 파일이라도 [BYPASS]로 표시되며, 저장하지 않습니다.

🔢 FAQ & 추천 콘텐츠

웹 호스팅은 사이트의 원본 파일과 데이터베이스가 있는 서버이고, CDN은 그 앞에서 파일 사본으로 응답하는 네트워크입니다. CDN을 연결해도 원본 서버는 그대로 필요합니다.

Varnish는 원본 서버 앞 한 곳에서 응답을 저장하고, CDN은 같은 일을 세계 여러 곳의 엣지 서버에서 처리합니다. jQuery 공식 CDN(code.jquery.com)의 응답 헤더에는 [via: 1.1 varnish, 1.1 varnish]가 있습니다. 이 헤더로 code.jquery.com의 엣지 서버가 Varnish를 거쳐 응답했다는 것을 확인할 수 있습니다.

CDN 관리 화면의 캐시 비우기(Purge) 기능으로 특정 주소나 전체 캐시를 삭제합니다. 워드프레스 캐시 플러그인 중에는 글을 수정할 때 연결한 CDN의 캐시를 함께 비우는 기능을 제공하는 것도 있습니다.

ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.