[API]
🌐 웹 통신 프로토콜의 세계
📡 sever에서 사용되는 통신 규약들 알아보기
-
✨ WebSocket - 실시간 양방향 통신의 강자
- 주요 용도: 실시간 양방향 통신이 필요한 서비스 (채팅, 게임, 실시간 협업 도구)
-
특징: 연결 유지 후 양방향 실시간 데이터 교환
💪 장점 🚫 단점 실시간 양방향 통신 연결 유지 위한 서버 리소스 필요 한번 연결 후 지속적 통신으로 오버헤드 감소 방화벽/프록시 이슈 발생 가능 낮은 지연시간 구현 복잡도 상승 - 플로우:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
클라이언트 서버 | | |-------- 핸드셰이크 요청(HTTP) --------->| | | |<------- 핸드셰이크 응답(HTTP) ----------| | | |========== WebSocket 연결 성립 ==========| | | |----------- 메시지 전송 --------------->| | | |<---------- 메시지 수신 ----------------| | | |----------- 메시지 전송 --------------->| | | |<---------- 메시지 수신 ----------------| | ... | | | |------------ 연결 종료 ---------------->| | |
-
🔄 HTTP API - 범용성과 단순함의 대명사
- 주요 용도: 일반적인 클라이언트-서버 통신, RESTful 서비스
-
특징: 요청-응답 모델, 상태 비저장(Stateless)
💪 장점 🚫 단점 구현 간단, 널리 사용됨 실시간 통신에 비효율적 캐싱 가능 각 요청마다 TCP 연결 오버헤드 확장성 좋음 헤더 크기로 데이터 효율성 감소 - 플로우:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
클라이언트 서버 | | |------------- HTTP 요청 ---------------->| | (GET/POST/PUT/DELETE) | | | | | |<------------ HTTP 응답 -----------------| | (상태 코드 + 데이터) | | | |------------- TCP 연결 종료 -------------| | | | | |------------- HTTP 요청 ---------------->| (새로운 연결) | | |<------------ HTTP 응답 -----------------| | |
-
⚡ gRPC - 고성능 마이크로서비스 통신의 핵심
- 주요 용도: 마이크로서비스 간 통신, 고성능 API
-
특징: HTTP/2 기반, 프로토콜 버퍼 사용
💪 장점 🚫 단점 높은 성능과 낮은 지연시간 학습 곡선 높음 강력한 타입 체킹 브라우저 직접 지원 제한적 코드 생성 자동화 JSON 기반 시스템과 통합 복잡 양방향 스트리밍 지원 - 플로우:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
클라이언트 서버 | | |--------- HTTP/2 연결 설정 ------------->| | | |<-------- HTTP/2 연결 확인 --------------| | | |=== 프로토콜 버퍼로 직렬화된 RPC 호출 ==>| | | | | |<== 프로토콜 버퍼로 직렬화된 RPC 응답 ===| | | | | |=== 단방향/양방향 스트리밍(선택적) =====>| | | | | |---------- 연결 종료 요청 -------------->| | | |<--------- 연결 종료 확인 --------------| | |
-
📢 SSE - 서버에서 클라이언트로의 단방향 이벤트 스트림
- 주요 용도: 서버에서 클라이언트로의 단방향 실시간 알림
-
특징: HTTP 연결 유지하며 서버가 이벤트 전송
💪 장점 🚫 단점 구현 간단 클라이언트→서버 통신 불가 기존 HTTP 인프라와 호환 IE 지원 없음 자동 재연결 기능 연결 수 제한 - 플로우:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
클라이언트 서버 | | |-------- SSE 연결 요청(HTTP) ----------->| | (Accept: text/event-stream) | | | |<--------- 스트림 응답 시작 -------------| | (Content-Type: text/event-stream) | | | |<---------- 이벤트 데이터 #1 ------------| | | |<---------- 이벤트 데이터 #2 ------------| | | |<---------- 이벤트 데이터 #3 ------------| | ... | | | |----- 연결 종료(클라이언트 측에서) ----->| | | | | |----- 자동 재연결(네트워크 복구 시) ---->| | |
-
🖥️ stdio - 프로세스 간 통신의 기본
- 주요 용도: 프로세스 간 통신, CLI 애플리케이션
-
특징: 표준 입출력 스트림(stdin, stdout, stderr)
💪 장점 🚫 단점 간단한 구현 네트워크 통신에 적합하지 않음 모든 OS 지원 복잡한 데이터 구조 전송 어려움 파이프라인 구성 용이 보안 메커니즘 부재 - 플로우:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
부모 프로세스 자식 프로세스 | | |---------- 프로세스 생성 -------------->| | | | | |------- stdin을 통한 데이터 전송 ------->| | | | | |<------ stdout을 통한 결과 수신 ---------| | | | | |<------ stderr를 통한 오류 수신 ---------| | | | | |--------- 프로세스 종료 신호 ----------->| | | |<-------- 종료 상태 코드 반환 -----------| | |