| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- SQL #PostgreSQL
- Github
- Python
- fashionmnist
- mnist
- Asyncio
- 시계열데이터
- aiohttp
- 특정값지우기
- version_error
- ngrok
- REST_API
- 깃허브
- AI #RNN #LSTM #LSTMP #인공지능 #언어학습 #순차학습
- 파이썬
- 판다스 #Pandas #DataFrame #Statistics #통계 #파이썬 #Python #Resample
- pandas #python #excel #판다스 #파이썬 #엑셀저장 #xlsxwriter
- python #pandas #data_preprocessing #data_process
- AI #Inductive_Bias #Relational_inductive_bias
- 깃
- tensorflow #tensorflow-gpu #python #ubuntu #텐서플로우
- pandas #python #date #datetime
- tf.where
- 비동기모듈
- SQL #python #MySQL #PostgreSQL
- TensorFlow
- 선형회귀
- MachineLearning
- pandas #ewma #python #지수이동가중평균 #파이썬 #판다스 #ema #ewm
- git
- Today
- Total
린스토리
[이론] RestAPI와 Websocket 본문
ML 모델을 서빙하기 위해 RestAPI로 만들어 배포하고자 했다. 이 과정에서 ML 모델을 모니터링 하는 시스템을 직접 구축하고자 했고, 실시간으로 Train의 결과를 뽑아 제대로 학습이 이루어지는지 확인하고 싶었다.
실시간 값 변동에 따라 출력값이 나오도록 하는 방법을 찾다가 Websocket을 알아보게 되었고, 공부하는 겸 한 번 더 정리해 기록을 남기기로 했다.
API
API는 어플리케이션 프로그래밍 인터페이스(Application Programming Interface)의 줄임말로, 어플리케이션 소프트웨어를 구축하고 통합하는 정의 및 프로토콜 세트이다.
API의 가장 핵심은 "호출"과 "응답"이다.
예를 들어, 우편번호 찾기를 한다고 했을 때, 클라이언트는 '도로명 주소'를 입력해 서버에게 우편번호를 찾아달라고 "요청, 호출"한다. 그러면 서버는 클라이언트에게 받은 '도로명 주소'를 기반으로 '우편번호'를 찾아서 클라이언트에게 "응답"해준다.
즉, API는 사용자가 원하는 정보를 얻을 수 있도록 서버와 연결해주는 역할을 하는 것이다.

RestAPI
RestAPI(Representational State Transfer API)는 그럼 무엇일까?
REST를 기반으로 만들어진 API를 의미하는데, 여기서 REST는 무엇인지 알아보자.
REST는 Representational State Transfer의 약자로 '자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미한다.'
좀 더 구체적으로 설명하면,
HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD(Create, Read, Update, Delete) Operation을 적용하는 것을 의미한다.
RestAPI 장점
- HTTP 프로토콜의 인프라를 그대로 사용하므로 RestAPI 사용을 위한 별도의 인프라를 구축할 필요가 없다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다,
- RestAPI 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
- 서버와 클라이언트의 역할을 명확하게 분리한다.
RestAPI 단점
- 표준이 존재하지 않아 정의가 필요하다.
- 사용할 수 있는 메소드가 POST, GET, PUT, DELETE 4가지 밖에 없다.
- HTTP Method 형태가 제한적이다.
RestAPI는 호출에 응답하는 형식으로, 한 번 호출을 해서 응답을 해주면 통신이 지속되지 않는다. 그래서 주식 호가를 실시간으로 받아오듯, ML train과정에서 예측값과 정답값을 실시간으로 받아오고 싶었는데 RestAPI로는 구현할 수가 없었다. 이를 해결하고자 찾다가 웹소켓을 알게되어 정리해본다..!
Websocket
웹소켓은 하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜이다.
Transport protocol의 일종으로 서버와 클라이언트 간의 효율적인 양방향 통신을 실현하기 위한 구조이다.
RestAPI로 홈페이지 호출을 요청했을 때, 그 페이지는 로딩 후 변화가 없다. 하지만 웹소켓을 사용하면 새로고침을 하지 않아도 최신 데이터가 반영된 웹을 보여주게 된다.
웹소켓은 서버와 클라이언트 간에 Socket Connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술이다. Real-time Web Application 구현을 위해 널리 사용되어지고 있다.
이런 차이는 프로토콜에서 나온다. 웹소켓 프로토콜은 접속 확립에 HTTP를 사용하지만, 그 후 통신은 웹소켓 독자의 프로토콜로 이루어진다. 장시간 접속을 전제로 하기 때문에 접속한 상태라면 클라이언트나 서버로부터 데이터 송신이 가능한 것이다.
작동원리
서버와 클라이언트 간의 웹소켓 연결은 HTTP 프로토콜을 통해 이루어진다. 만약 연결이 정상적으로 이루어진다면 서버와 클라이언트 간에 웹소켓 연결이 이루어지고 일정 시간이 지나면 HTTP 연결은 자동으로 끊어진다.
이제 웹소켓을 적용해서 실시간으로 데이터를 받아와 그래프를 그릴 수 있도록 만들 것이다. 처음 해보는 것이라서 얼마나 걸릴진 모르지만 차근차근 해보자..!
'Python > API' 카테고리의 다른 글
| [Asyncio] 동기와 비동기 차이점 및 Asyncio란? (0) | 2022.08.16 |
|---|---|
| [Python 3.X aiohttp error] "aiohttp.client_exceptions.ServerDisconnectedError: Server disconnected" 해결 (0) | 2022.08.11 |
| [Flask & Ngrok] 포트포워딩 없이 외부에서 로컬 서버로 접속하기 (0) | 2022.08.04 |