
네트워크 기초 완전 정복: IP, 포트, DNS, HTTP — 인터넷이 진짜로 작동하는 원리
주소창에 URL을 입력하고 엔터를 누르면 무슨 일이 벌어질까? IP 주소, 포트, DNS, TCP/UDP, HTTP — 인터넷을 구성하는 핵심 개념을 하나씩 해부하고, 이것이 클라우드 인프라와 어떻게 연결되는지 완전히 이해한다.

주소창에 URL을 입력하고 엔터를 누르면 무슨 일이 벌어질까? IP 주소, 포트, DNS, TCP/UDP, HTTP — 인터넷을 구성하는 핵심 개념을 하나씩 해부하고, 이것이 클라우드 인프라와 어떻게 연결되는지 완전히 이해한다.
카페에서 노트북을 열고 주소창에 www.core.today를 입력한다. 엔터를 누르면 0.3초 만에 화면에 웹사이트가 나타난다. 우리는 이것을 너무 당연하게 받아들인다.
하지만 이 0.3초 동안 실제로 벌어지는 일은 놀라울 정도로 복잡하다. 여러분의 노트북은 수십 개의 네트워크 장비를 거쳐 지구 반대편에 있을 수도 있는 서버를 찾아내고, 그 서버에 "이 페이지 좀 보여줘"라고 요청하고, 서버가 보내준 데이터를 받아 화면에 그려낸다. 이 모든 과정이 사람이 눈을 한 번 깜빡이는 시간(약 0.3초) 안에 끝난다.
이 글에서는 그 0.3초 안에서 벌어지는 모든 일을 하나하나 해부한다. IP 주소란 무엇인지, 포트가 왜 필요한지, DNS는 어떻게 도메인 이름을 IP로 바꾸는지, TCP와 UDP는 뭐가 다른지, HTTP 요청과 응답은 어떤 구조인지 — 네트워크의 기초를 완전히 이해하는 것이 목표다.
왜 이것을 알아야 할까? 클라우드에서 서버를 띄우면 Security Group(보안 그룹)에 포트 규칙을 설정해야 한다. VPC(가상 사설 네트워크)를 구성하려면 CIDR 표기법을 알아야 한다. 로드밸런서를 붙이려면 HTTP 상태 코드를 이해해야 한다. 네트워크 기초 없이 클라우드를 다루는 것은, 교통법규를 모르고 운전대를 잡는 것과 같다.
인터넷은 한 덩어리가 아니다. 마치 택배 시스템이 포장, 분류, 운송, 배달로 나뉘듯, 네트워크도 역할별로 층(Layer)이 나뉘어 있다. 이것을 OSI(Open Systems Interconnection) 7계층 모델이라고 부른다.

7개 층을 모두 외울 필요는 없다. 실무에서 정말 중요한 4개 층에 집중하자.
| 계층 | 이름 | 하는 일 | 현실 비유 |
|---|---|---|---|
| 7 | 응용 계층 (Application) | 사용자가 직접 접하는 프로토콜 (HTTP, DNS, SMTP) | 편지의 내용 |
| 6 | 표현 계층 (Presentation) | 데이터 암호화, 압축, 인코딩 | 편지를 암호로 작성 |
| 5 | 세션 계층 (Session) | 연결 유지 및 관리 | 전화 통화 시작/끝 |
| 4 | 전송 계층 (Transport) | 데이터를 쪼개서 안전하게 전달 (TCP, UDP) | 택배 추적 번호 |
| 3 | 네트워크 계층 (Network) | 목적지까지의 경로 결정 (IP) | 우편번호 + 주소 |
| 2 | 데이터 링크 계층 (Data Link) | 인접 장치 간 통신 (MAC 주소, 이더넷) | 같은 건물 내 우편함 |
| 1 | 물리 계층 (Physical) | 전기 신호, 빛, 전파로 실제 데이터 전송 | 도로, 철길, 항공로 |
핵심은 분업이다. 각 층은 자기 역할만 하고, 다른 층의 내부 동작을 알 필요가 없다. 택배 기사는 상자 안에 뭐가 들었는지 몰라도 배달할 수 있다. 포장 담당자는 택배가 어떤 경로로 갈지 신경 쓰지 않는다.
이 분업 구조 덕분에 각 층의 기술을 독립적으로 발전시킬 수 있다. 와이파이(물리 계층)가 2.4GHz에서 6GHz로 업그레이드되어도, HTTP(응용 계층)는 바꿀 필요가 없다. 반대로 HTTP가 1.1에서 3으로 발전해도, 랜 케이블을 바꿀 필요는 없다.
실무에서는 물리(1층), 네트워크(3층), 전송(4층), 응용(7층) 이 4개 층을 주로 다룬다. 나머지 3개(2, 5, 6층)는 현대 프로토콜에서 다른 층에 흡수되었다. 실제로 인터넷의 실질적 모델인 TCP/IP 4계층 모델은 이 현실을 반영해 4개 층만 정의한다.
이 4개 층의 핵심 프로토콜을 하나씩 파고들어 보자. 3층(IP)부터 시작한다.

세상의 모든 건물에 주소가 있듯, 인터넷에 연결된 모든 장치에는 IP 주소(Internet Protocol Address)가 있다.
여러분의 노트북, 스마트폰, 카페의 와이파이 공유기, 넷플릭스 서버, 코어닷투데이의 웹 서버 — 모두 고유한 IP 주소를 갖고 있다.
IP 주소가 없으면 데이터가 어디로 가야 하는지 알 수 없다. 편지에 주소를 안 쓰면 배달이 안 되는 것과 같다.
가장 익숙한 형태는 IPv4 주소다.
43억 개면 충분해 보이지만, 2026년 현재 인터넷에 연결된 장치는 300억 개가 넘는다. 스마트폰, 노트북, 태블릿은 물론이고, 스마트 TV, 냉장고, 자동차, 공장의 센서까지. IPv4 주소는 이미 2011년에 고갈됐다.
IPv6는 128비트를 사용해 사실상 무한에 가까운 주소를 제공한다.
여기서 중요한 구분이 하나 있다. 모든 장치가 전 세계에서 유일한 IP를 가질 필요는 없다. 아파트에 비유하면 이렇다:
집에서 와이파이를 쓸 때, 여러분의 기기들은 모두 사설 IP(192.168.x.x)를 갖는다. 인터넷으로 나갈 때는 공유기가 NAT(Network Address Translation)을 통해 하나의 공인 IP로 변환해준다. 카페에서도 마찬가지다 — 카페의 모든 손님이 하나의 공인 IP를 공유한다.
사설 IP 대역은 전 세계적으로 정해져 있다:
| 대역 | 범위 | 주소 수 | 주 용도 |
|---|---|---|---|
| 10.0.0.0/8 | 10.0.0.0 ~ 10.255.255.255 | 약 1,677만 개 | 대규모 기업, 클라우드 VPC |
| 172.16.0.0/12 | 172.16.0.0 ~ 172.31.255.255 | 약 104만 개 | 중규모 네트워크 |
| 192.168.0.0/16 | 192.168.0.0 ~ 192.168.255.255 | 약 6만 5천 개 | 가정, 소규모 사무실 |
위 표에서 /8, /12, /16 같은 표기를 봤을 것이다. 이것이 CIDR(Classless Inter-Domain Routing) 표기법이다. 클라우드를 다루려면 반드시 알아야 한다.
CIDR은 IP 주소 뒤에 슬래시(/)와 숫자를 붙여 네트워크의 크기를 나타낸다. 숫자가 클수록 네트워크가 작다.
왜 이것이 클라우드에서 중요한지는 나중에 VPC 섹션에서 다시 다룬다. 일단 기억해둘 것: CIDR의 숫자가 클수록 네트워크가 작다. /16은 큰 동네, /24는 작은 골목, /32는 딱 한 채의 집이다.
IP 주소가 건물의 주소라면, 포트(Port)는 건물 안의 방 번호다.
생각해보자. 하나의 서버에서 웹사이트(HTTP), 이메일(SMTP), 데이터베이스(MySQL)를 동시에 돌리고 있다. 누군가 이 서버에 요청을 보냈을 때, 이 요청이 웹사이트용인지 이메일용인지 데이터베이스용인지 어떻게 구분할까? 포트 번호로 구분한다.
포트 번호는 0 ~ 65535 범위의 숫자다. IP주소:포트번호 형태로 표현한다. 예를 들어 203.0.113.10:443은 "이 서버의 HTTPS 서비스에 접속하겠다"는 뜻이다.
"서버가 80번 포트에서 리스닝(listening)하고 있다"는 말을 자주 듣게 될 것이다. 이것은 서버의 특정 프로그램이 80번 포트로 들어오는 요청을 기다리고 있다는 뜻이다.
카페에 비유하면, 80번 포트에서 리스닝한다 = "80번 창구에 직원이 앉아서 주문을 기다리고 있다." 아무도 앉아 있지 않은 창구(닫힌 포트)로 주문하면 응답이 없다.
| 포트 | 프로토콜 | 용도 | 클라우드에서 만날 때 |
|---|---|---|---|
| 22 | SSH | 원격 서버 접속 (터미널) | EC2 인스턴스에 SSH 접속 |
| 80 | HTTP | 웹사이트 (암호화 없음) | 로드밸런서 인바운드 규칙 |
| 443 | HTTPS | 웹사이트 (SSL/TLS 암호화) | 프로덕션 웹 서비스 필수 |
| 3000 | 관례적 | Node.js/React 개발 서버 | 개발 환경 테스트 |
| 3306 | MySQL | MySQL 데이터베이스 | RDS MySQL 접속 |
| 5432 | PostgreSQL | PostgreSQL 데이터베이스 | RDS PostgreSQL 접속 |
| 6379 | Redis | 인메모리 캐시/DB | ElastiCache 접속 |
| 8080 | 관례적 | 대체 HTTP (개발/프록시) | 톰캣, Jenkins 등 |
포트 번호는 세 구간으로 나뉜다:
IP가 어디로 보낼지를 정하고, 포트가 어떤 서비스에 전달할지를 정했다면, 어떻게 전달할지를 결정하는 것이 전송 계층(Transport Layer)이다. 여기에 두 가지 선택지가 있다: TCP와 UDP.


TCP(Transmission Control Protocol)는 신뢰성을 최우선으로 한다. 보낸 데이터가 빠짐없이, 순서대로, 오류 없이 도착하는 것을 보장한다.
그 대가로 속도가 느리다. TCP는 데이터를 보내기 전에 먼저 연결을 수립해야 하기 때문이다. 이것을 3-way handshake(삼중 악수)라고 부른다.
이 3단계를 거친 후에야 실제 데이터가 오간다. 택배로 비유하면, 보내기 전에 수신자에게 전화해서 "택배 보낼 건데 집에 있어?" "응, 있어" "알겠어, 보낸다" 이 과정을 거치는 셈이다.
TCP가 보장하는 것들:
UDP(User Datagram Protocol)는 속도를 최우선으로 한다. 연결 수립 과정 없이 데이터를 바로 보낸다. 도착 확인도 안 한다. 순서도 보장하지 않는다.
확성기로 소리를 지르는 것과 같다. 누가 듣든 안 듣든 그냥 보낸다.
| 특성 | TCP | UDP |
|---|---|---|
| 연결 수립 | 필요 (3-way handshake) | 불필요 (바로 전송) |
| 신뢰성 | 보장 (재전송, 순서 보장) | 비보장 (유실 가능) |
| 속도 | 상대적으로 느림 | 빠름 (오버헤드 최소) |
| 용도 | 웹(HTTP), 이메일, 파일 전송 | 실시간 스트리밍, 게임, DNS 조회 |
| 비유 | 등기우편 (확인 서명 필수) | 전단지 뿌리기 (돌아오는 확인 없음) |
웹사이트를 불러올 때는 HTML 파일의 한 글자라도 빠지면 안 되니 TCP를 쓴다. 하지만 실시간 게임에서 캐릭터의 위치 정보가 0.01초 늦게 도착하느니 차라리 최신 위치만 빠르게 받는 게 낫다 — 그래서 UDP를 쓴다.
사람은 숫자보다 이름을 잘 기억한다. 142.250.207.100보다 google.com이 훨씬 외우기 쉽다.
하지만 컴퓨터는 IP 주소로만 통신할 수 있다. 이 간극을 메워주는 것이 DNS(Domain Name System)다.
DNS는 도메인 이름을 IP 주소로 변환하는 시스템이다. 스마트폰의 연락처 앱과 같다. "엄마"를 누르면 010-1234-5678로 전화가 걸리듯, www.core.today를 입력하면 DNS가 해당 IP를 찾아준다.
브라우저가 www.core.today의 IP를 찾는 과정은 생각보다 복잡하다. 마치 모르는 사람의 전화번호를 여러 곳에 물어보는 것과 같다.
이 과정을 도식화하면 계층적 트리 구조가 된다:
DNS 서버가 저장하는 정보(레코드)에는 여러 종류가 있다:
| 레코드 타입 | 하는 일 | 예시 |
|---|---|---|
| A | 도메인 → IPv4 주소 | core.today → 76.76.21.21 |
| AAAA | 도메인 → IPv6 주소 | core.today → 2606:4700::6810:84e5 |
| CNAME | 도메인 → 다른 도메인 (별명) | www.core.today → core.today |
| MX | 이메일 수신 서버 지정 | core.today → mail.core.today |
| NS | 권한 네임서버 지정 | core.today → ns1.vercel-dns.com |
| TXT | 임의의 텍스트 (인증 등) | SPF, DKIM 이메일 인증 |
DNS로 IP를 알아냈고, TCP로 연결을 수립했다. 이제 서버에게 "이 페이지를 보여줘"라고 말해야 한다. 이때 사용하는 언어가 HTTP(HyperText Transfer Protocol)다.

HTTP는 클라이언트(브라우저)와 서버 사이의 요청-응답 프로토콜이다. 클라이언트가 요청(Request)을 보내면 서버가 응답(Response)을 돌려준다. 단순하지만 이것이 웹의 전부다.
브라우저가 https://www.core.today/blog에 접속할 때 보내는 요청을 들여다보자:
HTTP에는 다양한 메서드가 있지만, 가장 많이 쓰는 것은 네 가지다:
| 메서드 | 의미 | 예시 | 비유 |
|---|---|---|---|
| GET | 조회 (데이터를 가져옴) | 블로그 글 목록 조회 | 도서관에서 책 빌리기 |
| POST | 생성 (새 데이터를 보냄) | 문의 폼 제출, 회원가입 | 우체통에 편지 넣기 |
| PUT | 수정 (기존 데이터를 덮어씀) | 프로필 정보 수정 | 서류 전체를 새로 작성 |
| DELETE | 삭제 | 게시글 삭제 | 파일 폐기 |
서버는 요청을 받으면 응답을 돌려보낸다. 이때 상태 코드(Status Code)로 결과를 알려준다.
상태 코드는 3자리 숫자이며, 첫 자리로 성격을 구분한다:
실무에서 가장 자주 만나는 상태 코드:
| 코드 | 의미 | 개발자가 만나는 상황 |
|---|---|---|
| 200 OK | 성공적으로 처리됨 | 정상 응답. 만세! |
| 201 Created | 리소스가 성공적으로 생성됨 | POST 요청 후 DB에 데이터 저장 완료 |
| 301 Moved Permanently | 영구적으로 주소가 변경됨 | http → https 리다이렉트, 도메인 변경 |
| 304 Not Modified | 변경 없음 (캐시 사용 가능) | 브라우저 캐시가 최신이면 서버가 본문 없이 이것만 보냄 |
| 400 Bad Request | 잘못된 요청 | 필수 파라미터 누락, JSON 형식 오류 |
| 401 Unauthorized | 인증 필요 | 로그인 안 하고 접근 시도 |
| 403 Forbidden | 권한 없음 | 로그인은 했지만 접근 권한이 없음 |
| 404 Not Found | 리소스를 찾을 수 없음 | URL 오타, 삭제된 페이지 |
| 429 Too Many Requests | 요청이 너무 많음 | API Rate Limit에 걸림 |
| 500 Internal Server Error | 서버 내부 오류 | 서버 코드에 버그가 있음 |
| 502 Bad Gateway | 게이트웨이/프록시 오류 | 로드밸런서 뒤의 서버가 응답하지 않음 |
| 503 Service Unavailable | 서비스 이용 불가 | 서버 과부하, 유지보수 중 |
HTTPS는 HTTP에 TLS(Transport Layer Security) 암호화를 추가한 것이다. HTTP로 주고받는 데이터는 평문(plain text)이라 중간에서 누구나 읽을 수 있다. 카페 와이파이에서 HTTP로 로그인하면, 같은 네트워크에 있는 누군가가 비밀번호를 볼 수 있다는 뜻이다.
HTTPS는 데이터를 암호화해서 보내기 때문에 중간에서 가로채도 읽을 수 없다.
2026년 현재, HTTPS는 기본이자 필수다. 대부분의 브라우저는 HTTP 사이트에 경고를 표시하고, Google은 HTTPS를 SEO 순위 요인으로 반영한다. Let's Encrypt 덕분에 SSL 인증서를 무료로 발급받을 수 있어, HTTPS를 안 쓸 이유가 없다.

지금까지 배운 모든 것을 합쳐보자. 카페에서 https://www.core.today/blog를 입력하고 엔터를 누르는 순간부터 화면에 블로그가 표시되기까지, 0.3초 안에 벌어지는 전체 과정이다.
https), 호스트(www.core.today), 경로(/blog)를 분리한다. HTTPS이므로 포트는 443.
www.core.today의 IP 주소를 찾는다. 캐시에 있으면 즉시 사용, 없으면 DNS 서버에 질의. 결과: 76.76.21.21
76.76.21.21:443으로 TCP 연결을 수립한다. SYN → SYN-ACK → ACK.
GET /blog HTTP/1.1 요청을 보낸다. Host 헤더에 www.core.today, 쿠키, User-Agent 등 부가 정보를 포함.
/blog 페이지를 렌더링한다. 블로그 마크다운 파일을 읽고, React 컴포넌트로 HTML을 생성한다.
200 OK + HTML 본문을 돌려보낸다. 브라우저가 HTML, CSS, JS, 이미지를 순차적으로 다운로드한다.
이 8단계가 0.3초 안에 끝난다. 만약 네트워크 중 어떤 단계에서 문제가 생기면:
ERR_NAME_NOT_RESOLVED — 도메인 이름을 IP로 변환하지 못했다. DNS 서버 장애, 도메인 만료, 또는 오타.ERR_CONNECTION_TIMED_OUT — 서버가 응답하지 않는다. 서버가 꺼져 있거나, 방화벽이 포트를 막고 있거나, 네트워크 장애.ERR_CERT_DATE_INVALID — SSL 인증서가 만료되었거나 유효하지 않다. 인증서를 갱신해야 한다.지금까지 배운 네트워크 기초가 클라우드에서 어떻게 쓰이는지, 구체적으로 연결해보자.
AWS에서 EC2 인스턴스(가상 서버)를 만들면 Security Group을 설정해야 한다. Security Group은 "이 서버의 어떤 포트를 열고 닫을지" 정하는 가상 방화벽이다.
보이는가? 포트 번호, IP 주소, CIDR 표기법 — 이 글에서 배운 개념이 그대로 사용된다.
0.0.0.0/0 = 모든 IP (인터넷 전체). /0이니까 네트워크 부분이 0비트, 즉 제한 없음203.0.113.50/32 = 딱 이 IP 하나. /32이니까 32비트 전체가 네트워크 주소, 즉 호스트 1개10.0.0.0/16 = 10.0.x.x 대역의 모든 IP. 같은 VPC 내부SSH 포트(22)를 0.0.0.0/0으로 열어두면 전 세계 누구나 서버에 접속을 시도할 수 있다. 실제로 EC2를 띄우고 22번 포트를 전체 공개하면 몇 분 안에 중국, 러시아 등지에서 무차별 대입 공격(brute-force attack)이 시작된다. 그래서 SSH는 반드시 내 IP로만 제한해야 한다.
VPC(Virtual Private Cloud)는 클라우드 안에 만드는 나만의 가상 네트워크다. 집에서 공유기로 사설 네트워크를 만드는 것과 본질적으로 같다 — 단지 규모가 다를 뿐이다.
VPC를 만들 때 가장 먼저 하는 일이 CIDR 블록 지정이다.
이것은 앞서 배운 공인 IP vs 사설 IP 구조와 정확히 같은 원리다. 퍼블릭 서브넷의 인스턴스에는 공인 IP가 할당되고, 프라이빗 서브넷의 인스턴스는 사설 IP만 갖는다.
| 네트워크 기초 | 클라우드(AWS) 대응 개념 | 실무 활용 |
|---|---|---|
| IP 주소 | Elastic IP, Private IP | 서버에 고정 IP 할당, VPC 내 통신 |
| CIDR 표기법 | VPC/서브넷 CIDR 블록 | 네트워크 크기 설계, IP 범위 지정 |
| 포트 | Security Group 규칙 | 인바운드/아웃바운드 트래픽 제어 |
| 공인 IP / 사설 IP | 퍼블릭 서브넷 / 프라이빗 서브넷 | 웹 서버 vs DB 서버 분리 |
| NAT | NAT Gateway | 프라이빗 서브넷에서 인터넷 접근 |
| DNS | Route 53 | 도메인 관리, 트래픽 라우팅 |
| HTTP/HTTPS | ALB (Application Load Balancer) | 트래픽 분산, SSL 종료 |
| TCP/UDP | NLB (Network Load Balancer) | TCP/UDP 레벨 로드밸런싱 |
간단한 웹 서비스를 AWS에 배포한다고 가정해보자. 배운 네트워크 지식이 어떻게 적용되는지 단계별로 정리한다.
10.0.0.0/16으로 설정. 퍼블릭 서브넷(10.0.1.0/24)과 프라이빗 서브넷(10.0.2.0/24)을 각각 생성.
myapp.core.today의 A 레코드를 로드밸런서 IP로 지정. CNAME으로 www 서브도메인도 연결.
VPC, 서브넷, Security Group, DNS, HTTPS — 모두 이 글에서 배운 네트워크 기초 위에 서 있다. 기초가 탄탄하면 클라우드 설정이 "외워야 할 절차"가 아니라 "이해되는 구조"가 된다.
마지막으로 이 글에서 다룬 핵심 개념을 한눈에 정리한다.
이 글에서 우리는 인터넷이 작동하는 진짜 원리를 처음부터 끝까지 따라가 봤다.
OSI 계층이 네트워크의 설계도라면, IP는 목적지 주소이고, 포트는 건물 안의 방 번호이며, TCP와 UDP는 배달 방식의 선택이고, DNS는 이름을 주소로 바꿔주는 전화번호부이며, HTTP/HTTPS는 서버와 대화하는 언어다.
그리고 이 모든 것이 클라우드의 근간이 된다. Security Group은 포트 규칙이고, VPC는 가상 네트워크이며, Route 53은 DNS이고, ALB는 HTTP 트래픽을 분배한다. 네트워크를 모르면 클라우드는 "버튼을 외워서 누르는 것"이 되고, 네트워크를 알면 클라우드는 "원리를 이해하고 설계하는 것"이 된다.
DX 전문가로 성장하는 여정에서 네트워크 지식은 선택이 아니라 토대다. 이 토대 위에 클라우드, 컨테이너, 쿠버네티스, 마이크로서비스 — 현대 인프라의 모든 것이 세워진다.
다음 편에서는 이 네트워크 기초 위에 리눅스 서버 기초를 쌓아보자. 클라우드 인스턴스에 SSH(포트 22)로 접속해서 실제로 서버를 다루는 법을 배울 것이다. 오늘 배운 포트, TCP, IP가 손끝에서 살아 움직이는 경험을 하게 될 것이다.