7강 / 20강

포트 — 건물 안의 호수

서버 한 대가 여러 서비스를 하는 법

포트 — 건물 안의 호수
IP는 건물 주소, 포트는 호수. 80호는 웹, 22호는 SSH.

우리 서버 한 대에는 웹서버도 있고, 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 에 묶어 두는 이유로 가장 정확한 것은?
🤔 확인 문제
bind() to 0.0.0.0:80 failed (98: Address already in use) 의 뜻은?