2023. 4. 19. 00:18ใComputerScience/FullStackProgramming
HTTP Client Modules in Python
- Standard Libraries
- urllib : URL handling module
URL์ ์ ๋ฌธ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ python ๋ผ์ด๋ธ๋ฌ๋ฆฌ - http.client : HTTP protocol client module
- urllib : URL handling module
- Non-Standard Library (recommended)
- 3rd - party
- “Requests: HTTP for Humans”
- Installation required ( pip install requests ) Elegant and simple HTTP library for Python
- import requests required
- ํด๋ผ์ด์ธํธ ์ธก์์ ์ฌ์ฉํ๋ค๋ฉด, request๋ฅผ ์ฐ์ธ์
- ํ ์ค์ด๋ฉด ๋ - ์ ๋ง ์ฝ๋ค
HTTP Server Modules in Python
- http.server - HTTP servers (standard library)
- http.server.HTTPServer ํด๋์ค
TCP/IP ์๋ฒ ๊ฐ๋ฐ๊ณผ ์ ์ฌ - http.server.ThreadingHTTPServer ํด๋์ค
- http.server.BaseHTTPRequestHandler ํด๋์ค
- Client ๋๋ฒ๊ทธ๋ฅผ ์ํ ๊ฐ๋จํ ์๋ฒ ๊ตฌ๋ ๋ฐฉ๋ฒ
- ์ถ๊ฐ์ ๊ฐ๋ฐ์ ์ ํ๋๋ผ๋ ์๋ฒ๊ฐ ๋ฌ๋ค!
- python -m http.server
- python -m http.server 8000
- python -m http.server 8000 --bind 127.0.0.1
- python -m http.server --directory /tmp/
- parameter์ ์ฃผ๊ฑฐ๋, directory ์ง์ ๋ ๊ฐ๋ฅ
- http.server.HTTPServer ํด๋์ค
HTTP์ ๋ชฉ์
- “๋ฉํฐ๋ฏธ๋์ด ์น ์ฝํ ์ธ ์ ์ก”์ด ์๋ “์ ๋ณด ๊ตํ” ์
- ์น ์ฝํ ์ธ ์๋ฒ๋ django (์ฅ๊ณ ) ์น ํ๋ ์์ํฌ ๋ฑ์ ๊ถ์ฅ
- HTTP1.1์ ๋ฌธ๋ฒ์ ์ดํดํ๋ ์ผ
- ์ปจํ ์ธ ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค? ํด์ผํ ์ผ์ด ํจ์ฌ ๋ง์ ๊ฒ
- ์น ์๋ฒ X, HTTP ์๋ฒ -> ๋ฆฌํ์คํธ์ ์๋ตํ๋ ์
- ์น ์๋ฒ - HTTP๋ฅผ ์ฐ์ง๋ง, ๋ฉํฐ๋ฏธ๋์ด ์ปจํ ์ธ ๋ฅผ ์ค์ด๋๋ฅธ๋ค -> ์ฅ๊ณ ๋ฅผ ์ฐ๋ ๊ฒ
- ์น base์ ์๋ฒ application
- http ๊ธฐ๋ฐ์ ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋งค์ฐ ๋ง๋ค.
- ๊ณตํต์ - http๋ฅผ ๊น๊ณ ์๋ค -> ๊ทธ ์์ ๋ ์ฌ๋ผ๊ฐ
HTTP GET & POST server example
1. ๊ฐ๋จํ๊ฒ ์น ๋ธ๋ผ์ฐ์ ๋ก ํ ์ ์๋ค. ๊ฐ๋จํ get ์จ๋ณด๊ธฐ ๊ฐ๋ฅ
2. ํ์ด์ฌ์ผ๋ก import request๋ก ์ ์ ๊ฐ๋ฅ
3. ํ๋ก๊ทธ๋๋ฐ๊น์ง ๊ฐ๋ฅ
์ ์ฉํ ๊ฐ๋ฐ ๋๊ตฌ๋ค
- ๊ฐ๋ฐ์ ๋ชจ๋ ๋คํธ์ํฌ
- ๋ฐ๊ณ ์๋ element์ ์ฒ๋ฆฌ ์๊ฐ๋ ๋ชจ๋ ๋ณด์ฌ์ค
- http ์๋ฒ๋ฅผ ์คํ์ํค๋ฉด ๋ฌด์์ ํ ๊น?
- ํ์ผ์ด ๊ทธ๋๋ก ๋ณด์ธ๋ค!
- ํ์ฌ ๋๋ ํ ๋ฆฌ์ ํ์ผ๋ค์ ๋ชจ๋ ๋ณด์ฌ์ค
- ํ์ผ ํ์๊ธฐ ๊ธฐ๋ฅ
- ๋ค์ด๋ก๋๋ ๊ฐ๋ฅ wow
- ์ปฌ (Curl)
- ํด๋ผ์ด์ธํธ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ ๊ฐ๋ฅ
๋ฆฌํ์คํธ ์ฌ์ฉ, ๊ทธ๋ฅ ์น ์ฃผ์๋ก๋ ๊ฐ๋ฅ
์ฌ๋ฌ ํต์ ํ๋กํ ์ฝ์ ํด๋ผ์ด์ธํธ ๋ฒ์ ์ ๋ชจ๋ ์ง์ - ํด๋ผ์ด์ธํธ ์ชฝ์ ํ๋์ application์ผ๋ก ๊ตฌํํ ๊ฒ
- curl + URL
ํต์ฑ๋ก ๊ฐ์ ธ์จ ๊ฒ์ ๋ณผ ์ ์๋ค. - ๋ฆฌ๋
์ค์ ์๋ ๋ช
๋ น
- ๋ณดํต ํ์ผ๋ก ์ ์ฅ or ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์๊ฒ ์ ๋ฌ
- ์คํธ๋ฆผ ํํ๋ก ๋ด๋ณด๋ด๋๋ก
- ๋ฐ์ดํธ ๋ฉ์ด๋ฆฌ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ๋๋ก
- ํ๋ฉด์ผ๋ก ๋ณด๋ด์ฃผ๊ธฐ ๋ณด๋ค๋ (not GUI)
- ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์, ๋ค๋ฅธ ๊ณณ์ผ๋ก ์
๋ ฅ์ ํ๋๋ก
-> batch file
- ํด๋ผ์ด์ธํธ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ ๊ฐ๋ฅ
HTTP์ ์์ streaming
- ์ ํ๋ธ์ ์์ ์ ๋ก๋ - ๊ฐ๊ณต์ค์ ๋๋ค ๋ฌธ๊ตฌ
- ๋ด๊ฐ ์ ๋ก๋ ํ ํฌ๋งท๊ณผ ํด์๋
- ์์์ ์๋ก ๋ค๋ฅธ ํ์ค ํด์๋๋ก ์ ๋ถ ๋ค ๋ฐ๊ฟ
์ ์ฌ์ ๋จ๋ง๊ธฐ์์๋ ๋ณผ ์ ์๋๋ก
- 4K๋ผ๋ฉด, ํ์ผ์ ์์ ๋จ์๋ก ์ชผ๊ฐฌ
4K -> ์์ ํ์ผ๋ค์ ๋ชจ์
- ์ฒซ๋ฒ์งธ ํ์ผ์ HTTP GET request
๊ณ์๊ณ์ GET์ ํ๋ ๊ฒ - ์ค๋ ์๋๋ฅผ ์ฒดํฌ
-> ๋๋ ค์ง๋ค? -> HD์ 3๋ฒ์งธ ๊ฑฐ ๊ฐ์ ธ์
ํด์๋ ๋ณํ์ ์๋ฆฌ (์ด์ ) - ๋์์์ด http request
- ๋ฉ์ธ์ง์ ๊ฐ๊ฒฉ์ด ๊ท ๋ฑํ๊ฒ ์จ๋ค๋ฉด
- -> ์๋(ํด์๋) ์ข ์ฌ๋ ค๋ณผ๊น?
- ๋ค์ ์กฐ๊ฐ์ 1080์ผ๋ก ์ค
- ๋์์ ์ ์ฒด๊ฐ http ์ด๋ค๋ฉด? -> ํ๋กํ ์ฝ TCP
- ์์ถ๋ ๊ฒ ํ๊ธฐ + ๋ฒํผ๋ง ์๊ฐ (์ค์๊ฐ dynamic ์๋!)
- ์ฒ์ฒํ ๋ฐ์ผ๋ฉด์, ์๋ฌ ๋ณต๊ตฌํ๋ฉด์ ์์ ๋๊ณ , ์ ์๊ฐ ๋๋ฉด ํ๋ ์ด
- ์๋ฌ ๊ฒ์ถ ๋ฐ ๋ณต๊ตฌ๋ฅผ ํ๋ ๊ฒ (๊ด๊ณ )
- ๊ทธ ์๊ฐ์ ๋ฒํผ๋ง ์๊ฐ์ ๋ฒ๋ ๊ฒ
- HTTP -> TCP ๊ธฐ๋ฐ
TCP์ ๋ฌธ์ ๋ฅผ ๊ณ ์ค๋ํ ๊ฐ์ ธ ๊ฐ
์ฐ๊ฒฐ ์ค์ ์๊ฐ + slow start - ์ ํ๋ธ, ๋ทํ๋ฆญ์ค ๋ง์ ๋ ํด๋น ๋ฌธ์ ๋ฅผ ๊ฒช์๋ค
- ex) ๋ช
๋ ์ค์๊ฐ ๋ผ์ด๋ธ
์๋ฒ์์๋ ์์ถํด์ ์ธ์ฝ๋ฉ
http ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ ์๋ฒ -> ํด๋ผ์ด์ธํธ
์ด๋ฏธ ์ธ์ฝ๋ฉ ๋, ์ชผ๊ฐ์ง ์์์ ๋ณด๋ด๋ ๊ฒ ๋ฟ
-> static resource - ์๋ฒ์์ ํด๋ผ์ด์ธํธ๊น์ง ๋ฆ๊ฒ ๋์ฐฉํ ๊ฒฝ์ฐ
์์ฑ ํต์ sky life (์์ฑ์์ ์ค๋ ์๋๊ฐ ๋๋ ค์) - ํ๋ฆฌํฐ๊ฐ reasonableํ ์์ค (์ค์๊ฐ ๋ฐฉ์ก)
ํ์ง์ด ๊ทธ๋ฆฌ ์ข์ง ์๋๋ผ๋, ํ์ค ์ฝ๋ฑ์ ํ๋๋ง ์ฐ์ด์ ๋ผ์ด๋ธ ์ก์ถ
์์ถ์ ํ๋ ๊ฒ์๋ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ,
์์ถ์ ํธ๋ ๋ฐ์๋ ๋น ๋ฆ
< ์ถ๊ฐ ์ค๋ช >
- SOA (Service Oriented Architecture)
- Microservice / Serverless / Cloud Native
- OpenStack
- Docker / Kubernetes
- SOAP (Simple Object Access Protocol)
- REST (Representational State Transfer) & RESTful
- JSON (JavaScript Object Notation)
Monolithic vs SOA vs Microservice
1. monolithic
- ์๋ฒ -> ๊ฑฐ๋ํ ์ํคํ ์ฒ ํ๋
- ๋ฉ์ธ ํ๋ ์ ๊ธ ๊ต์ฅํ ๋ง๊ฐํ ์ปดํจํฐ (์ ๋์ค ๊ณ์ด)
- ๊ต์ฅํ ์ข์ ํ๋ก์ธ์ ์ฌ์ฉ
- tmi) ์ด์์ฒด์ ์ ์ฅ์์, ๋ฆฌ๋ ์ค๋ monolithic ๋จ์ด ์
2. SOA - Service Oriented Architecture
- ํ๋์ ์ปดํจํฐ๊ฐ ๋ค๋ฃฐ ์ ์๋ ๋ณต์กํ ๋ฌธ์
- ์ธํ
CPU ๋ฆฌ๋
์ค + ๋ฌถ์๋๋
๋ฉ์ธํ๋ ์์ ๋์ ํ ์ฑ๋ฅ์ด ๋์ค๊ธฐ ์์ํจ
๊ฐ๊ฒฉ๋ ์ ๋ ด - ํ ๋๋ก ๋ง๋ค๋ ์ํํธ์จ์ด
์ฌ๋ฌ ๊ฐ์ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ถ๋ฆฌ์ํจ ํ
๋คํธ์ํฌ๋ก ๋ฌถ์ ๊ฒ - ์๋น์ค ์ค๋ฆฌ์ํฐ๋ ์ํคํ
์ฒ SOA
ํ์ฌ(micro)์ ๊ณผ๊ฑฐ(monolithic)์ ์ค๊ฐ ๊ฐ๋
3. microservices
- ์ฐ๋ฆฌ์ ์๋ - micro service
- 100๊ฐ์ ๊ธฐ๋ฅ
๊ทน๋จ์ ์ผ๋ก, 100๊ฐ๋ก ์ชผ๊ฐ์ 100๋์ ์ปดํจํฐ์์ ๋๋ ค - ๊ธฐ๋ฅ์ ์๊ฐ ์ชผ๊ฐ์, ์ฌ๋ฌ ์ปดํจํฐ์์ ๋์ ๋ค๋ฐ์ ์ฒ๋ฆฌ
- ์ด๋ฅผ ํต์ ์ ํตํด ์ฐ๊ฒฐ
< monolithic vs SOA >
- monolithic
- ํ๋์ ๊ฑฐ๋ํ ํ๋ก๊ทธ๋จ ๋ด๋ถ์ ๋ชจ๋๋ค์ด ํ๋๋ก ํตํฉ๋จ
- ํ๋์ ํ๋ก์ ํธ ๋ด๋ถ์ ์์ค์ฝ๋๋ค -> ๋น๋ -> ๊ฑฐ๋ํ ํ๋์ ํ๋ก๊ทธ๋จ
- ์ด๋ฐ ์ ๋ค์ด ์๋ก ๋ํ๋ฅผ ๋๋ ๊ฒฝ์ฐ๋ ๋ณ๋ก X
- ๊ณต์ DB ์ฌ์ฉ, ๋์๋ค๋ฐ์ ์์ X
- SOA
- ๋ณ๋์ ํ๋ก๊ทธ๋จ๋ค๋ก ๊ตฌ์ฑ๋จ
- ์ชผ๊ฐ ์ดํ, ์ผ์ ์ ํ ๊ด๊ณ๊ฐ ๋ฐ์
- ์์ ์ ๊ฐ ๋ง์น๋ฉด, ํต์ ์ ํตํด ๋ค์ ์ ์๊ฒ ์ ๋ณด ์ ๋ฌ
- ์๋ฒ to ์๋ฒ, ์ ํ ๊ด๊ณ๊ฐ ์๊ฒผ๋ค.
- ๋ถํ ์์ ์ด ์์ -> ์๋ฒ ๊ฐ ํต์ ์ HTTP๋ก ์์!
< microservice >
- ๊ฐ๋ฐ์์ ํตํฉํ๊ณ , ๋ฐฐํฌ๋ ์๋ -> ์ญ ์๋ํ๋ ์์คํ
- ์์ฒ ์๋ง๊ฐ์ ์ปดํจํฐ(CPU)๋ฅผ ์๊ฐํ์ฌ ์ค๊ณ๋จ
- ์์ ํ๋ก๊ทธ๋จ๋ค์ ์ซ ๋ฟ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ
- ํ๋์ ํจ์๊ฐ ๋ช ๊ฐ์ ์ปดํจํฐ์์ ๋์๊ฐ๋, ๋ง์ดํฌ๋ก ์๋น์ค
- ๊ต์ฅํ ์์ ๋จ์๋ก ๊ฐ๋ฐํ๋ค
Microservice : Cloud Computing
- ์คํ ์คํ
- CPU + ๋์คํฌ + ๋คํธ์ํฌ
- ๋น๋ ค์ ์ฌ์ฉํ๊ณ , ํ์ ์์ด์ง๋ฉด ๋ฐ๋ฉํ๋ค.
- ๊ฐ์ ๋จธ์ ์ ๋์ฐ๋ ์คํด
- ex) ์๋ฒ ์์คํ
์ ์ด์์ฒด์ ๊ฐ ๋ฆฌ๋
์ค
ํ์ฌ ๊ฐ๋ฐ๋ ๋ค ๋ฆฌ๋ ์ค๋ก
-> ๋ฆฌ๋ ์ค ์์ ๋ฆฌ๋ ์ค๊ฐ ์ฌ๋ผ๊ฐ๊ฒ ๋จ
๋ฆฌ๋ ์ค ์์์ ๋ฆฌ๋ ์ค๋ฅผ ๋์ฐ๋ -> ์ฑ๋ฅ์ ํ ๋ฌธ์ ๋ฐ์
- ๋์ปค & ์ฟ ๋ฒ๋คํฑ์ค
- ๊ฐ์ ๋จธ์ ๊ธฐ๋ฒ X
- ๋์ํ๊ณ ์ถ์ ํ๋ก๊ทธ๋จ์ด ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๊ฒฝ ๋ณ์, ๋ณธ์ธ ์์ฒด ๋ฑ
์ปดํจํฐ์ ์ํํธ์จ์ด ์ค์น ๋ฐ ์ญ์ ๊ฐ ์ฌ์ด ์ปจํ ์ด๋ ๊ธฐ์ - ์์ฒ ์๋ง ๋์ ๋์ํ๊ฒ ํ์
- ๋์ปค - ์ค์น ๋ฐ ํด์
์ฟ ๋ฒ๋คํฐ์ค (์ค์ผ์คํธ๋ ์ดํฐ) - ์์ฒ ๊ฐ์ ๋ฟ๋ฆฌ์ - ๋ชจ๋ ๋ฆฌ๋
์ค foundation
microservice ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ
cloud native foundation
์์ฒ ์๋ง๋์ CPU ๋์คํฌ, ์ฐ๊ฒฐํ๋ ๋คํธ์ํฌ ๊ฐ๋
ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ , ์ด์์ ํ๋ -> ์ฌ๊ธฐ ๊ด์ฌ์๋ ์ฌ๋์ ์ฌ๊ธฐ๋ก ๋ชจ์ฌ๋ผ
์๋ฒ์ ๊ด๋ จ + CI/CD, ๋ฐ๋ธ์ต์ค -> ๋ค ์ฌ๊ธฐ๋ก ๋ชจ์ - Cloud Native
ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ๊ณ ๋ คํ์ฌ, ์ํํธ์จ์ด ๊ฐ๋ฐ, ์ด์ํ๋ ๊ฒ - kubernetes
- 300๋ง ๊ฐ์ ์ฝ์ด์์ ๊ตฌ๊ธ ์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์๋น์ค
์ ์ ์ธ์์ ํตํด, ํจ์จ์ ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์ด์ํ ์ ์๋ค.
์ปจํ ์ด๋ -> ํ๋์ ์คํ ํ๋ก๊ทธ๋จ(์๋ฒ๊ธ ํ๋ก์ธ์ค)
์ ์ต ๊ฐ์ ํ๋ก์ธ์ค๋ก ๋๋์ด์ ์คํ - ๊ฐ์๋จธ์ ์์ ์ฌ๋ผ์จ ํ๋ก๊ทธ๋จ
์๋์ฐ, ๋ฆฌ๋ ์ค, ์ ๋์ค ์์์ (ํธ์คํธ OS)
์ด ์์ ๋ค์ ๋ฆฌ๋ ์ค ์ ๋์ค๋ฅผ ๋์ (๊ฒ์คํธ OS) - ๋ฆฌ๋
์ค ์์ ๋์ปค๋ฅผ ๋์ฐ๋ฉด
๋ณ๋์ ์ด์์ฒด์ ๋ฅผ ์ฌ๋ฆฌ์ง ์๊ณ ,
์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ค์นํ๋ค๊ฐ, ๊ฐ์ด ์ญ์ ํ ์ ์๋ค. - Docker - ์๋์ฐ์ ๋ฆฌ๋ ์ค ์ฐ๊ฒฐ ๊ฐ๋ฅ
SOAP & REST/RESTful
2000 SOA ๋ฑ์ฅ
ํต์ ์ HTTP ์ฌ์ฉ
TCP/UDP ๋ฑ ์์ผ ํ๋ก๊ทธ๋๋ฐ์ด ์๋
-> ํจ์ ํธ์ถ๊ณผ ์ ์ฌํ response ๋ฐฉ์
-> ํ๋ก๊ทธ๋จ ์ง๋ ๊ฒ์ด ์ฝ๋ค
์ด๋ ์ฃผ๊ณ ๋ฐ๋ ์ ๋ณด๋ฅผ ์ด๋ป๊ฒ ํํํ๋๊ฐ?
XML -> ๊ฐ์ฅ ์ฌ์ด ์ถ์ํ์ด html
๋ฌดํ ๊ทน๊ฐ์ over spec ํฌ์
xml ์ฒ๋ฆฌํ๋๋ผ ๋๋ฌด ํ๋ค์๋ค
SOAP
service oriented architecture protocol
ํ์ฑ -> xml์์ ์ํ๋ ๋ฐ์ดํฐ ์ถ์ถํ๋ ๊ธฐ์
์ค๋ฒํค๋๊ฐ ๋๋ฌด ํฐ ๋ฐ?
2007
HTTP ์์ ๋์๋ค์ ์ฌ๋ฆผ
JSON / RESTful ์น ์๋น์ค
HTTP๋ฅผ ์ฐ๋ ๊ฒ์ ๋์ผ
๋ฌธ์ ๋ง๋๋ ๋ฐฉ์, ๋ณต์กํ XML์ ์ฐ์ง ๋ง์
JSON - ์๋ฐ ์คํฌ๋ฆฝํธ์ ๋
ธํ
์ด์
(ํ์ด์ฌ์ ๋ฆฌ์คํธ, ๋์
๋๋ฆฌ, ์ธํฐ์ ๋ฑ์ ๋งคํ)
์ ํจ์ ํธ์ถ์ธ๋ฐ, ๋ฌธ์๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ ์์ง?
ํจ์ ํธ์ถํ๋ ๊ฒ์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์
์ ์ ์ธ html์ ๋์ ์ผ๋ก ๋ฐ๊ฟ์ค ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด JS
์ JS? ๋คํธ์ํฌ๋ฅผ ํ๋ ์ธ์ด JS ! (ํ์ด์ฌ, C ์๋๋ผ)
์ด๋ฌ๋ฉด์ REST ๋จ์ด ๋ฑ์ฅํ๊ธฐ ์์
'ComputerScience > FullStackProgramming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์คํ] ๊ธฐ๋ง๊ณ ์ฌ Summary (0) | 2023.07.21 |
---|---|
[ํ์คํ] JSON / RESTful API / CRUD (0) | 2023.04.19 |
[ํ์คํ] HTTP request methods / Proxy Cache (0) | 2023.04.18 |
[ํ์คํ] HTTP/1.1 intro / URL, TCP/IP (0) | 2023.04.18 |
[ํ์คํ] ZMQ Pattern (0) | 2023.04.18 |