파이썬 웹 프로그래밍
파이썬 웹 프로그래밍: 파이썬 웹 표준 라이브러리
MoonGa
2023. 1. 27. 14:46
2.1 웹 라이브러리 구성
- 표준 라이브러리는 웹 클라이언트 프로그래밍, 웹 서버 프로그래밍에 따라 사용하는 라이브러리 모듈이 달라짐.
- urllib 패키지: 웹 클라이언트 작성 시, 사용되는 모듈들 내장됨.
- http 패키지: 서버용과 클라이언트용 라이브러리로 나눠 모듈을 담고 있고, 쿠키 관련 라이브러리도 http패키지 내 서버용과 클라이언트용으로 모듈이 구분됨.
2.2 웹 클라이언트 라이브러리
- urllib.parse 모듈: URL의 분해, 조립, 변경 및 URL 문자 인코딩, 디코딩 등을 처리하는 함수 제공함.
- urlparse(): url을 파싱한 결과로 ParseResult인스턴스를 반환함.
- urllib.request 모듈: 주어진 URL에서 데이터를 가져오는 기본 기능을 제공함.
- urlopen(): urlopen(url, data=None, [timeout])
- urlopen(): post 방식 요청, Request클래스로 요청 헤더 지정
- HTTPBasicAuthHandler클래스로 인증 요청: urllib.request모듈에 정의된 HTTPBasicAuthHandler클래스를 사용하여 인증 데이터를 같이 보내는 프로그램 작성 가능.
- HTTPCookieProcessor클래스로 쿠키 데이터를 포함하여 요청
- ProxyHandler 및 ProxyBasicAuthHandler클래스로 프록시 처리: 두 클래스로 프록시 서버를 통과하여 웹서버로 요청을 보내는 프로그램
- http.client 모듈:
2.3 웹 서버 라이브러리
- 웹서버: http통신에서 클라이언트의 요청을 받고 이를 처리하여 그 결과를 돌려주는 것.
- 파이썬에서 웹서버를 만드는데 필요한 라이브러리를 http.server모듈에서 정의함, 중요한 클래스는 다음과 같음
- 원하는 웹서버를 만들려면 기반클래스(HTTPServer, BaseHTTPRequestHandler)를 import하거나 상속받아야함.
- 기반클래스에는 HTTP프로토콜을 처리하는 기능이 있어, 기반클래스를 상속받으면 HTTP 프로토콜 관련된 로직을 코딩하지 않아도됨.
- SimpleHTTPRequestHandler클래스: 파이썬에서 별도의 코딩없이 필요할 때, 즉시 웹서버를 실행할 수 있는 클래스.
- do_GET(), do_HEAD()메소드가 정의되어 있어 GET및 HEAD방식처리가능.(but POST 등 이외의 HTTP메소드 처리불가)
- do_GET() 메소드는 디렉토리 리스트를 반환하도록 구현되어 있음.
- CGIHTTPRequestHandle클래스: 미리 구현되어 있어 필요 시, 즉시 웹서버 실행 가능.
- do_POST() 메소드가 정의되어 있어 POST방식 처리가능.
- CGI 웹서버가 CGI 스크립트를 정상처리하는지 확인하는 2가지 준비작업: 서버에서 실행되는 스크립트 준비(cgi-bin/script.py), POST방식으로 요청을 보낼 웹 클라이언트 준비(cgi.client.py)
- 클라이언트 요청에 담긴 문자열에 접근하기위해, FieldStorage()클래스의 인스턴스를 생성하고 그 인스턴스의 getvalue()메소드를 호출해야함.
2.4 CGI/WSGI 라이브러리
- 파이썬 애플리케이션을 실행하려는 웹서버는 WSGI규격을 준수해야함.
- WSGI는 웹서버와 웹애플리케이션을 연결하는 규격으로 장고와 같은 파이썬 웹 프레임워크를 개발하거나 아파치와 같은 웹서버와 연동할 때 사용함.
- 웹서버(아파치..)와 파이썬 웹 애플리케이션(장고..)간 WSGI 통신 규격을 처리하는 것이 Gunicorn과 같은 WSGI서버임.
- WSGI 규격에 애플리케이션 개발 시, 중요한 사항 3가지
- 개발이 필요한 애플리케이션을 함수 or 클래스의 메소드로 정의하고 애플리케이션 함수의 인자는 다음과 같이 정의.
- def application_name(environ, start_response):
- environ: 웹 프레임워크에 이미 정의되어 있음, HTTP환경변수를 포함함.
- start_response: 애플리케이션 내에서 응답을 시작하기 위해 반드시 호출해야 하는 콜백 함수.
- start_response함수의 인자를 형식에 맞춰 호출해야함. 함수를 호출하는 시점에 응답 헤더가 출력됨
- start_response(status, headers)
- status: 응답 코드/ 응답 메시지를 지정함 ex> 200 OK, 404 Not Found
- headers: 응답 헤더를 지정함.
- 애플리케이션 함수의 리턴값은 response body에 해당하는 내용으로 리스트나 제너레이터와 같은 iterable타입이어야함.
- 개발이 필요한 애플리케이션을 함수 or 클래스의 메소드로 정의하고 애플리케이션 함수의 인자는 다음과 같이 정의.
- wsgiref.simple_server 모듈:
- WSGI서버에 대한 참조서버, 즉 개발자에게 참고가 될 수 있도록 미리 만들어 놓은 WSGIServer클래스, WSGIRequestHandler클래스를 정의함, 장고의 runserver도 이들 클래스를 사용하여 만든 테스트용 웹서버임.