웹소켓(WebSocket)과 RESTful API는 모두 클라이언트와 서버 간의 통신을 위한 기술이지만, 그 작동 방식과 사용 사례에서 여러 가지 차이점이 있다. 아래에서 두 기술의 차이점에 대해 자세히 설명하겠다.
1. 통신 방식의 차이
RESTful API
- 요청-응답 모델(Request-Response Model): 클라이언트가 서버에 요청(Request)을 보내면 서버가 응답(Response)을 반환하는 방식이다.
- 통신은 비동기적이지만, 단방향 통신이다. 즉, 클라이언트가 요청할 때만 서버가 응답을 보낼 수 있다.
- HTTP 프로토콜을 기반으로 하며, 각 요청은 독립적이고 이전 요청과의 상태를 유지하지 않는 무상태성(stateless)을 갖는다.
- 각 요청마다 새로 연결을 열고 닫는 방식으로 작동한다.
WebSocket
- 양방향 통신(Bi-directional Communication): 클라이언트와 서버가 연결되면 상호 간에 자유롭게 데이터를 주고받을 수 있다.
- 서버와 클라이언트 간에 지속적인 연결(persistent connection)을 유지한다.
- 한 번 연결되면 클라이언트나 서버가 먼저 데이터를 전송할 수 있어 실시간 통신에 매우 적합하다.
- HTTP 핸드셰이크를 통해 연결을 시작하지만, 이후에는 자체 WebSocket 프로토콜로 통신을 계속한다.
2. 사용 사례의 차이
RESTful API가 적합한 경우
- 일반적인 데이터 요청 및 CRUD 작업에 적합하다. 예를 들어, 사용자 정보 가져오기, 데이터베이스에 데이터 추가, 수정, 삭제 같은 경우에 사용된다.
- 앱이 실시간 업데이트가 필요하지 않고, 클라이언트에서 요청할 때만 데이터가 필요할 때 적합하다.
- 짧은 통신이거나 요청과 응답 간에 긴 시간이 걸릴 필요가 없는 상황에서 주로 사용된다. 예를 들어, 블로그 게시글 읽기, 상품 목록 조회 등이 있다.
WebSocket이 적합한 경우
- 실시간 데이터 업데이트가 필요한 경우에 적합하다. 예를 들어, 채팅 애플리케이션, 온라인 게임, 주식 시세 업데이트, 스포츠 경기 스코어 등과 같은 경우다.
- 클라이언트와 서버 간에 지속적인 데이터 교환이 필요한 경우에 적합하다.
- 양방향 통신이 필요할 때 사용한다. 클라이언트뿐만 아니라 서버도 임의로 데이터를 클라이언트에게 보낼 수 있어야 할 때 적합하다.
3. 통신 프로토콜의 차이
- RESTful API: HTTP/HTTPS 프로토콜을 사용한다. 요청마다 연결을 열고 닫으며, 각 요청은 독립적으로 작동한다.
- WebSocket: 자체 WebSocket 프로토콜을 사용하며, 한 번 연결된 후에는 지속적으로 데이터를 주고받을 수 있는 상태를 유지한다.
4. 데이터 전송 효율성
- RESTful API: 각 요청마다 HTTP 헤더를 포함한 전체 요청을 보내야 하므로, 오버헤드가 발생한다. 데이터 전송량이 많으면 비효율적이다.
- WebSocket: 연결이 지속되기 때문에 오버헤드가 적다. 데이터를 교환할 때 헤더를 반복적으로 보내지 않으므로 더 빠르고 효율적이다.
5. 보안 측면
- RESTful API: HTTPS를 통해 암호화되어 통신이 이루어진다. 무상태성이므로 각 요청마다 인증 정보(토큰, 쿠키 등)를 포함해 보낸다.
- WebSocket: 보안을 위해 WSS(WebSocket Secure)를 사용할 수 있으며, 이는 HTTPS와 유사한 방식으로 암호화된다. 하지만 연결 후에는 지속적인 상태를 유지하기 때문에 인증 및 권한 관리를 명확하게 해줘야 한다.
6. 확장성 측면
- RESTful API: 수평적 확장(서버를 여러 대로 늘리는 방식)에 매우 적합하다. 요청이 무상태성이기 때문에 서버가 여러 대여도 문제없이 확장 가능하다.
- WebSocket: 지속적인 연결을 유지하기 때문에 수평적 확장이 다소 복잡하다. 서버 간에 연결을 공유하거나 관리하는 것이 필요할 수 있다.
차이점 요약
특징 | RESTful API | WebSocket |
---|---|---|
통신 방식 | 단방향 요청-응답 (Request-Response) | 양방향 실시간 통신 (Bi-directional) |
연결 상태 | 무상태 (Stateless) | 상태 유지 (Stateful, Persistent) |
데이터 전송 | 요청마다 연결 생성 및 해제 | 한 번 연결 시 지속적인 데이터 교환 |
사용 프로토콜 | HTTP/HTTPS | WebSocket (ws:// 또는 wss://) |
적합한 사용 사례 | 일반적인 데이터 조회 및 업데이트, CRUD | 실시간 채팅, 주식 시세, 온라인 게임 |
확장성 | 수평적 확장에 적합 | 수평 확장이 상대적으로 복잡 |
결론
- RESTful API는 일반적인 데이터 통신, CRUD 작업, 비실시간 통신 등에 적합한 반면, WebSocket은 실시간 양방향 통신이 필요한 상황에 적합하다.
- 앱에서 실시간으로 업데이트되어야 하는 데이터(예: 채팅, 주식 시세)를 처리할 때는 WebSocket이 더 효율적이고, 요청-응답 형태의 비실시간 데이터 처리에는 RESTful API가 더 적합하다.
각각의 기술은 장단점이 있으며, 애플리케이션의 요구사항에 따라 어떤 기술을 사용할지 선택하는 것이 중요하다. 경우에 따라 두 가지를 함께 사용하는 것도 좋은 선택일 수 있다.
'CS > 짤막지식' 카테고리의 다른 글
2. 자료구조 / 알고리즘 - 코드 (1) | 2024.10.28 |
---|---|
WebRTC with ChatGPT (2) | 2024.10.02 |
2. webRTC의 SDP, ICE, 시그널링에 대해서 (0) | 2024.09.20 |
1. webRTC 기초 정리 (0) | 2024.09.19 |
변수 쓸 때 숫자는 Int, Double로 다양하게 받으면서, 왜 문자는 String으로 퉁치죠? (0) | 2024.07.30 |