웹사이트나 서버를 공부하다 보면 주소 뒤에 숫자가 붙어 있는 경우를 자주 보게 된다.
http://localhost:3000
http://127.0.0.1:8000
https://example.com:443
처음에는 왜 주소 뒤에 이런 숫자가 붙는지, 그리고 왜 유독 80, 443, 3000 같은 숫자를 많이 사용하는지 궁금해질 수 있다. 나도 처음에는 그냥 아무 숫자나 붙이는 줄 알았다. 그런데 알고 보니 이 숫자는 포트 번호라고 부르며, 컴퓨터가 어떤 프로그램으로 연결해야 하는지 구분하기 위해 꼭 필요한 번호였다.
쉽게 말하면, IP 주소가 “어느 집인지”를 알려주는 주소라면, 포트 번호는 그 집 안에서 “어느 방으로 들어갈지”를 알려주는 번호다.
예를 들어 같은 컴퓨터 안에서도 웹서버, 게임 서버, 데이터베이스 서버가 동시에 실행될 수 있다. 이때 각각을 구분하기 위해 포트 번호를 사용한다.

포트 번호는 무엇일까
컴퓨터에는 여러 프로그램이 동시에 인터넷 연결을 사용할 수 있다. 예를 들어 한 컴퓨터에서 아래와 같은 일이 동시에 일어날 수 있다.
- 브라우저로 웹사이트 보기
- 게임 실행하기
- Discord 켜기
- 웹서버 실행하기
그런데 만약 주소만 보고 연결한다면, 컴퓨터는 어떤 프로그램으로 보내야 할지 알 수 없다.
예를 들어 아래처럼 주소만 있다면:
192.168.0.10
컴퓨터는 “이 컴퓨터로 가라”는 것은 알 수 있다. 하지만 그 안에서 웹사이트로 갈지, 게임 서버로 갈지, 데이터베이스로 갈지는 모른다.
그래서 주소 뒤에 포트 번호를 붙인다.
192.168.0.10:80
192.168.0.10:3306
192.168.0.10:25565
이렇게 하면 컴퓨터는 어느 프로그램으로 연결해야 하는지 알 수 있다.
쉽게 비유하면:
- IP 주소 = 아파트 주소
- 포트 번호 = 몇 호인지
즉, 같은 아파트라도 101호, 202호, 303호가 다르듯이, 같은 컴퓨터라도 포트 번호가 다르면 연결되는 프로그램이 다르다.
왜 웹사이트는 보통 80번 포트를 사용할까
80번 포트는 가장 기본적인 웹사이트용 포트다. 인터넷 초창기부터 웹사이트는 대부분 80번 포트를 사용하기로 약속되어 있었다.
즉, 브라우저에 아래처럼 입력하면:
http://example.com
사실 컴퓨터는 자동으로 아래처럼 생각한다.
http://example.com:80
주소에 80을 따로 쓰지 않아도, 브라우저가 자동으로 80번 포트를 사용한다.
80번 포트는 보안이 없는 일반 HTTP 웹사이트에 사용된다.
예를 들어 Apache나 Nginx를 설치하면, 기본적으로 80번 포트에서 웹사이트를 열어주는 경우가 많다.
나도 처음 Apache를 설치하고 브라우저에 서버 IP만 입력했을 때, 왜 따로 숫자를 안 적는데도 웹사이트가 열리는지 궁금했다. 알고 보니 브라우저가 자동으로 80번 포트를 붙이고 있었다.
443번 포트는 왜 HTTPS에서 사용할까
요즘 웹사이트를 보면 대부분 주소가 http가 아니라 https로 시작한다.
https://google.com
https://naver.com
이때 사용하는 포트가 443번이다.
HTTPS는 암호화된 웹사이트다. 즉, 로그인 정보나 비밀번호를 안전하게 주고받기 위해 데이터를 암호화한다.
그래서 브라우저에 아래처럼 입력하면:
https://example.com
실제로는 컴퓨터가 아래처럼 연결한다.
https://example.com:443
즉, 443번 포트는 “보안이 적용된 웹사이트용 방”이라고 생각하면 쉽다.
80번과 443번의 차이는 아래처럼 정리할 수 있다.
| 포트 | 주로 사용하는 것 | 특징 |
|---|---|---|
| 80 | HTTP | 암호화 없음 |
| 443 | HTTPS | 암호화 있음 |
예전에는 80번 포트를 사용하는 사이트가 많았지만, 요즘은 대부분 443번 HTTPS를 사용한다. 그래서 주소창에 자물쇠 표시가 보이는 것이다.
3000번 포트는 왜 개발할 때 많이 사용할까
3000번 포트는 일반 웹사이트용 포트라기보다, 개발자가 테스트할 때 많이 사용하는 포트다.
특히 React, Node.js, Express 같은 프로그램은 기본적으로 3000번 포트를 많이 사용한다.
예를 들어 React 프로젝트를 실행하면 보통 아래처럼 나온다.
http://localhost:3000
왜 하필 3000번이냐면, 80번이나 443번은 이미 웹사이트용으로 자주 사용되기 때문에, 개발용 서버는 다른 번호를 쓰는 경우가 많다. 그중에서 3000번이 가장 흔하게 자리 잡았다.
즉, 개발자는 내 컴퓨터 안에서 먼저 테스트하기 위해 3000번 포트를 사용하고, 나중에 실제 웹사이트로 공개할 때는 80이나 443으로 바꾸는 경우가 많다.
나도 처음 React를 실행했을 때 localhost:3000이라는 주소가 떠서, 왜 갑자기 3000이라는 숫자가 나오는지 몰랐다. 그런데 그건 React가 “내 컴퓨터 안에서 3000번 방을 사용해서 테스트 중”이라는 뜻이었다.
그 외에도 자주 쓰는 포트 번호가 있다
80, 443, 3000 외에도 자주 쓰는 포트 번호들이 있다.
| 포트 번호 | 주로 사용하는 프로그램 |
|---|---|
| 22 | SSH 원격 접속 |
| 21 | FTP 파일 전송 |
| 3306 | MySQL 데이터베이스 |
| 5432 | PostgreSQL 데이터베이스 |
| 8080 | 테스트용 웹서버 |
| 25565 | 마인크래프트 서버 |
예를 들어 SSH로 서버에 접속할 때는 아래처럼 22번 포트를 사용한다.
ssh user@192.168.0.10
사실 이 명령어도 내부적으로는 22번 포트로 연결하고 있다.
그리고 MySQL 데이터베이스는 보통 3306번 포트를 사용한다. 그래서 웹서버와 데이터베이스 서버가 같은 컴퓨터 안에 있어도, 서로 다른 포트를 사용하기 때문에 충돌하지 않는다.
왜 80이나 443 대신 다른 포트를 쓰는 경우도 있을까
모든 웹사이트가 꼭 80이나 443만 사용하는 것은 아니다.
예를 들어 테스트용 서버를 열거나, 권한 문제 때문에 다른 포트를 쓰는 경우가 있다.
http://localhost:8080
http://localhost:5000
이런 주소도 많이 볼 수 있다.
특히 리눅스에서는 1024보다 작은 포트 번호를 사용하려면 관리자 권한이 필요한 경우가 많다. 그래서 개발자는 3000, 5000, 8000, 8080처럼 큰 번호를 자주 사용한다.
예를 들어 Python Flask는 5000번, Django는 8000번을 자주 사용한다.
즉, 개발용 프로그램마다 “기본으로 자주 쓰는 포트 번호”가 어느 정도 정해져 있다.
포트 번호를 보면 어떤 프로그램인지 짐작할 수 있다
포트 번호를 이해하면, 주소만 보고도 어떤 프로그램인지 어느 정도 알 수 있다.
- 80 → 일반 웹사이트
- 443 → 보안 웹사이트
- 3000 → React, Node.js 개발 서버
- 22 → SSH 접속
- 3306 → MySQL
예를 들어 localhost:3000을 보면 “아, React나 Node.js 서버구나”라고 생각할 수 있다. 그리고 서버에서 22번 포트를 열라는 말을 들으면, “SSH 접속을 위해서구나”라고 이해할 수 있다.
처음에는 80, 443, 3000 같은 숫자가 그냥 외워야 하는 번호처럼 느껴질 수 있다. 하지만 사실은 각각 역할이 정해진 문 번호 같은 것이다.
그래서 앞으로 주소 뒤에 숫자가 보이더라도, “이 컴퓨터 안에서 어떤 프로그램으로 연결할지 알려주는 번호구나”라고 생각하면 훨씬 이해하기 쉬워진다.