배포를 위해 SSL인증과 DNS설정을 하고 있었다

A, CNAME 레코드를 추가하라는데

도통 이게 무슨 소린지 모르는채로 넘어갈 수가 없어 알아보았다

DNS가 뭐임?

인터넷에 연결된 컴퓨터 한대를 host 호스트라고 한다

호스트와 호스트가 통신하기 위해서는 주소가 필요하고, 이를 위해 IP 주소를 사용한다

하지만 매번 숫자로 된 IP주소를 외우기엔 불편해 만들어진 것이 도메인 네임 시스템 DNS이다

 

DNS의 핵심은 DNS Server인데, 수많은 도메인 이름과 그에 대응하는 IP 주소가 저장된 분산된 데이터베이스이다

우리 컴퓨터에서 www.어떤도메인.org 를 요청할 때, 운영체제는 DNS 서버에서 www.어떤도메인.org 의 ip 주소를 요청하여 받아온다

그 ip 주소를 이용해 우리가 원하는 도메인으로 접속하게 된다

hosts 파일

사실 DNS 서버를 거치지 않고도 hosts 파일을 통해 자주 가는 사이트의 IP 주소를 저장해둘수도 있다 (전화번호부처럼)

그러나 hosts 파일을 해킹 당해 수정되버리면 피싱 사이트로 유도될 위험이 있기 때문에 보안에 매우 유의해야 한다

public DNS, ISP

그렇다면 우리 컴퓨터는 DNS 서버의 위치를 어떻게 알고 요청을 하는가?

그건 바로 우리가 가입한 통신사 (KT, SK, LG U+)에서 기본적으로 제공하는 DNS 서버를 사용하기 때문이다

이런 통신사를 ISP Internet Service Provider 라고 한다

그런데 한가지 상상의 나래를 펼치자면 웹 서핑을 하려면 ISP에서 제공하는 DNS 서버를 사용해야하고, 그렇다면 ISP에서 내가 접속한 사이트를 다 알수도 있지 않을까?!

아무튼 모종의 이유로 통신사에서 제공하는 DNS server를 이용하고 싶지 않을 땐, public DNS를 사용해보자

구글이 만든 8.8.8.8 public DNS도 있고, 1.1.1.1로 쌈박한 주소를 가지고 있는 Cloudflare의 public DNS도 있다 (1.1.1.1은 자기네가 구글이나 보통의 ISP보다 속도도 빠르다고 어필한다)

도메인 이름의 구조

도메인의 끝에는 사실 . 이 생략되어 있다

점.은 루트를 의미하고 그 앞으로 탑 레벨 Top Level, 세컨드 레벨 Second Level, 서브 레벨 sub Level 로 이루어져있다

그리고 각각의 레벨마다 해당 도메인 이름에 대응하는 IP 주소를 저장한 DNS 서버가 존재한다

루트 DNS 서버는 Top-level DNS 서버의 목록을 알고있고, Top-level DNS 는 Second-level DNS의 목록을 알고있고, 각 하위 계층의 목록들만 알고 있다
결국 서브 도메인에 접속하려는 사이트의 IP주소가 있는 것이다

 

우리의 컴퓨터는 수 많은 서브 DNS 서버의 주소를 저장하기 어렵기에 루트 DNS 서버의 주소만 알고있다

 

그래서 루트 계층에서 탑으로, 탑에서 세컨으로, 세컨에서 서브로 순차적으로 각 레벨의 DNS 서버에 접근하여 최종적으로 해당 IP 주소를 얻어내는 방식으로 통신한다

도메인 이름 등록 과정과 원리

전세계 Root name server는 ICANN 이라는 비영리 단체에서 관리한다

Top-level domain 들은 Registry 등록소라는 기관에서 담당한다

 

도메인을 등록하려면 탑레벨 도메인에 주소를 직접 등록 할 수 없고, 네임 서버 형식으로 등록해야 하므로 네임서버가 하나 필요하다

 

등록대행자를 통해 네임서버를 탑레벨 도메인에게 전달해 네임서버를 등록하고, 네임서버에 내 도메인의 IP주소를 등록하면 각각의 서버가 하위 서버를 알고 있기때문에 이제 루트 서버부터 내 IP주소를 찾아 접속이 가능해진다

 

위의 서버 이미지 밑에 각각 저장된 도메인 정보들이 있는데, 이렇게 서버에 저장되어 있는 데이터 형식을 레코드 타입이라고 한다

여기서 A 와 NS는 최종 IP주소 = Address를 뜻하는 A레코드 와 네임서버를 뜻하는 NS레코드를 뜻한다

CNAME은 또 뭔데?

A 레코드는 도메인 이름을 정확한 IP 주소에 매핑한다

CNAME 레코드는 도메인 이름을 다른 도메인 이름에 매핑하여, 간접적으로 IP 주소에 연결한다

특정 도메인이 자주 변경될 때 유용하다

예를 들어, A 레코드를 직접 수정하지 않고도 CNAME 레코드를 수정함으로써 도메인의 별칭을 통해 IP 주소가 변경되더라도 서비스 접속에 문제가 생기지 않도록 할 수 있다

즉, A 레코드가 직접 IP 주소를 가리킨다면, CNAME 레코드는 별칭처럼 다른 도메인을 가리키는 방식이다

Ref : https://youtube.com/playlist?list=PLuHgQVnccGMCI75J-rC8yZSVGZq3gYsFp&si=4ve-6cyJ3wZyV7Qu

'Backend Basics > Cloud & Deployment' 카테고리의 다른 글

로드 밸런서가 뭐임?  (0) 2024.10.08

 

 

로드 밸런서와 로드 밸런싱

서버와 클라이언트를 각각 Express와 React(TypeScript)로 나누어 개발했다

배포할 때 AWS Elastic Beanstalk을 사용하면서 로드 밸런서라는 개념을 처음 접했다

백엔드 지식이 부족해서 하나하나 설정하는 과정이 생소했는데, 정보처리기사 시험을 준비하면서 로드 밸런싱 개념이 다시 등장해 글로 정리해본다

로드 밸런싱 (Load Balancing)이란?

로드 밸런싱은 네트워크 트래픽을 여러 서버에 분배해, 한 서버에 과도한 부하가 걸리지 않도록 해주는 기술이다 이렇게 트래픽을 분산하면 특정 서버가 과부하로 인해 다운되는 상황을 방지할 수 있다

또한, 로드 밸런싱 덕분에 서버를 쉽게 추가하거나 제거할 수 있고, 트래픽의 변화에 유연하게 대응할 수 있어 확장성 측면에서 매우 유리하다

로드 밸런서 (Load Balancer)의 역할

  • 여러 대의 서버가 있을 경우, 이들 사이에 네트워크 요청을 효율적으로 분배하는 장치

만약 서버 중 하나가 다운되거나 문제가 발생하면, 로드 밸런서는 자동으로 트래픽을 다른 정상적인 서버로 리다이렉트해서 서비스의 지속성을 보장한다

로드 밸런싱의 분배 방식

  • Random (랜덤 분배): 요청을 무작위로 서버에 할당
  • Least Loaded (가장 적은 부하 서버 선택): 현재 가장 적은 양의 작업을 처리하고 있는 서버에게 요청 할당
  • Least Connection (최소 연결 서버 선택): 현재 연결된 클라이언트 수가 가장 적은 서버에 요청 할당 서버의 성능이 비슷하게 구성돼 있을 때 가장 효과적으로 트래픽을 분산할 수 있다
  • Round Robin (라운드 로빈): 순차적으로 작업을 분배해 빠르지만, 서버의 성능 차이를 고려하지 않는다
    • Weighted Round Robin (가중치 라운드 로빈): 서버의 성능 차이를 반영해, 더 성능 좋은 서버에 더 많은 요청 할당
  • Source IP Hash (소스 IP 해시): 클라이언트의 IP 주소를 해시한 결과를 기반으로 특정 서버에 요청을 보내며, 클라이언트가 항상 같은 서버에 연결될 수 있도록 한다

Ref : https://guide-fin.ncloud-docs.com/docs/networking-loadbalancer-loadbalanceroverview

'Backend Basics > Cloud & Deployment' 카테고리의 다른 글

DNS Domain Name System 가 뭐임  (2) 2024.10.09

+ Recent posts