커스텀 도메인 연결: DNS와 HTTPS 확인

··설명 약 12분·작성: 해비·블로그 소개

커스텀 도메인을 연결한 뒤 DNS와 HTTPS 상태는 어떻게 구분해 확인하나요?

도메인 연결은 DNS 대상, HTTPS 인증서, 앱 응답을 나눠 확인합니다. 기본 배포 URL이 정상인지 보고 플랫폼이 안내한 DNS 값을 사용하세요. example.com과 www를 구분하면 DNS 오류와 앱의 404를 혼동하지 않습니다.

적용 조건·범위: 예를 들어 서브도메인은 CNAME을 사용하는 경우가 많지만, apex 도메인은 DNS 제공자와 플랫폼 구성에 따라 안내 방식이 달라질 수 있습니다.

본문 근거: vercel.com/docs/domains · vercel.com/docs/domains/working-with-domains

도메인 연결 흐름

커스텀 도메인은 다음 흐름으로 연결됩니다.

사용자 브라우저
↓
DNS 조회
↓
배포 플랫폼의 대상 주소
↓
HTTPS 연결
↓
TaskFlow 애플리케이션

따라서 오류를 확인할 때도 같은 순서로 나누는 편이 좋습니다.

DNS가 배포 플랫폼을 가리키는가?
↓
TLS 인증서가 정상인가?
↓
HTTP 요청이 애플리케이션까지 도달하는가?
↓
애플리케이션 route가 정상인가?

apex와 www

다음 두 주소는 서로 다른 호스트 이름입니다.

example.com
www.example.com

example.com처럼 호스트 이름 앞에 별도 레이블이 없는 도메인을 흔히 apex 또는 root domain이라고 부릅니다.

운영에서는 둘 중 하나를 기준 주소로 정하는 것이 좋습니다.

예를 들어 다음처럼 정할 수 있습니다.

canonical
https://example.com

redirect
https://www.example.com
→ https://example.com

반대로 www를 기준으로 사용해도 됩니다. 중요한 것은 정책을 정하고 모든 링크와 인증 설정이 같은 기준을 사용하게 만드는 것입니다.

DNS 레코드 이해

배포 플랫폼은 도메인을 연결할 때 필요한 DNS 레코드를 안내합니다.

주로 다음 레코드를 볼 수 있습니다.

A
도메인 → IPv4 주소

AAAA
도메인 → IPv6 주소

CNAME
호스트 이름 → 다른 호스트 이름

중요한 원칙은 “인터넷에서 본 예시 값을 그대로 복사”하지 않는 것입니다.

플랫폼이 현재 프로젝트에 요구하는 레코드를 확인하고 DNS 제공자의 설정에 반영해야 합니다.

예를 들어 서브도메인은 CNAME을 사용하는 경우가 많지만, apex 도메인은 DNS 제공자와 플랫폼 구성에 따라 안내 방식이 달라질 수 있습니다.

DNS 전파와 TTL

DNS 레코드를 변경했다고 모든 사용자가 즉시 새 값을 보는 것은 아닙니다.

DNS 응답은 resolver와 캐시에 일정 시간 저장될 수 있습니다.

TTL은 해당 레코드를 캐시할 수 있는 시간을 나타내는 값입니다.

따라서 변경 직후 접속이 안 된다고 애플리케이션 코드를 먼저 수정할 필요는 없습니다.

확인 순서는 다음처럼 잡을 수 있습니다.

1. DNS 관리 화면의 레코드 확인
2. 공개 DNS 조회 결과 확인
3. Vercel 도메인 상태 확인
4. HTTPS 인증서 상태 확인
5. 실제 HTTP 응답 확인

Windows에서는 nslookup을 사용할 수 있습니다.

nslookup example.com

다른 DNS 서버를 지정해서 확인할 수도 있습니다.

nslookup example.com 1.1.1.1

결과는 자신의 플랫폼 설정과 비교해야 합니다.

HTTPS 확인

HTTPS는 단순히 주소 앞에 s를 붙이는 기능이 아닙니다.

브라우저와 서버는 TLS를 사용해 암호화된 연결을 설정하고 서버 인증서를 확인합니다.

관리형 플랫폼에서는 도메인이 올바르게 연결되면 인증서 발급과 갱신을 자동으로 처리하는 경우가 많습니다.

하지만 DNS가 아직 플랫폼을 가리키지 않거나 인증서 발급 조건이 충족되지 않으면 HTTPS 상태가 정상으로 바뀌지 않을 수 있습니다.

다음 항목을 구분합니다.

DNS 정상
HTTPS 인증서 대기

DNS 오류
인증서 발급도 진행되지 않음

HTTPS 정상
앱 내부에서 404 또는 500

canonical 정책

검색엔진과 사용자에게 같은 콘텐츠가 여러 URL로 열리면 관리가 복잡해질 수 있습니다.

운영 기준 도메인을 하나 정하고 나머지는 redirect하는 편이 좋습니다.

http://example.com
→ https://example.com

https://www.example.com
→ https://example.com

프로젝트에 인증 callback URL, CORS allowlist, OAuth authorized domain 같은 설정이 있다면 새 도메인을 함께 반영해야 합니다.

도메인만 연결하고 인증 시스템의 허용 URL을 바꾸지 않으면 로그인 단계에서 별도 오류가 발생할 수 있습니다.

DNS 문제와 404 구분

다음 두 상황은 서로 다릅니다.

도메인이 배포 플랫폼까지 도달하지 못함

DNS lookup 실패
잘못된 레코드
인증서 연결 실패

이 경우 애플리케이션 route보다 DNS 설정을 먼저 확인합니다.

도메인은 열리지만 특정 URL만 404

https://example.com/
→ 정상

https://example.com/tasks
→ 404

이 경우 DNS보다 애플리케이션 라우팅이나 rewrite를 확인해야 합니다.

자주 발생하는 오류

기존 DNS 레코드와 충돌합니다

같은 호스트에 서로 충돌하는 레코드를 여러 개 두면 의도하지 않은 곳으로 요청이 갈 수 있습니다.

플랫폼이 요구하는 값과 기존 레코드를 함께 검토합니다.

www만 연결하고 apex를 확인하지 않습니다

두 호스트를 모두 사용할 계획이라면 각각 연결 상태와 redirect 정책을 확인합니다.

HTTPS 오류를 브라우저 캐시 문제로만 생각합니다

인증서 상태와 DNS 연결을 먼저 확인합니다.

도메인 변경 후 인증이 실패합니다

OAuth, Firebase Auth, Supabase Auth 등 외부 서비스의 authorized domain이나 redirect URL을 다시 확인합니다.

이 주제만 따로 연습하기

도메인 구매나 DNS 변경 없이 가상 결과 세 개를 분류합니다. example.com은 설명용 이름이며 실제 연결값을 제공하는 예제가 아닙니다.

관찰 입력 먼저 볼 계층
기본 배포 URL 정상, custom 호스트 DNS 조회 실패 DNS 레코드·등록 호스트·resolver 결과
custom 호스트의 /는 200, /tasks만 404 해당 앱 라우트·rewrite
DNS 정상, 브라우저에서 인증서 이름 불일치 접속 호스트와 인증서·플랫폼 도메인 연결

자가 확인: www.example.com만 연결해 놓고 example.com도 자동 정상이라고 적을 수 있을까요? 서로 다른 호스트이므로 두 결과와 대표 주소 리디렉션을 각각 확인합니다. 결과물은 증거별 조사 위치이며 실제 DNS·HTTPS 성공 기록은 아닙니다.

학습 완료 체크리스트

  • apex와 www의 차이를 설명할 수 있습니다.
  • A, AAAA, CNAME의 역할을 구분할 수 있습니다.
  • DNS 변경과 실제 반영 사이에 캐시가 존재할 수 있음을 이해했습니다.
  • DNS 오류와 앱 404를 구분할 수 있습니다.
  • HTTPS 인증서 상태를 별도로 확인할 수 있습니다.
  • canonical 도메인 정책을 정할 수 있습니다.

선택 실습: 할 일 앱에 적용하기

TaskFlow는 작업을 관리하는 예제 앱입니다. 이 선택 실습에서는 앱을 배포하고 서버·설정·운영 결과를 확인합니다.

이번 주제: 커스텀 도메인 연결: DNS와 HTTPS 확인.

선택: 연재 프로젝트와 전체 자료

연재 프로젝트를 이어 만드는 분을 위한 자료입니다. 이 글의 개념과 예제만 찾으셨다면 필요한 파일과 실행 방법만 펼쳐보세요.

TaskFlow 프로젝트 적용

이 글부터 시작하는 전체 프로젝트

시작 ZIP — deploy-step-04-vercel-production-full-20260928을 새 폴더에 풀고, 이번 단계 완료 ZIP은 다른 폴더에 풀어 비교합니다. ZIP 안 프로젝트 폴더의 package.json 위치가 실행 루트입니다.

출발점은 Next.js 누적 TaskFlow와 같은 38단계 소스입니다. 프로젝트에는 홈·로그인·개인 작업 화면, 작업 추가·완료·삭제, Route Handler와 캐시 예제가 들어 있습니다. 설치 버전을 고정한 package-lock.json도 포함합니다.

이번 변경 이유: 도메인·DNS·HTTPS를 별개로 확인할 기록란을 추가합니다.

  • docs/deployment-plan.md
  1. 시작 ZIP을 풀고 npm ci로 의존성을 설치합니다. Node.js 24와 npm을 사용합니다.
  2. 위 변경 파일을 아래 전체 내용 또는 완료 ZIP의 같은 경로와 대조해 적용합니다. 다른 앱 파일은 유지합니다.
  3. npm run typecheck, npm run build를 실행합니다. 오류가 있으면 첫 오류의 파일·명령을 기록하고 해결한 뒤 진행합니다.
  4. npm run setup-auth로 일회용 로컬 학습 계정을 설정한 후 npm run dev를 실행합니다. 생성된 .env.local과 입력 값은 공유하지 않습니다.

예상 결과: 홈과 로그인 화면은 공개됩니다. 로그인 전 /tasks는 로그인 화면으로 이동하고 /api/tasks는 401을 반환합니다. 로그인 후 작업 목록에서 추가·완료·삭제를 확인합니다. /cache-lab의 별도 캐시 실습은 npm run cache-api가 필요합니다.

저장·운영 범위: 작업은 단일 Node 프로세스 메모리에 저장되고 인증은 학습용 계정 예제입니다. 서버 재시작·서버리스 인스턴스 사이의 데이터 유지는 보장하지 않습니다. 로컬 실행 확인과 실제 운영 서비스 구축은 구분하며, 원격 배포·DNS·SSH·CI·롤백 결과는 직접 실행한 항목만 문서에 기록합니다.

전체 파일·코드 보기

이번 단계의 변경 파일 전체

docs/deployment-plan.md

# TaskFlow Deployment Plan


## Build
- package manager: npm
- install: npm ci
- build: npm run build


## Primary deployment
- platform: Vercel
- environment: Production


## Alternative deployment
- Firebase Hosting: static output일 때 검토
- Firebase App Hosting: server runtime이 필요할 때 검토


## Verification
- Production URL 응답
- 주요 화면 확인
- 환경변수 확인
- 주요 route 확인
- 현재 commit 확인
- rollback 가능 여부 확인

## Runtime decision


- static-only: no
- server runtime required: yes
- reasons:
  - Route Handler
  - server-side environment variables


## Primary
Vercel Production


## Firebase alternative
App Hosting 우선 검토


## Static variant
정적 결과물로 분리할 경우 Firebase Hosting 검토

## Production deployment


- deployment URL: 운영 문서에서 관리
- commit SHA: 배포마다 기록
- deployment status: 확인
- build log: 확인
- smoke test: 확인

## Domain


- canonical domain: 운영 문서에서 관리
- www policy: canonical로 redirect
- HTTPS: 확인
- DNS status: 확인
- auth callback / allowed origin: 확인

나머지 앱 소스와 잠금 파일은 전체 완료 ZIP에 있습니다. 기존 코드 조각은 설명용이며 위 전체 변경 파일과 ZIP이 이 누적 실습의 기준입니다. 다음 글에는 이번 완료 ZIP을 시작본으로 가져갑니다.

이 회차는 아래 전체 TaskFlow 시작 ZIP을 기준으로 진행합니다. 이전 글의 코드를 모으지 않아도 되며, 완료 ZIP에는 이번 변경과 기존 앱 기능이 함께 들어 있습니다.

.env.example

# 기존 앱에서 실제 사용하는 변수만 설정하세요. 값은 개발/운영 플랫폼에서 별도 관리합니다.
NEXT_PUBLIC_API_URL=
API_SECRET=

docs/deployment-plan.md

# TaskFlow Deployment Plan


## Build
- package manager: npm
- install: npm ci
- build: npm run build


## Primary deployment
- platform: Vercel
- environment: Production


## Alternative deployment
- Firebase Hosting: static output일 때 검토
- Firebase App Hosting: server runtime이 필요할 때 검토


## Verification
- Production URL 응답
- 주요 화면 확인
- 환경변수 확인
- 주요 route 확인
- 현재 commit 확인
- rollback 가능 여부 확인

## Runtime decision


- static-only: no
- server runtime required: yes
- reasons:
  - Route Handler
  - server-side environment variables


## Primary
Vercel Production


## Firebase alternative
App Hosting 우선 검토


## Static variant
정적 결과물로 분리할 경우 Firebase Hosting 검토

## Production deployment


- deployment URL: 운영 문서에서 관리
- commit SHA: 배포마다 기록
- deployment status: 확인
- build log: 확인
- smoke test: 확인

## Domain


- canonical domain: 운영 문서에서 관리
- www policy: canonical로 redirect
- HTTPS: 확인
- DNS status: 확인
- auth callback / allowed origin: 확인

docs/server-access-runbook.md

# Server Access Runbook


## Connection
- host: 저장하지 않음
- user: 환경별 문서에서 별도 관리
- authentication: SSH key 우선
- private key: 저장소에 포함 금지


## Before upload
1. 대상 서버 확인
2. 현재 경로 확인
3. 배포 대상 경로 확인
4. 기존 파일 상태 확인


## After upload
1. 파일 존재 확인
2. owner / permission 확인
3. 서비스가 실제 경로를 읽는지 확인
4. HTTP 결과 확인


## Never commit
- private key
- password
- access token
- production secret

README.md

# 배포·서버 05 — deploy-step-05-domain-https

이 ZIP은 배포 준비·운영 문서와 해당 회차 설정/코드 조각을 누적한 적용 자료입니다. 실행 앱 전체는 포함하지 않습니다. 기존 deploy-step-00-build-ready 프로젝트에 해당 파일을 검토하여 적용하세요. 이 ZIP 루트에서 npm ci/build를 실행하는 구조가 아닙니다.

.env.example은 값이 빈 설정 안내입니다. 독자의 앱에서 사용하는 변수만 .env.local 또는 플랫폼의 해당 환경에 설정하세요. URL·계정·비밀키를 ZIP에 넣지 않습니다.

이 자료에는 실제 배포·DNS 변경·SSH 접속·메일/알림·롤백 결과가 없습니다. 운영 작업은 독자가 본인 환경과 권한을 확인한 후 수행해야 합니다. 문서의 확인 항목은 수행할 체크리스트이며 이미 통과했다는 기록이 아닙니다.

이전 체크포인트

deploy-step-04-vercel-production

이번 변경

docs/deployment-plan.md에 운영 도메인 항목을 추가합니다.

## Domain

- canonical domain: 운영 문서에서 관리
- www policy: canonical로 redirect
- HTTPS: 확인
- DNS status: 확인
- auth callback / allowed origin: 확인

확인 명령

nslookup example.com
curl.exe -I https://example.com/

실제 도메인으로 바꿔 실행합니다.

기대 결과

DNS가 배포 플랫폼 대상과 일치
HTTPS 인증서 정상
HTTP → HTTPS 정책 정상
canonical 주소 정상
핵심 화면 정상

이 글에서는 특정 사용자의 실제 도메인을 예제로 공개하지 않습니다.

참고용 문서·최소 예제 코드

아래 기존 문서·설정 예시는 변경 이유를 설명합니다. 실제 누적 앱의 전체 소스는 위의 전체 완료 ZIP에 있으며, 다음 회차의 시작본으로 그대로 사용합니다.

완료 체크포인트

deploy-step-05-domain-https

실습 경로·결과·복구

독자 질문

도메인 DNS와 HTTPS가 제대로 연결됐는지 어떻게 증명할까요?

배포 전제

4회차에서 확인한 정상 Production URL, 도메인 소유 권한, DNS 제공자 접근 권한이 필요합니다. 플랫폼이 제시한 레코드 값만 사용하며 글의 예시 주소를 실제 설정에 복사하지 않습니다.

실행 단계

  1. apex 또는 www 중 대표 주소를 정하고, 현재 DNS 레코드를 보존한 뒤 플랫폼 대시보드에 도메인을 등록합니다.
  2. 플랫폼이 안내한 레코드 유형과 값을 DNS 제공자에 설정하고 dig 또는 nslookup으로 조회합니다. 조회 대상과 응답을 기록한 뒤 플랫폼 도메인 상태와 인증서 발급 상태를 확인합니다.
  3. HTTP 요청의 HTTPS 이동, 보조 주소의 대표 주소 이동, 핵심 경로의 본문과 로그인 callback 등 영향받는 설정을 각각 확인합니다.

성공·실패 확인

DNS 응답이 플랫폼 안내값과 일치하고, 인증서가 해당 호스트에 유효하며, 대표 HTTPS 주소가 의도한 화면을 제공해야 성공입니다. DNS 조회 실패는 레코드·TTL·충돌, DNS는 맞는데 인증서 대기는 검증 레코드·CAA·플랫폼 상태, 특정 경로 404는 앱 라우팅으로 나눕니다.

복구와 검증 상태

잘못된 레코드라면 변경 전 값을 기준으로 복원하고 전파를 재확인합니다. 이전 플랫폼 URL이 정상인지 확인해 장애 범위를 좁히되, 인증 callback과 대표 URL 변경의 영향을 다시 점검합니다. 실제 도메인 수정과 HTTPS 발급 결과는 미확인입니다.

다음 학습

다음 글부터 자동 배포 과정에서 발생하는 오류를 다룹니다. 먼저 GitHub Actions에서 npm ci가 실패하는 원인을 lockfile과 Node 버전 관점에서 확인합니다.

다음 글: GitHub Actions npm ci 실패 해결: lockfile과 Node 버전 확인

다음 회차 확인 과제: 06회차에서는 배포 브랜치의 GitHub Actions에서 npm ci와 build가 같은 commit으로 재현되는지 확인합니다.

공식 문서

공식 문서 확인 기준: 2026-09-21

체크포인트 다운로드

deploy-step-05-domain-https 완료 ZIP 다운로드

시작 체크포인트: 4회차 완료 ZIP

글 소개·학습 준비·전체 목차
지구본과 자물쇠로 표현한 도메인과 HTTPS 연결 표지

배포·서버 · 5 / 11 · 도메인 운영 · DNS와 HTTPS

커스텀 도메인을 연결할 때에는 기본 배포 URL, DNS 응답, HTTPS 인증서, 앱 라우트를 나누어 확인합니다. 상단은 가상 응답으로 진단하고, 하단은 독자가 소유한 도메인에 적용하는 경로입니다.

이때 중요한 점은 애플리케이션 배포와 DNS 설정을 같은 문제로 보지 않는 것입니다. 앱은 정상인데 DNS가 잘못되어 접속이 안 될 수 있고, 반대로 DNS는 정상인데 애플리케이션 route가 404를 반환할 수도 있습니다.

이번 글에서 배우는 내용

  • 커스텀 도메인과 기본 배포 URL의 차이
  • apex 도메인과 www 서브도메인
  • A, AAAA, CNAME 레코드의 역할
  • DNS 전파와 TTL
  • HTTPS와 TLS 인증서
  • canonical 도메인 정책
  • DNS 문제와 애플리케이션 404를 구분하는 방법

선수 지식

  • Vercel Production 배포 경험
  • 도메인 구매 개념
  • HTTP와 HTTPS의 기본 차이

이 글의 example.com은 개념 설명용 예약 도메인입니다. 실제 DNS 조회와 연결에는 본인이 소유한 도메인을 사용합니다.

목차

  1. 도메인 연결 흐름
  2. apex와 www
  3. DNS 레코드 이해
  4. DNS 전파와 TTL
  5. HTTPS 확인
  6. canonical 정책
  7. DNS 문제와 404 구분
  8. 자주 발생하는 오류
  9. 학습 완료 체크리스트
  10. TaskFlow 프로젝트 적용
  11. 실습 프로젝트 전체 코드
  12. 실습 경로·결과·복구
  13. 다음 학습
  14. 공식 문서
  15. 단독 실습과 결과 확인

이 글이 도움이 되었나요?

조회 중

읽음 기록

읽음 — / 전체 11개 · 필수 7개

이 글을 쓴 해비

웹사이트를 제작·운영하고, 개인 서비스와 자동화·AI 도구를 만듭니다. 직접 만들며 배운 내용과 문제 해결 과정을 BlogFlow에 기록합니다.

새 글 받아보기

RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.

RSS 피드 구독하기

댓글 남기기