본문 바로가기

PYTHON

[Django] 0. 파이썬 웹 표준 라이브러리

파이썬 웹 표준 라이브러리

파이썬의 웹 라이브러리들은 버전(2.x  3.x) 등에 따라 사용하는 모듈이 달라집니다.

다음의 그림처럼 패키지와 모듈 역시 클라이언트와 서버용 라이브러리로 구분이 됩니다.

출처 : https://ssola22.tistory.com/13


웹 라이언트 라이브러리

우리사 사용하는 웹 브라우저는 다양한 웹 클라이언트의 일부분이고 그 외에도 웹 서버에 요청을 보내는 애플리케이션은 모두 웹 클라이언트라고 할 수 있습니다. 날씨 정보를 가져오거나, 웹 페이지를 구성하는 HTML 소스를 가져오는 웹 크롤링 프로그램 등 HTTP 프로토콜을 사용해서서버와 통신하는 것들을 웹 클라이언트라고 볼 수 있습니다.

urlib 패키지

웹 클라이언트를 작성, 프로그래밍 할 경우 주로 urlib 패키지를 사용하는데 기존의 http.client 모듈이 HTTP 프로토콜 처리와 관련된 저 수준의 클라이언트 기능을 주는 것에 비해 urlib 패키지는 서버 엑세스 관련 API를 제공하거나, http.client 모듈의 API를 한 번 더 추상화해서 좀 더 쉬운 고준의 API를 제공합니다.

API: 응용 프로그램 프로그래밍 인터페이스의 약자로, 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 파일 제어, 창 제어, 화상 처리, 문자 제어 등의 기능을 제공해서 제어할 수 있게 만든 인터페이스를 말합니다.

urlib.parse 모듈

이 모듈은 URL의 분해 조립 변경 및 URL 문자 인코딩 디코딩 등을 처리하는 함수를 제공합니다.

-> URL 이란? 2023.03.10 - [Node.js] - [Node.js] 1. URL

parse 모듈의 가장 기본적인 함수인 urlparse()를 예로 살펴보겠습니다.

urlparse() 함수는 URL 파싱한 결과로 ParseResult 인스턴스를 반환합니다. 

ParseResult 클래스 각 속성
scheme : URL에 사용된 프로토콜
netloc : 네트워크 위치 - user:password@host:port 형식으로 표현
path : 파일이나 애플리케이션 경로
params : 애플리케이션에 전달될 매개변수 (현재는 사용 X)
query : 질의 문자열 또는 매개변수로 key - value 로 구성
fragment : 문서 내의 특정 부분을 지정 

urlib.request 모듈

urlib.requset 모듈은 주어진 URL에서 데이터를 가져오는 기본 기능을 제공합니다.

가장 대표적인 urlopen()의 형식

urlopen(url,data=None,[timeout])

url : 지정한 URL을 연결하고 유사 파일 객체를 반환 - URL 인자로 문자열이나 Request 클래스가 올 수 있습니다.       
        - file 스킵을 지정하면 로컬 파일 또한 열 수 있습니다.

 

이 모듈은 몇가지 특징을 가지고 있는데

디폴트 요청 방식은 Get 이고 웹 서버에 전달할 파라미터가 있다면 질의 문자열의 url 인자에 포함해서 보냅니다.
요청 방식을 Post로 보내고 싶으면 data 인자에 질의 문자열을 지정하면 됩니다.
옵션 timeout은 응답을 기다리는 타임 아웃 시간을 초단위로 표시합니다.

ulropen 함수를 이용하면 웬만한 웹 클라이언트를 작성 할 수 있는데 상황 별 작성 요령이 필요 합니다.

사용 상황 사용 방법
URL로 GET/POST 방식의 간다한 요청 처리 urlopen 함수만으로 가능
PUT,HEAD 메소드 등 헤더 조작이 필요한 경우 Request 클래스를 같이 사용
인증,쿠키,프록시 등 복잡한 요청 처리 인증/쿠키/프록시 해당 핸들러 클래스를 같이 사용

 

<ulropen 예시>

위 명령어를 이용하게 되면 www.example.com  을 입력한 것과 동일한 데이터를 웹 서버에서 가져옵니다.

웹 브라우저는 HTML 형식의 데이터를 해석해서 사용자에게 보여주지만, 파이썬에선(웹 클라이언트)은 HTML 형식의

데이터를 해석하지 않고 그대로 보여줍니다.

이 명령어는 HTTP GET 방식을 디폴트로 사용하여 웹 서버에 요청을 보내며 응답 문자열에서 500바이트만 읽어서 출력하고 있습니다.

 

<POST 방식으로 웹 서버에 요청을 보내는 방법>

urlopen 함수 호출 시 data 인자를 지정하면 함수는 자동적으로 post 방식으로 요청을 보냅니다. 

중요한 것은 POST 요청을 처리 할 수 있는 서버가 별도로 존재해야 합니다.

data 인자는 URL에 허용된 문자열입니다.
data 인자를 사용하려면 인코딩(urlencode) 되어야 하고,
유니코드(str) 타입이 아니라 바이트 스트링(bytes) 타입이어야 합니다.

 

서버 생성 시 내용 추가

 

 

 

 

 

 

 


이 카테고리에선 Django로 배우는 파이썬 웹 프로그래밍 책 등을 바탕으로 Django를 공부하는 과정을 기록하는 형식으로 진행하겠습니다.