DNS 기본 설정
| 구분 | 의미 | 비유 | 예시 / 세부 유형 |
|---|---|---|---|
| 1. 대상 도메인 (Target Domain / Zone) | 내가 소유하고 있어서 설정을 변경하려는 기준이 되는 ‘기본 도메인’ | 건물 전체의 이름 (예: “넥슨 타워”) | mygame.com, neople.co.kr |
| 2. 레코드명 (Record Name / Host / Name) | 대상 도메인 앞에 붙여서 사용하는 서브도메인(Subdomain) 이름 | 건물 안의 특정 부서나 호실 (예: “안내데스크”, “영업팀”) |
|
| 3. 레코드 타입 (Record Type) | 이 레코드가 어떤 목적을 가진 **‘데이터의 종류’**인지를 지정 | 연락처의 종류 (예: “내선번호”, “외부 직통번호”) |
|
| 4. 레코드 데이터 (Record Data / Value / Answer) | 최종적으로 브라우저나 시스템이 찾아가야 할 실제 목적지 값 | 실제 전화번호 (예: “02-123-4567”) |
|
- A 레코드는 도메인을 **직접적인 IP 주소(IPv4)**로 연결할 때 사용
- CNAME 레코드는 도메인을 **다른 도메인 이름(별칭)**으로 연결할 때 사용
- 루트 도메인(아무것도 붙지 않은 mygame.com)을 표시할 때는 관례적으로 @ 기호를 레코드명에 사용
| 대상 도메인 | 레코드명 (서브도메인) | 레코드 타입 | 레코드 데이터 (목적지) | 설정이 의미하는 바 |
|---|---|---|---|---|
| mygame.com | blog | A | 12.34.56.78 | blog.mygame.com 에 접속하면 12.34.56.78 IP로 연결해 줘 |
| mygame.com | @ | A | 11.22.33.44 | 아무것도 안 붙은 mygame.com 에 접속하면 11.22.33.44 로 연결해 줘 |
| mygame.com | CNAME | mail.google.com | mail.mygame.com 에 접속하면 구글 메일 서버 주소로 돌려보내 줘 |
DNS 1회 설정으로 서브도메인 라우팅 구현
- 컨테이너마다 DNS 설정 할 필요 없음
- DNS 와일드카드 레코드 등록
레코드명에 별표(*)를 사용하여 하위의 모든 서브도메인이 Nginx 서버를 바라보도록 설정.
| 대상 도메인 | 레코드명 (서브도메인) | 레코드 타입 | 레코드 데이터 (목적지) |
|---|---|---|---|
| mygame.com | * (또는 *.da1) | A | Nginx 서버 IP |
- 와일드카드 룰셋
- 와일드카드(*)는 항상 가장 왼쪽 레이블에 단독으로 존재해야 한다.
- 레코드명에
*.da1을 입력하는 것은 가능, 권장됨 - 이 한줄로 app1.da1.mygame.com, api.da1.mygame.com 등 하위 도메인 전체를 하나의 Nginx 서버로 받고 처리 가능
- 레코드명에
- 문자열 일부 검색(예: app*.da1)처럼 작동하는 것은 불가능함.
- 와일드카드(*)는 항상 가장 왼쪽 레이블에 단독으로 존재해야 한다.
- nginx 쪽 설정
# 1번 컨테이너로 가는 설정
server {
listen 80;
server_name app1.da1.mygame.com; # 브라우저 주소창에 이 도메인이 적혀있었다면!
location / {
# 도커 내부망에 있는 app1 컨테이너로 연결해라
proxy_pass http://internal-app1-container:8080;
}
}
# 2번 컨테이너로 가는 설정
server {
listen 80;
server_name app2.da1.mygame.com; # 브라우저 주소창에 이 도메인이 적혀있었다면!
location / {
# 도커 내부망에 있는 app2 컨테이너로 연결해라
proxy_pass http://internal-app2-container:3000;
}
}path 보다는 서브도메인
path 방식(/app1)보다는 서브도메인 방식(app1.mygame.com)이 정적 자원(CSS/JS/이미지) 경로가 깨지지 않아 압도적으로 권장.
| 구분 | 서브도메인 방식 (app1.mygame.com) | Path 방식 (mygame.com/app1) |
|---|---|---|
| 설정 편의성 | 매우 편리 (Nginx 설정만으로 즉시 분기 가능) | 번거로움 (Nginx 및 웹 앱 내부 경로 수정 필요) |
| 정적 자원 경로 (CSS / JS / Image) | 🟢 안전함 앱이 최상단 루트( /)를 기준으로 작동하므로 경로가 깨지지 않음 | ❌ 깨짐 발생 (404 에러) 보통 앱 내부 정적 경로가 / 기준으로 설계되어 있어 /app1 하위에서 경로 유실됨 |
| 앱 수정 여부 | 독자적인 도메인처럼 인식하므로 웹 앱 수정 불필요 | 빌드 시 Base URL(Public Path)을 일일이 /app1로 수정 및 재빌드해야 함 |