스키마는 그렇고, 어떻게 데이터를 주고 받을것이냐에 대한 명세가 포트로 나오는거야?
예상 시간: 5분
스키마는 그렇고, 어떻게 데이터를 주고 받을것이냐에 대한 명세가 포트로 나오는거야?
스키마는 그렇고, 어떻게 데이터를 주고 받을것이냐에 대한 명세가 포트로 나오는거야?
스킴(Scheme)과 포트의 관계
약간 다릅니다. 정리하면:
| 개념 | 역할 | 예시 |
|---|---|---|
| 스킴(Scheme) | 어떤 프로토콜로 통신할지 | https, ftp, ssh |
| 포트(Port) | 서버의 어느 문으로 들어갈지 | 443, 21, 22 |
프로토콜이 "어떻게 주고받을지"를 정의
https://example.com
└─┬─┘
│
└─ "HTTP 프로토콜 + TLS 암호화로 통신해"
→ 요청 형식: GET /path HTTP/1.1
→ 응답 형식: HTTP/1.1 200 OK
→ 헤더, 바디 구조 등 모두 HTTP 명세에 정의됨스킴 = 프로토콜 = 통신 규약 (데이터 형식, 순서, 규칙)
포트는 "어느 서비스로 연결할지"
서버 하나에 여러 서비스가 돌아갈 수 있음:
서버 (example.com)
│
├─ 포트 80 → HTTP 웹서버
├─ 포트 443 → HTTPS 웹서버
├─ 포트 22 → SSH 서버
├─ 포트 21 → FTP 서버
├─ 포트 3306 → MySQL 데이터베이스
└─ 포트 5432 → PostgreSQL 데이터베이스포트 = 서버 안의 "문 번호"
비유: 호텔
스킴 = 어떤 언어로 대화할지 (한국어, 영어, 일본어)
포트 = 호텔의 몇 번 방으로 갈지 (101호, 102호, 103호)
https://hotel.com:443
│ │
│ └─ "443호 방으로 가세요"
└─ "HTTPS 언어로 말할게요"기본 포트 (Default Port)
각 프로토콜마다 약속된 기본 포트가 있음:
| 스킴 | 기본 포트 | 생략 가능 |
|---|---|---|
http:// | 80 | http://example.com = http://example.com:80 |
https:// | 443 | https://example.com = https://example.com:443 |
ftp:// | 21 | |
ssh:// | 22 | |
postgresql:// | 5432 | |
mongodb:// | 27017 |
그래서 평소에 포트를 안 써도 되는 것:
https://google.com ← 포트 443 생략됨
https://google.com:443 ← 같은 의미포트를 바꾸면?
https://example.com:8080- 여전히 HTTPS 프로토콜로 통신 (스킴이 정의)
- 하지만 443이 아닌 8080번 포트로 연결
- 서버가 8080에서 HTTPS 서비스를 돌리고 있어야 함
정리
https://example.com:443/api/users
└─┬─┘ └────┬────┘└┬┘ └───┬───┘
│ │ │ │
│ │ │ └─ 경로 (어떤 리소스?)
│ │ └─ 포트 (어느 문으로?)
│ └─ 호스트 (어느 서버?)
└─ 스킴/프로토콜 (어떻게 통신?)| 질문 | 답을 주는 것 |
|---|---|
| 어떤 형식으로 데이터를 주고받나? | 프로토콜 (스킴) |
| 서버의 어느 서비스에 연결하나? | 포트 |
★ Insight ─────────────────────────────────────
- 포트는 다중화(multiplexing) 용도: 하나의 IP 주소에서 여러 서비스를 구분하기 위해 존재. TCP/UDP 레벨의 개념
- Well-known ports (0-1023): IANA가 관리하는 예약된 포트들. 80(HTTP), 443(HTTPS), 22(SSH) 등. 1024 이상은 자유롭게 사용 가능
─────────────────────────────────────────────────