2022. 10. 18. 20:06ㆍ강의 내용 정리/풀스택서비스네트워킹
HTTP/1.1
1. HTTP/1.1의 이해
1) Web Client and Web Server
서버에서 가장 많이 사용하는 방식은 HTTP이다.
클라이언트가 request를 보내면 서버는 response를 보낸다.
(1) Resources
클라이언트가 요청하고 서버가 제공하는 자료
Static content
클라이언트로부터 요청을 받았을 때 이미 자료가 있는 경우
Dynamic content
클라이언트로부터 요청을 받았을 때 자료를 생성하는 경우
문제) Youtube 채널에서 동영상을 보는 경우 이는 Static인가 Dynamic인가?
동영상 파일 또한 이미 만들어진 자료를 전달하는 경우에는 이는 Static이다.
문제) 주주가 본인의 주식 가격을 요청하는 경우 이는 Static인가 Dynamic인가?
이는 요청을 받은 시점에 주식 가격을 확인해야하기에 Dynamic이다.
(2) Media Type
전달한 Content가 어떤 컨텐츠인지 알려주는 역할을 한다. Static, Dynamic 모두 이 방식을 사용한다. 해당 방법은 이메일에서 차용한 MIME 방법이다.
Content-type
image인데 jpeg 형태임을 알려준다.
Content-length
몇 바이트만큼 전송했는지 알려준다.
이메일에서의 MIME
첨부파일을 설명하기 위한 용도로 extension한 것을 의미한다.
(3) URI
서버에 Static하거나 Dynamic한 Contents를 요청하기 위해 서버를 식별할 식별자가 필요했다. 이를 URI라고 한다. URI를 위한 방법으로 두 가지 URL, URN을 고안했다.
(a) URL
xxx.com/index.html
-> xxx.com 서버의 루트 디렉토리의 index.html 파일을 요청한다.
/을 통해 위치 정보를 보내기 때문에 이를 주소로 표현한다.
이렇게 어떤 컴퓨터의 어떤 파일을 원하는지 보내는 방식은 URL 방식이다.
(b) URN
인터넷의 모든 컨텐츠에 고유한 이름을 준다. 즉, 전세계의 모든 서버는 모두 다른 이름을 가져야하기 때문에 이는 구현하기 어렵다.
2) Transaction
(1) Requests and Reponses between HTTP Client/Server
클라이언트
Domain name이라는 것을 보내 요청한다.
GET 메소드를 사용해서 어떤 파일을 원하는지 설명하고 어떤 프로토콜(HTTP/1.0)을 사용하는지 알린다.
cf) GET은 서버에게 파일을 달라고 요청하는 메소드를 의미한다.
서버
response에는 MIME을 준수해서 컨텐츠를 보낸다.
응답을 보낼 때 HTTP/1.0 200 ok 응답을 보낸다.
- 200은 응답을 보낸다는 의미로서 컴퓨터가 인식하기 위한 방법
- ok는 사람들이 인식하기 위한 방법
200 ok를 보고 사람과 프로그램이 모두 인식할 수 있도록 한다. 사람이 보면 바로 이해할 수 있게하라는 팀버너스리의 원칙을 따랐기 때문에 이를 둘 다 사용하고 있다.
(2) HTTP Methods
GET: 클라이언트가 서버에 자료를 요청할 때 사용하는 메서드
PUT: 클라이언트가 서버에 자료를 업로드할 때 사용하는 메서드
DELETE: 클라이언트가 서버의 자료를 삭제할 때 사용하는 메서드
POST: 클라이언트가 글자를 서버에게 전달할 때 사용하는 메서드
Create, Read, Update, Delete를 HTTP 방식에서 사용하는 것이 Restful API이다. 위와 같이 메서드들을 사용하여 서버 프로그래밍이나 데이터 센터 프로그래밍에서 통신을 한다.
(3) Status Codes
Response
- 404는 서버는 정상 작동하지만 위치정보를 잘못 입력했을 때 해당 코드가 전달된다.
- 5xx는 서버가 정상적으로 작동하지 못할 때의 코드이다.
- 302는 redirect이다.
(4) Web Pages
거대한 프로그램의 기능을 쪼개서 사용하는 경우가 많다. 즉, 서비스는 마이크로 서비스가되고, 이를 합쳐서 거대한 프로그램을 만들기도 한다. 각각의 마이크로 서비스는 기능이 매우 적으니 이를 서버리스에 올리는 것이 트렌드이다. 소규모의 팀들이 각자 분화하기 때문에 자유도가 늘어나고, 분야별 특성에 맞는 언어를 선택해 개발을 하거나 등등의 일들이 가능해졌다.
네이버 홈페이지를 보더라도 하나의 자원만 요청하는 것이 아니라 매우 많은 요청이 발생하는 것을 알 수 있다. 각각의 요소들을 여러가지 요청하는 것을 알 수 있다.
cf) 구글을 제외한 나머지 유명 사이트는 대부분 HTTP 2를 사용한다.
(5) Request and Response
Accept는 옵션으로 어떤 것을 받을 수 있는지 나타낸다. text/*는 텍스트 형태의 어떤 것이든지 받을 수 있다.
Accept-Language는 어떤 언어를 사용하는지 정보를 넣는다.
Content-type: text/plain은 일반적인 text를 나타낸다. text/html은 html 형태를 전달한다.
cf) 팀버너스리의 원칙에 의거해 사람이 눈으로 인식할 수 있다.
- user-agent는 어떤 버전을 사용하는지 알려준다. 서버는 이 정보를 확인하고 데스크탑으로 보낼지, 모바일로 보낼지를 설정한다. 또한 이 내에서 어떤 디바이스에 맞춰서 보낼지를 정해야한다.
- Date를 통해 답하는 시간을 보낸다.
- 해당 예시는 Server 정보를 보내지만 대부분은 보안 때문에 이를 보내지 않는다.
- Last-modified는 전달하는 파일이 최종적으로 언제 수정됐는지를 보낸다.
cf) 최근 해킹은 운영체제나 커널이 아니라 웹이나 http에서 많이 발생한다.
3) Transport layer under HTTP
(1) HTTP가 TCP를 사용한 이유
초반에는 대부분의 통신 프로그램은 TCP를 사용했기에 HTTP 1.0 또한 TCP를 사용한다. 이는 위의 특징들을 가지고 있다. 이후 HTTP가 매우 중요하게 생각이 되고 TCP는 아래로 내려갔다. 이에 따라 HTTP 3는 TCP를 사용하지 않게 된다.
(2) HTTPS
http1.0은 보안이 디폴트가 아니다. https는 보안이 추가되었다.
(3) Connection Process
DNS는 도메인 이름을 해석한 뒤 IP address를 전달하는 역할을 한다.
도메인 네임을 주소창에 쳤을 때는 DNS 서버를 통해 도메인 네임을 IP address로 변환하고 IP address를 통해 TCP 연결을 한다. 그 이후에 HTTP를 통해 요청을 한다.
구글은 위의 과정을 줄이기 위해 검색창에 내용을 검색할 때 실시간으로 DNS를 미리 작업하도록 설정해서 과거 기록과 최근 트렌드를 반영해서 미리 주소를 구해 DNS 속도를 줄이고자 한다.
4) Architectural Components of the web
(1) Proxy
클라이언트와 웹서버 사이에 존재하는 서버
보안
대부분의 웹서버는 보안을 위해 프록시를 설정하는 경우가 많다. 이를 통해 하지 말아야할 일들에 대해 설정을 하는 경우가 많다.
성능 최적화
또한 Performance Optimization을 위해 프록시를 설정하는 경우가 많다. 이미 응답했던 것들에 대해 다시 보내주는 작업을 하는 경우 등등이 가능하다. 또한 클라이언트에 커스터마이징해서 처리하도록 하는 로직도 프록시에 들어간다.
ex) 포르노 사이트 차단도 국가적 차원의 프록시이다.
5) Methods
(1) GET
Contents를 요청할 때 사용한다.
(2) HEAD
자원의 헤더 정보를 응답받는다.
클라이언트가 아직 그 파일이 있는지 확인하거나 그 파일의 사이즈 등등 파일의 기타 정보를 알고자 할 때 이를 보낸다. 또한 Content에 대해 최종 수정 날짜를 확인하고 싶을 때 이를 보낸다. 만약 이전에 가져온 정보가 바뀌지 않으면 브라우저의 캐쉬에서 이를 전달하는 등의 동작이 가능하다.
(3) PUT
PUT을 마치면 서버는 response를 할 때 업로드한 파일에 접근하기 위해 어떻게 접근해야하는 지에 대한 URL을 전달한다.
(4) POST
POST는 텍스트를 보낼 때 주로 이용한다.
입력 박스가 있어서 이를 전달하거나 체크박스를 체크하는 경우가 이에 해당한다.
(5) TRACE
프록시의 정보를 알고자할 때 이를 보낸다. 주로 클라이언트-서버 관계에서 사용하기보단 주로 디버깅 용도로 이를 사용하는 경우가 많다. HTTP 1.0에서보다 2.0 이후에 전면에 등장해서 브라우저-프록시-서버 간의 정보를 암호화함으로서 이를 보지 못하게 한다. 사용자입장에서는 몰라도 되지만 개발을 할 때에는 이를 주의해야한다.
HTTP 1.0과 HTTP 2.0에서의 프록시 차이는 클라이언트와 서버에서의 정보를 암호화를 하는 데에 있다.
(6) OPTIONS
OPTIONS를 보내면 서버가 어떤 메서드를 지원하는지 알려준다.
개발자가 서버를 확인하고 싶을 때 이 옵션을 사용한다.
6) Status Codes
(1) Redirect
request가 아닌 response의 입장이다. 요청하는 것을 이해하지만 301 코드를 보내며 location 필드를 보내 해당 위치로 가서 request를 하도록 한다.
(2) If-Modified-Since
해당 날짜 이후로 수정된 내용이 있으면 이를 보내달라고 보낸다. 이를 통해 캐쉬의 기능을 사용한다. 프록시가 있다면 이를 대행해서 작업해줄 수 있다.
cf) 만든 서버가 잘 돌아가는지 디버깅을 하거나, 서버에 requests를 보내는 방법
- 브라우저에서 url을 입력해 get 요청을 보낸다.
- 파이썬에서 코드를 실행시키는 방법이 있다.
- 파이썬에서 코드를 자동화해서 보낼 수 있다.
- curl을 사용할 수 있다.
2. HTTP/1.1 프로그래밍
파이썬은 HTTP 1.1까지는 스탠다드 라이브러리로 제공한다.
1) HTTP 1.1을 지원하는 모듈
(1) urllib
url에 대해 다룰 수 있도록 도와주는 모듈
(2) http.client
HTTP에서 client 입장에서 짤 수 있도록 도와주는 모듈
(3) requests
사용하기 편하게 만든 모듈
(4) http.server
HTTP에서 server 입장에서 짤 수 있도록 도와주는 모듈
ThreadingHTTPServer도 있고. BaseHTTPRequestHandler도 있다.
멀티 쓰레드 환경에서도 잘 사용할 수 있도록 한다.
cf) client 디버그를 위한 간단한 서버 구동 방법
python -m http.server 를 쳐서 실행시킬 수 있다. 또한 실행됐을 때의 위치, 포트번호 등등도 지정할 수 있다.
HTTP sample code의 목적은 HTTP 클라이언트와 서버가 정보를 주고받는 것이다. 따라서 홈페이지, 웹서버로 구축하고자 한다면 장고를 사용하면 된다.
2) HTTP GET & POST server example
- 위의 두 방법은 웹 브라우저에서 실행한 것이다. 이는 get 밖에 안된다. get 모듈을 체크하기 위해서 웹브라우저를 사용할 수 있다.
- 아래의 방법은 파이썬에서 직접 POST 요청을 보내는 방식이다.
GET 메소드를 사용하지만 단순히 정보만 교환하는 식으로 진행된다. URL 창에 주소를 적는 것은 GET밖에 안된다. 하지만 requests 모듈을 사용해서 post를 사용할 수 있다. GET을 디버그할 때 웹 브라우저를 사용한다.
cf) favicon
웹브라우저 위쪽에 존재하는 아이콘이다. 이는 서버에서 이미 지정한 아이콘이니 클라이언트가 일일히 요청하지 않아도 이를 보내준다.
3) 서버 샘플 코드
- send_header에서는 해당 정보가 바로 가지는 않고, end_headers()를 해야지 해당 정보가 끝나게 된다.
- log_message는 지저분해질 것 같아 이를 멈췄다.
- simple_calc는 계산을 한다.
- parameter_retrieval은 &를 기준으로 값을 끄집어낸다. 그리고, 각각의 값을 result에 전달한다.
- 각각 html 문서가 만들어져서 실행된다. get만 요청한 경우 아래에 있는 내용이 실행된다.
- 위 쪽에 있는 것은 get요청을 했는데, simple_calc를 할 수 있도록 한다.
post를 할 경우에는 그냥 바로 simple_calc을 한다.
4) 클라이언트 코드
파이썬 프로그램으로 짜는 방식이다.
5) 실행 결과
3. 알아두면 요긴한 개발 도구
1) 알아두면 요긴한 개발 도구
(1) 브라우저의 개발자도구
브라우저에서 서버의 디렉토리도 볼 수 있도록 지원 가능하다.
(2) curl
- 많은 개발자들이 선호하며, 전통적이고 매우 넓은 상황을 제공한다.
- HTTP 1.1, HTTP/2, HTTP/3까지 모두 지원한다.
- FTP, FTPS, IMAP(서버와 연동된 이메일), MQTT(단문 형식으로 보내는 방식), POP3, TELNET 등등 다양한 것들을 지원해준다.
- HTTP를 curl로 어떻게 사용하는지에 대한 설명이 책에도 있다.
curl 'HTTP URL' 명령어를 입력하면 html 문서가 전달된다.
cf) HTTP는 어떻게 영상을 스트리밍 하는가?
유튜브에 영상을 업로드하면 해당 영상을 여러 해상도로 변환작업을 한다. 본인이 올린 것을 기반으로 표준 해상도를 지원한다. 영상을 보는 사람의 통신 선로의 속도나 통신 디바이스(휴대폰)가 받아들일 수 있는 수준에 맞게 통신을 해야하기에 위와 같이 여러 해상도로 만든다.
유튜브 해상도는 좋게 지원도 하다가 나쁘게 지원도 하기도 한다. 즉, 하나의 영상이 통채로 전달되는 것이 아니라 부분부분 바뀔 수 있다. 이는 서버에서 클라이언트의 통신 속도를 고려하여 이를 맞춰 보낸다. 즉, 서버에서는 영상이 있으면 그걸 통채로 저장하는 것이 아니라 서로 다른 해상도로 쪼갠다. 또한 각각의 해상도에 해당하는 영상도 수 초 단위의 영상으로 쪼갠다. 따라서 아래와 같이 지원도 가능하다.
위의 예시는 영상을 보다가 통신 상태가 좋아져서 이에 맞게 영상을 보여주는 예시이다. 클라이언트는 네트워크에 맞게 서버에게 정보를 요청한다. 즉, HTTP request를 끊임없이 하는 것을 알 수 있다. 유튜브는 자바스크립트를 기준으로 HTTP request를 한다.
따라서 HTTP를 가지고 영상을 보낼 때에는 단순히 파일을 보내주고 파일을 가져오는 방식이 아니다. 위와 같이 HTTP live stream에 기반한 것이다.
라이브 영상할 때에는 해상도를 변환하기 위한 작업이 오래 걸리기 때문에 위와 같이 할 수 없다. 따라서 라이브 영상은 쪼개기는 하지만 하나의 해상도로 보내는 경우가 많다. 많은 사람들이 볼 수 있어야하기에 대부분 낮은 해상도를 하는 경우가 많다. 하지만 이 경우에도 HTTP live stream으로 한다.
픽사는 렌더링 회사이다. 애니메이션을 만들 때 정말 오랜 시간이 걸리게 된다. 오픈 소스 소프트웨어 중에 할리우드에서 특수효과 관련 오픈소스를 만든 것이 있다.
스카이라이프에서 위성 통신을 한다면 암호화, 해당, 느린 위성 통신이라는 특징 때문에 속도가 느리다.
2) 알아두면 요긴한 단어들
(1) SOA(Service Oriented Architecture)
모놀리딕 프로그램
크고 복잡한 프로그램을 하나의 프로그램으로 만들었다.
SOA
TCP/IP 통신이 가능하기에 프로그램을 조금 쪼개서 통신을 한다.
Microservices
SOA와 마찬가지로 네트워크로 연결하지만 더 잘게 잘라서 사용한다. SOA와 구분하기 어려울 수 있지만 현재는 Microservices를 사용한다. 서버가 API를 호출하면 이에 해당한 응답을 주는 것은 서버리스에서 사용한다. 서버리스는 마이크로서비스와 연계되어서 이를 사용한다.
서비스 블럭 단위를 분리해서 이를 기준으로 프로그램을 만들었다. 서로 다른 컴퓨터에 나눠서 만들었기에 이를 필요에 따라 통신을 통해 조합할 수 있도록 했다.
(2) Microservice
쿠버네티스는 잘게 쪼갠 프로그램을 실행시켜줄 수 있도록 돕는다. 마이크로 서비스 아키텍쳐로 만든 프로그램을 쿠버네티스에 올려 사용한다.
마이크로 서비스는 두가지 기반 기술 위에서 사용된다.
이는 바로 버추어 머신 위에서 동작하는 클라우드 컴퓨팅 기술이다. 필요한 만큼의 CPU나 디스크를 활용하고, 스케일 업, 스케일 다운 등등이 가능하다.
(3) OpenStack
사내에서의 클라이드 컴퓨팅을 하도록 돕는 나사가 만든 오픈소스 소프트웨어이다. 이는 파이썬을 활용해서 만들었다. 이에 따라 서버 개발자에서 파이썬 개발자의 수요가 높아졌다. 또한 수많은 디스크와 컴퓨터를 사용할 수 있게 됐으니 빅데이터 프로세싱이다. 그 이전에는 데이터를 저장만 했다.
cf) 하둡: 여러 개의 CPU가 병렬처리를 한 뒤, 하나로 합쳐서 사용한다.
(4) 쿠버네티스와 도커, 클라우드 네이티브
AWS와 같은 클라우드 서비스를 사용하면 리눅스 위에 버추어 머신을 올려야한다. 따라서 성능이 떨어지기에 이 대신 컨테이너 기술을 사용해서 수많은 컴퓨터 위에 설치하고 삭제할 수 있도록 돕는다. 즉, 버추어머신 -> 컨테이너 기술로 트렌드가 바뀌었다. 이를 돕는 것이 도커이다. 수천 수만대에서 CPU와 디스크에 있는 프로그램들을 설치/삭제할 수 있도록 돕는 것이 쿠버네티스이다. 이를 돕는 것은 오케스트레이션이라는 기술이다.
클라우드 네이티브
프로그램을 개발할 때 수천수만개의 CPU와 디스크를 마이크로 서비스 방식으로 개발하고 운영할 수 있도록 클라우드를 제공하는 것이다.
cf) 리눅스 컨테이너는 리눅스에서 소프트웨어를 설치하고 삭제할 수 있도록 돕는 기술이다.
버추어 머신 -> 컨테이너/오케스트레이션
리눅스 위에서 리눅스 컨테이너는 그 위에 리눅스 엔진이 올라간다. 반면 버추어 머신은 그 위에 OS가 돌아간다. 만약 리눅스가 아닌 도커에서는 컨테이너를 제공할만한 수준의 리눅스가 들어가서 그 위에서 돌아가도록 했다. 즉, 버추어 머신과 도커와의 가장 큰 차이점은 Guest OS가 없다는 점이다.
(5) 윈도우즈와 리눅스
윈도우즈는 WSL2 기반부터는 리눅스 커널을 사용할 수 있도록 했다. 또한 안드로이드도 운영체제로 받아들이기 시작했다. ex) google play game beta
요약하자면 서비스를 잘게 쪼개서 API 수준으로 운영하다가 오픈스택이 등장해 여러 CPU/디스크를 사용할 수 있게 됐다.
PolyGot
하나의 프로젝트를 할 때 복수의 언어로 개발하여 사용하게 되었다.
4. HTTP/1.1 기반 정보 교환 (JSON)
0) 들어가기 전 Soap
rest, restful로 넘어가기 전 단계로 마크업 랭귀지로 파일을 만들어서 함수 이름이나 파라미터 등등을 전달하는 방식
마크업 랭귀지로 작성할 경우에는 파싱 작업을 해야하기에 프로세싱 작업이 오래걸린다. 또한 XML 문서 자체가 매우 방대하기에 규격대비 가성비가 좋지 않다.
1) JSON이란?
자바스크립트 언어의 데이터 표현 방식으로 웹 브라우저에서는 JS 번역기를 내장했기에 호환성이 매우 높다.
프로그래밍 언어이기에 문자열로 이뤄져있고, JSON에 있는 데이터 유형은 대부분 다른 언어의 데이터 유형으로 1대1 매칭이 가능하다. 이에 따라 프로그래밍 언어를 가지고 프로그램끼리 데이터를 주고받을 수 있도록 한다.
- JSON을 주고 받을 때에는 파일 형태로 주고 받는다.
- 메서드는 표현이 불가능하다. 큰 따옴표 형태로 작성해야한다.
무상태
클라이언트가 자원을 요청하고 응답을 하면 그에 대한 정보를 남기지 않는다.
2) JSON Data Format
파이썬의 딕셔너리와 리스트의 합처럼 이뤄져있다.
실제 데이터를 검색할 때에도 파이썬에서 딕셔너리나 리스트의 원소를 검색하는 것과 동일하다.
하지만 실제로는 JSON 파일을 파이썬에서 사용할 때에는 파이썬의 데이터 타입과 1대1로 변환해서 사용한다.
3) JSON Standard Library in Python
(1) import json
json.load()
json 화일 -> dict 데이터
json.loads()
json 문자열 -> dict 데이터
json.dump()
dict 데이터 -> json 포맷 화일
json.dumps()
dict 데이터 -> json 포맷 문자열
4) example
(1) json.load()
(2) json.dump()
(3) json.dumps()
(4) json.loads()
5. HTTP/1.1 기반 정보 교환(RESTful)
HTTP 메서드에 따라 정보를 교환하는 방식
1) RESTful이란?
(1) REST란?
HTTP의 기본 명령을 사용해서 서버의 정보를 만들고 업데이트를 하는 HTTP에 기반한 데이터 관리 방법에 대한 철학
(2) RESTful이란?
REST의 철학에 맞춰 각 구현 주체가 맞춘 지침
REST와는 다르게 코드가 나오고, 이를 어떻게 구현해야하는지 등등에 대해 구체적인 내용들이 나온다.
서버 API가있는 경우에는 RESTful한 내용을 볼 수 있다.
ex) 우리 회사에서 데이터를 업데이트하는 것은 PUT 메서드를 가지고 데이터를 생성할 것이다.
(3) REST 구조에 대한 제한 조건
stateless
HTTP를 의미한다. (기록을 남기지 않는 형식)
계층화
프록시에 대한 내용이다.
Code on demand
코드를 전달하면서 실행하도록 하는 경우는 많지 않다.
클라이언트/서버 구조
RESTful에서는 기능에 따라 클라이언트와 서버를 나눈다.
즉, API별로 요청하는 측이 클라이언트, 이를 제공하는 측이 서버이다. 앱측면에서는 대부분 클라이언트가 많다.
url은 서버에게 정보를 제공하는 식으로 사용한다. 위의 예시에선 my_api가 디렉터리가 아니라, api를 호출하는 것을 의미한다. 따라서 서버가 지원하는 API의 기능 이름을 중심으로 이를 처리한다. 또한 목적어가 들어가서 어떤 것에 대해 해당 api를 호출하는지를 의미한다. 대부분의 put은 create로 간주한다. get은 read를 의미한다. 따라서 명확한 규칙은 없다.
통상 CRUD(Create, Read, Update, Delete)를 따른다.
JSON 포맷으로 정보를 송수신한다.
메서드를 보고 어떤 동작을 해야하는지 알 수 있고, url을 보고 누구에게 어떤 동작을 해야하는지에 대해서 알 수 있다. 또한 JSON을 가지고 통신하기에 크게 부담이 없다.
2) Flask
Python으로 만들어진 웹 프레임워크
경량화된 http 서버 프레임워크로 클라우드 환경에 친숙한 구조이다.
HTTP 라이브러리를 사용하지 않아도 이를 처리하기 쉽게 사용가능하도록 한다.
Flask를 사용한 웹서버 예시
루트 디렉토리로 요청이 오면 이를 hello 메서드를 호출하면서 리턴한다.
Flask Flask-RESTX in Python 예시
클래스를 통해 get함수를 사용하는 방식으로 사용했다. url로 키를 받은 뒤, get 메서드가 실행되면 해당 함수가 호출된다.
(1) RESTful Server 예제
MemberShipManager 클래스 내부에서 각 HTTP 메서드마다 새롭게 정의한 함수를 호출한다.
(2) RESTful Client 예제
(3) 실행 결과
필요한 부분에 대해서 오버라이드를 하면 그 외에 대한 부분은 알아서 동작하기에 간단하게 구현할 수 있다.
3) RESTful Server's Swagger UI
5000번 포트로 들어가면 서버가 어떤 API를 제공하는지 확인할 수 있다.
또한 어떤 파라미터를 받는지 등등을 알 수 있다.
이를 통해 클라이언트가 없이 테스트할 수 있다.
HTTP response의 본문도 등장한다. 웹 브라우저에서 url도 나온다. Curl을 사용하면 어떤 걸로 받을 수 있는지 얘기한다.
이렇게 자동으로 만들어준다.
4) django REST framework
장고도 REST 프레임워크가 있다. 이는 인증이나 보안적인 측면에서 Flask보단 좋다. RESTful API를 사용할 수 있다.
'강의 내용 정리 > 풀스택서비스네트워킹' 카테고리의 다른 글
풀스택서비스네트워킹(7), gRPC (0) | 2022.12.10 |
---|---|
풀스택 서비스 네트워킹, 구글은 크롬을 왜 만들었을까? (0) | 2022.12.04 |
풀스택 서비스 네트워킹(5), ZeroMQ (0) | 2022.10.13 |
풀스택 서비스 네트워크(4), Socket (0) | 2022.10.11 |
풀스택 서비스 네트워킹(3), OSI Architecture(L4) (1) | 2022.10.07 |