7강 / 20강
포트 — 건물 안의 호수
서버 한 대가 여러 서비스를 하는 법
우리 서버 한 대에는 웹서버도 있고, SSH도 있고, 데이터베이스도 있습니다. IP 주소는 하나뿐인데 어떻게 구분할까요?
건물에 호수를 붙이면 됩니다. 그것이 포트 번호예요.
192.168.10.10 (건물 주소 = IP)
22SSH — 관리자 출입구
80HTTP — 손님용 정문
443HTTPS — 자물쇠 달린 정문
3306MySQL — 창고 (직원 전용)
8000gunicorn — 주방 (직원 전용)
IP + 포트 한 쌍을 소켓(socket) 이라고 부릅니다.
192.168.10.10:80 처럼 콜론으로 붙여 쓰죠.
쇼핑몰 서버를 처음 맡으면 가장 먼저 실행할 명령입니다.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
포트 번호에도 동네가 있습니다
| 범위 | 이름 | 설명 |
|---|---|---|
| 0 ~ 1023 | 잘 알려진 포트 | 22·80·443 등. 루트 권한이 있어야 열 수 있습니다 |
| 1024 ~ 49151 | 등록 포트 | 3306(MySQL)·8000(앱)·6379(Redis) |
| 49152 ~ 65535 | 임시 포트 | 손님 쪽이 접속할 때 자동으로 하나 빌려 쓰는 번호 |
손님 노트북이 우리 서버 80번에 접속하면, 손님 쪽은 51422 같은 임시 번호를 하나 씁니다.
그래서 한 손님이 탭을 10개 열어도 서로 안 섞여요. 연결은 네 값의 조합으로 구분됩니다.
출발IP : 출발포트 → 도착IP : 도착포트
Peer 쪽 포트가 전부 제각각인 것을 확인하세요.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
Address already in use — 가장 자주 만나는 에러
배포 스크립트를 돌렸는데 서비스가 안 뜹니다. 로그를 보면 이렇게 적혀 있어요.
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
한 포트는 한 프로그램만 쓸 수 있습니다. 이미 누가 80을 쓰고 있다는 뜻이에요. 직접 재현해 봅시다.
포트 충돌을 위젯에서 직접 만들어 볼 수도 있습니다.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
🤔 확인 문제
gunicorn을
127.0.0.1:8000 에 묶어 두는 이유로 가장 정확한 것은?해설 앱을 0.0.0.0 에 열면 손님이
서버IP:8000 으로 nginx를 건너뛰고 직접 들어올 수 있습니다. 그러면 nginx의 접속 제한·로그·TLS가 전부 무용지물이 돼요. 열지 않는 것이 가장 확실한 차단입니다.🤔 확인 문제
bind() to 0.0.0.0:80 failed (98: Address already in use) 의 뜻은?해설 한 포트는 한 프로그램만 점유할 수 있습니다.
sudo ss -tulpn | grep :80 으로 범인 프로세스를 먼저 찾는 것이 정석이에요.