restful API vs websocket

2024. 9. 25. 13:43·CS/짤막지식

웹소켓(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
'CS/짤막지식' 카테고리의 다른 글
  • 2. 자료구조 / 알고리즘 - 코드
  • WebRTC with ChatGPT
  • 2. webRTC의 SDP, ICE, 시그널링에 대해서
  • 1. webRTC 기초 정리
복복씨
복복씨
개발자여, 사고하라 !
  • 복복씨
    정리노트
    복복씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (118)
      • 개발새발자 (21)
        • 의 삶 (7)
        • 의 회고 (9)
        • 의 낙서장 (5)
        • 영어 (0)
      • FrontEnd (1)
        • React (1)
      • Flutter (38)
        • 새싹 (5)
        • Dart (8)
        • Flutter (14)
        • iOS 에서 Flutter 로 전환하며 (2)
        • 챗지피티랑놀.기 (3)
        • 하루 한 입 플러터 (2)
      • CS (7)
        • 짤막지식 (6)
      • IOS (6)
        • Swift (0)
        • UIKit (1)
        • SwitUI (4)
      • 머신러닝-딥러닝 (28)
        • 논문리뷰 (3)
        • study (16)
        • Kaggle (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    새싹
    깊은참조
    flutter 애니메이션
    runzonedguarded
    코드 결합도
    플러터 di
    새싹 용산
    부트캠프
    schedulemicrotask
    expando
    futurerecord2
    IOS
    플러터 새싹
    Flutter Lifecycle
    한주 회고
    용산캠
    flutter lottie
    dart
    플러터
    시그널링데이터
    FLUTTER
    swiftui 플러터
    테킷 앱스쿨
    멋쟁이 사자처럼
    사그널링서버
    핫 리로드
    unawaited
    getit
    새싹 플러터
    initState()
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
복복씨
restful API vs websocket
상단으로

티스토리툴바