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 기초 정리
복복씨
복복씨
개발자여, 사고하라 !
  • 복복씨
    정리노트
    복복씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (119) N
      • 개발새발자 (22) N
        • 의 삶 (7)
        • 의 회고 (9)
        • 의 낙서장 (6) N
        • 영어 (0)
      • Flutter (39)
        • 새싹 (5)
        • Dart (8)
        • Flutter (15)
        • iOS 에서 Flutter 로 전환하며 (2)
        • 챗지피티랑놀.기 (3)
        • 하루 한 입 플러터 (2)
      • CS (7)
        • 짤막지식 (6)
      • IOS (6)
        • Swift (0)
        • UIKit (1)
        • SwitUI (4)
      • 머신러닝-딥러닝 (28)
        • 논문리뷰 (3)
        • study (16)
        • Kaggle (9)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    unawaited
    futurerecord2
    flutter 애니메이션
    schedulemicrotask
    runzonedguarded
    플러터 di
    FLUTTER
    swiftui 플러터
    ai asmr
    플러터 새싹
    사그널링서버
    새싹 플러터
    용산캠
    핫 리로드
    유리과일
    veo3
    expando
    getit
    코드 결합도
    새싹
    플러터
    부트캠프
    유리과일 자르기
    멋쟁이 사자처럼
    dart
    IOS
    깊은참조
    새싹 용산
    시그널링데이터
    asmr 프롬프트
  • 최근 댓글

  • 최근 글

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

티스토리툴바