API가 시스템 간에 실제로 이동하는 방법
Source: Dev.to
번역할 텍스트를 제공해 주시면 한국어로 번역해 드리겠습니다.
소개
지금까지 우리는 시스템이 통신하는 방법으로서 API에 대해 이야기했습니다.
하지만 여기 중요한 설명이 있습니다.
API는 시스템이 서로에게 말하는 내용을 정의합니다. 네트워크 프로토콜은 그 메시지가 어떻게 전달되는지를 정의합니다.
네트워크를 통해 메시지가 이동하는 가장 일반적인 방법 몇 가지를 논의해 보겠습니다.
API를 언어라고 생각하세요. 프로토콜을 도로, 차량, 그리고 교통 규칙이라고 생각하세요.
HTTP – 기본 대화
HTTP는 애플리케이션이 인터넷을 통해 통신하는 가장 일반적인 방법입니다. 웹사이트를 열거나 앱이 데이터를 로드할 때 보통 HTTP를 사용합니다.
동작 방식
- 한 쪽이 메시지를 보냅니다
- 다른 쪽이 응답합니다
- 대화가 종료됩니다
편지를 보내고 답장을 기다리는 것과 같습니다. 이는 다음에 적합합니다:
- 페이지 로드
- 데이터 가져오기
- 간단한 요청‑응답 통신
HTTPS – 잠금이 있는 HTTP
HTTPS는 HTTP와 동일하지만 보안이 추가되었습니다. 같은 편지를 보내되 잠긴 봉투 안에 넣는 것과 같습니다. 발신자와 수신자만 내용을 읽을 수 있습니다.
그렇기 때문에 HTTPS는 다음과 같은 경우에 사용됩니다:
- 로그인 시스템
- 결제
- 모든 민감한 데이터
API 관점에서는 동작이 변하지 않습니다. 오직 프라이버시와 안전성만 향상됩니다.
WebSocket – 호출을 열어두기
WebSocket은 다릅니다. 메시지를 보내고 연결을 끊는 대신, 라인을 열어둡니다.
전화 통화와 같습니다:
- 양쪽 모두 연결된 상태를 유지합니다
- 언제든지 말을 할 수 있습니다
이는 메시지가 양방향으로 흐르고 업데이트가 즉시 이루어져야 할 때 사용됩니다.
예시
- 실시간 채팅
- 실시간 알림
- 실시간 대시보드
WebSocket을 사용하는 API는 “다시 묻지” 않습니다. 지속적으로 청취합니다.
TCP – 느리지만 신뢰할 수 있는 전달
TCP는 신뢰성에 관한 것이다. 깨지기 쉬운 물건을 다음과 같은 택배 서비스를 통해 보내는 것을 상상해 보라:
- 배달 확인
- 손실 시 재전송
- 순서 유지
그것이 TCP이다. 대부분의 API는 아래와 같은 이유로 TCP 위에서 동작한다:
- 메시지가 정확히 도착한다
- 아무것도 조용히 손실되지 않는다
일부 옵션보다 느리지만 신뢰할 수 있다.
UDP – 빠르지만 보장은 없음
UDP는 반대 접근 방식입니다. 도착 여부를 확인하지 않고 메시지를 빠르게 전송합니다.
방 안에서 정보를 외치는 것을 상상해 보세요: 일부 사람은 놓칠 수 있지만 빠릅니다.
완벽함보다 속도가 더 중요한 경우에 사용
- 영상 통화
- 실시간 스트리밍
- 온라인 게임
API는 UDP를 직접 사용하는 경우는 드물지만, 실시간 데이터 기반 시스템에서는 종종 사용됩니다.
HTTP/3 (QUIC) – 현대적이고 빠른 경로
HTTP/3는 UDP 위에서 동작하는 최신 HTTP 버전입니다.
핵심 아이디어
- 지연 시간 감소
- 네트워크 문제에서 더 빠른 복구
다음에 유용합니다:
- 모바일 앱
- IoT 디바이스
- 실시간 경험
API 관점에서는 대부분 백그라운드에서 이루어집니다.
SMTP 및 FTP – 특수 목적 메신저
특정 작업을 위해 존재하는 프로토콜이 있습니다.
- SMTP – 이메일을 위해 설계되었습니다.
- FTP – 파일 전송을 위해 설계되었습니다.
이들은 일반적인 API 통신 도구는 아니지만, 시스템 간 구조화된 통신을 나타내며 API와 마찬가지로 엄격한 규칙을 따릅니다.
결론
APIs는 시스템 간에 마법처럼 떠다니는 것이 아닙니다. 다음과 같은 프로토콜을 사용하여 이동합니다:
- HTTP / HTTPS
- WebSocket
- TCP / UDP
- HTTP/3 (QUIC)
- SMTP / FTP
문서는 다음을 알려줍니다:
- 사용되는 프로토콜은 무엇인지
- 기대되는 동작은 무엇인지
- 통신이 즉시인지 지연되는지
- 일회성인지 지속적인지
이러한 명확성이 없으면 팀은 추측하게 되고, 추측은 취약한 시스템을 초래합니다.
문서화가 중요한 이유
좋은 API 문서는 다음과 같은 질문에 답합니다:
- 요청을 해야 하나요, 아니면 수신해야 하나요?
- 실시간인가요, 아니면 지연된 것인가요?
- 보안이 되나요?
- 즉시 응답을 받게 되나요?
문서가 없으면 개발자는 각 버튼이 무엇을 하는지 모른 채 TV 리모컨을 무작위로 누르는 것과 같습니다.
좋은 문서는 단순히 API를 설명하는 것이 아니라, 안전하고 올바르게 통신하는 방법을 설명합니다.