우리가 브라우저에서 구매한 도메인 주소를 입력하면 만들어 놓은 aws EC2 서버까지 전달이 되어서 해당 서버에게 요청을 보낼 수 있습니다. 이 과정이 상세하게 어떻게 진행되는지 그림으로 한번 그려볼까요?
이번 질문에 답하기 위해서, IP주소와 DNS(Domain Name System)알아보자.
IP 주소와 Port
IP 주소란?
IP 주소는 통신이 가능한 모든 기기가 통신을 할 수 있도록 가지는 특수하고 고유한 주소(인터넷상에서 이용하는 주소)이다.
IP 주소는 공인주소와 사설주소로 나뉘는데, 일반적으로 인터넷을 사용하기 위해서는 반드시 하나 이상의 공인 주소가 있어야 한다.
- 터미널에서 nslookup 명령어를 사용해 naver.com의 IP 주소를 조회해 보았다.
- 아래와 같이, 네덩이로 나눠진 숫자의 조합으로 IP주소를 찍는데, 이러한 주소체계를 IPv4라고 한다.
- IPv4는 각 덩어리마다 0 ~ 255까지 나타낼 수 있음 => 2^32 = 약43억개의 IP 주소를 표현
- 현재 사용 중인 로컬 PC : localhost, 127.0.0.1
- bradcast address - 로컬 네트워크에 접속된 모든 장치와 소통하는 주소 : 0.0.0.0, 255.255.255.255
- PC 보급률이 증가하면서 IPv4로는 커버 불가능한 수준에 도달했고, 현재는 IPv6(2^128개 주소 생산)를 사용한다고 함
$ nslookup naver.com
Non-authoritative answer:
Server: 우리집 인터넷 서버
Address: 우리집 서버 IP 주소
Name: naver.com
Addresses: 223.130.195.95
223.130.195.200
223.130.200.104
223.130.200.107
Port란?
Port는 IP 주소를 가진 기기의 데이터가 드나들 수 있는 통로인데, 하나의 IP 내에서 어플리케이션 구분을 위해 사용하는 번호다. 쉽게 말해, 하나의 포트 당 하나의 어플리케이션 통신을 한다.
- IP 주소 중 이미 지정된 주소가 있듯, port에도 잘 알려진 번호가 있다.
- 22 : SSH
- 80 : HTTP
- 443: HTTPS
- 잘 알려지지 않은 번호 중 사용이 정해져 있는 포트 : 3000 (개발 서버 등에 사용되는 임시포트)
- 더 자세한 포트 정보는 아래 위키피디아 링크를 참조

List of TCP and UDP port numbers - Wikipedia
en.wikipedia.org
DNS (Domain Name System)
DNS는 사람이 읽을수 있는 domain name(www.naver.com)을 IP 주소(223.130.195.95)로 변환하는 시스템이다.
- DNS는 계층구조를 가지는 분산 데이터베이스 구조로 이루어져 있는데, 상위 DNS 서버에서는 인증된 하위 DNS 서버에 domain을 생성하거나, IP 주소로 변환할 수 있는 권한을 준다. (dot이 계층을 나타냄)
- DNS는 Domain Name Space / Name Server (권한 있는 DNS 서버) / Resolver (권한 없는 DNS 서버)로 구성되어 있다.


- 사용자가 naver.com이라는 도메인으로 해당 서비스에 접속하려고 하면, 네트워크상에서 domain에 해당하는 IP 주소를 갖와 IP 주소로 접속하는 과정이 이루어진다.
- 사용자가 브라우저에 도메인을 입력 www.naver.com
- resolver 서버는 root DNS 서버에 .com을 확인 요청 -> root DNS 서버는 .com DNS 서버로 넘김
- resolver는 다시 .com DNS 서버에서 naver.com을 확인 요청 -> .com DNS 서버는 가비아 네임서버로 넘김
- resolver는 다시 가비아 네임 서버에 www.naver.com을 확인 요청 -> 가비아 네임 서버는 223.130.195.95 IP 주소를 반환
- resolver는 반환 받은 IP 주소를 브라우저에 전달

- DNS와 관련된 더 자세한 내용은 아래 블로그를 참고!!
DNS란? (도메인 네임 시스템 개념부터 작동 방식까지) - 하나몬
이 게시물의 중요 포인트 DNS(도메인 네임 시스템)이 사람이 읽을 수 있는 도메인 이름(www.hanamon.kr)을 IP 주소로 변환하는 시스템이라는 것은 쉽게 알 수 있습니다. 이번 글에서는 이렇게 도메인
hanamon.kr
마무리
나는 3주차 개인 과제를 진행하면서, 가비아 네임 서버에서 dev-jn.shop 이라는 도메인을 구매했다. 이후, 가비에 서버에 aws EC2 서버 IP 주소를 등록하였다.
내가 개발한 프로그램에서는 port 번호를 3000번으로 지정해서 테스트에 사용했는데, EC2 서버 컴퓨터에 git을 통해 개발한 애플리케이션을 다운 받아 실행시키면, 서버는 정상적으로 돌아가지만, http://dev-jn.shop:3000 주소로는 접속이 불가능하다.
이유는 바로, iptables 라는 Linux 운영체제 내부에서 방화벽 역할을 하는 프로그램 때문이다. 내가 AWS에서 대여한 EC2 Instance에 있는 iptables가 3000번 포트를 막고 있기 때문이다.
이 iptables에 외부에서 80 포트로 들어오는 요청을 리눅스 내부에서 사용되는 3000 포트로 전달하도록 규칙을 추가해주면, http://dev-jn.shop (== http://dev-jn.shop:80) 주소로 접속이 가능해진다.

이제, 클라이언트에서 나의 도메인으로 접속 요청을 보낸다면, 아래 그림과 같은 프로세스를 거쳐 도메인 -> IP 주소로 변환하여 접속하게 된다.

나중에 공부해볼 블로그
김맥스 블로그 | 브라우저 주소창에 URL을 치면 일어나는 일들
최근에 컴퓨터 네트워크 공부를 다시 하면서 "브라우저 주소창에 URL을 치면 일어나는 일을 아는대로 말 하기"라는 웹 개발자 면접 단골 질문에 대해 다시 생각해보게 되었습니다. 해당 질문을
maxkim-j.github.io
'항해99_10기 > 105일의 TIL & WIL' 카테고리의 다른 글
| [4주차] [20221203] jwt - refresh token 동작 시나리오, EADDRINUSE 에러 (4) | 2022.12.03 |
|---|---|
| [3주차] [20221201] Routing (1) | 2022.12.01 |
| [3주차] [20221130] MongoDB 스키마 설계 (0) | 2022.11.30 |
| [3주차] [20221129] 에러 핸들링 (0) | 2022.11.29 |
| [3주차] [20221128] REST API와 RESTful 아키텍처, HTTP PUT과 PATCH 차이점 (0) | 2022.11.28 |