| 항목 | HTTP | HTTPS |
|---|---|---|
| 의미 | HyperText Transfer Protocol | HyperText Transfer Protocol Secure |
| 정의 | 웹에서 데이터를 주고받는 프로토콜 | HTTP에 보안 계층(SSL/TLS)을 추가한 프로토콜 |
| 보안 여부 | 암호화 없음 (평문 통신) | SSL/TLS 암호화 적용 |
| 기본 포트 번호 | 80 | 443 |
| 사용 계층 | 애플리케이션 계층 (L7) | 애플리케이션 계층 (SSL/TLS는 전송 계층과 애플리케이션 계층 사이에 위치) |

HTTPS의 핵심인 SSL(Secure Sockets Layer)/TLS(Transport Layer Security)
Handshake 단계 단축, Perfect Forward Secrecy 기본 적용
무료로 SSL 인증서를 발급해주는 대표적인 기관
DNS는 사람이 읽기 쉬운 도메인 이름(예: www.google.com)을 컴퓨터가 이해하는 IP 주소(예: 142.251.42.100)로 변환해주는 시스템
⇒ 인터넷의 전화번호부 역할

www.example.com)을 입력하면, 사용자의 PC에 설정된 Local DNS Server (일반적으로 ISP에서 제공)에 IP 주소를 질의한다.www.example.com의 IP를 질의한다..com 도메인을 관리하는 TLD(Top-Level Domain) DNS Server의 주소를 응답한다..com 서버)에 다시 질의한다.example.com을 관리하는 Authoritative DNS Server의 주소를 응답한다.www.example.com)에 해당하는 최종 IP 주소를 Local DNS Server에 응답한다.DNS 위변조 공격 방지를 위해 응답에 디지털 서명 추가
사용자 위치에 따라 가장 가까운 서버로 연결
| 구분 | REST API (Representational State Transfer) | gRPC (Google Remote Procedure Call) |
|---|---|---|
| 기반 프로토콜 | 주로 HTTP/1.1 (최근 HTTP/2도 사용) | HTTP/2 |
| 메시지 형식 | 주로 JSON 또는 XML (사람이 읽기 쉬운 텍스트 기반) | 기본적으로 Protocol Buffers (Protobuf) (이진(Binary) 기반) |
| 통신 스타일 | 리소스 중심 (GET, POST, PUT, DELETE 등 HTTP 메서드와 URI 사용) | 서비스/함수 중심 (원격 함수 호출 형태) |
| 데이터 크기 & 속도 | 상대적으로 큼, 파싱 속도 느림 | Protobuf 및 HTTP/2의 장점으로 인해 데이터 크기가 작고 처리 속도가 빠름 |
| 스트리밍 | 제한적 (일반적으로 요청-응답 단방향 통신) | 양방향 스트리밍을 포함한 다양한 스트리밍 지원 (HTTP/2 덕분) |
| 언어 의존성 | 언어에 독립적이며, 브라우저 연동 용이 (모든 언어 가능) | Protobuf IDL(인터페이스 정의 언어)을 통해 다국어 환경에서 엄격한 인터페이스 계약 제공(=어려움) |
| 주요 사용처 | 범용적인 웹 서비스, 공용 API, 브라우저 연동이 필요한 경우 | 마이크로서비스 간 통신, 고성능/저지연이 필요한 내부 시스템, 다국어 환경 |


데이터를 직렬화하는 메커니즘으로, JSON보다 훨씬 효율적인 이진 형식. 스키마를 정의하여 데이터 구조를 강제할 수 있어 타입 안정성이 높다.
REST API가 주로 사용하는 HTTP/1.1의 한계를 극복하기 위해 등장. 멀티플렉싱(Multiplexing), 헤더 압축, 서버 푸시 등의 기능을 통해 gRPC의 고성능을 가능하게 한다.
여러 대의 서버에 네트워크 트래픽을 분산하여 특정 서버에 부하가 집중되는 것을 막고, 서비스의 가용성(Availability)과 응답 시간을 향상시키는 기술
CORS는 브라우저가 다른 도메인(origin)으로 요청을 보낼 때
이를 허용할지 말지 결정하는 보안 정책(Security Policy)
즉, “브라우저 단에서의 보안 장치”이지, 서버 자체의 문제는 아니다.
CORS 에러 예시
// Frontend: https://myapp.com
fetch("https://api.server.com/data")
// -> Access to fetch at 'https://api.server.com/data' from origin 'https://myapp.com' has been blocked by CORS policy.
WebSocket은 HTTP를 기반으로 한 실시간 양방향 통신 프로토콜
한 번 연결(Handshake)되면 서버 ↔ 클라이언트가 자유롭게 데이터를 주고받을 수 있음.
주로 채팅, 주식 시세, 실시간 알림, 게임 서버 등에서 사용됩니다.
클라이언트의 요청을 대신 받아 내부 서버에 전달하고 결과를 돌려주는 중간 서버
대표적으로 Nginx, Apache, HAProxy, Traefik 등이 있다.
┌─────────────────────────────┐
│ [Browser / React] │
│ - HTTPS 요청 (HTTP/2 or 3)│
│ - CORS 정책 적용 │
│ - WebSocket 연결 가능 │
└──────────────┬──────────────┘
│ HTTPS (443)
▼
┌─────────────────────────────┐
│ [Reverse Proxy] │ ← (예: Nginx / HAProxy)
│ - SSL/TLS 처리 (HTTPS 종단점)│
│ - CORS 헤더 설정 │
│ - WebSocket 업그레이드 허용 │
│ - Load Balancing / Caching │
│ - Backend 요청 전달 (proxy) │
└──────────────┬──────────────┘
│ HTTP (내부망)
▼
┌─────────────────────────────┐
│ [Backend Servers] │
│ - REST API (Express, Django)│
│ - gRPC (microservices) │
│ - WebSocket 서버 │
│ - DB 연결 │
└──────────────┬──────────────┘
▼
┌─────────────────────────────┐
│ [Database / Cache] │
│ MySQL, Redis, MongoDB 등 │
└─────────────────────────────┘
익숙하지 않은 gRPC에 대해 자세하게 작성되어 있어서 이해하기 좋았어요!