파이썬의 Elegant URL
REST 방식의 URL 개념을 기반으로 간편 URL 체계를 도입하였다. 쿼리스트링 없이 경로만 가진 구조
그 외에도 URL을 정의하기 위해 정규표현식을 추가적으로 사용할 수 있다.
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>', views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]
정규 표현식을 사용해서 URL을 좀 더 구체적으로 표현 할 수 있다. year를 4자리, month를 2자리로 제한
urlpatterns = [
path('articles/2003/', views.special_case_2003),
re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail),
]
웹 서버
웹 클라이언트의 요청을 받아서 요청을 처리하고, 그 결과를 웹 클라이언트에게 응답. 주로 정적 페이지를 웹 클라이언트에 제공할 때 웹 서버를 사용한다. 동적 페이지 처리가 필요하다면 웹 애플리케이션 서버에 처리를 넘긴다. ex) Apache httpd, Nginx, lighttpd, IIS 등
애플리케이션 서버
웹 서버로부터 동적 페이지 요청을 받아 요청을 처리하고, 그 결과를 웹 서버로 반환. 주로 동적 페이지 생성으 ㄹ위한 프로그램 실행과 데이터베이스 연동을 처리 ex) Apache Tomcat, JBoss, Jetty 등
CGI(Common Gateway Interface)
웹 라이브러리 구성
urllib 패키지
에는 웹 클라이언트를 작성하는 데 사용되는 모듈들이 있으며, http 패키지
는 크게 서버용과 클라이언트용 라이브러리로 나누어 모듈을 담고 있다. 쿠기 관련 라이브러리도 http 패키지 내에서 서버용과 클라이언트용으로 모듈이 구분되어 있다.
웹 클라이언트를 개발하는 경우에는 주로 urllib 패키지를 사용한다. http.client 모듈이 HTTP 프로토콜 처리와 관련된 저수준의 클라이언트 기능을 제공하는 반면, urllib 패키지의 모듈들은 HTTP 서버뿐만 아니라 FTP 서버 및 로컬 파일 등을 처리하는데, 클라이언트에서 필요한 함수와 클래스 등을 제공한다. 주로 URL 처리와 서버 액세스 관련 API를 제공하고 있으며, HTTP 프로토콜과 관련해서는 http.client 모듈의 API를 한번더 추상화 하여 고수준의 API를 제공한다.
파이썬 기본 라이브러리 클라이언트
urllib.parse 모듈
URL의 분해, 조립, 변경 및 URL 문자 인코딩, 디코딩 등을 처리하는 함수를 제공한다.
from urllib.parse import urlparse
result = urlparse("http://www.python.org:80/guido/python.html;philosophy?overall=3#n10")
"""
ParseResult(scheme='http',
netloc='www.python.org:80',
path='/guido/python.html',
params='philosophy',
query='overall=3',
fragment='n10')
"""
urlparse() 함수는 URL을 파싱한 결과로 ParseResult 인스턴스를 반환한다.
- scheme URL에 사용된 프로토콜
- netloc 네트워크 위치 user:password@host:port 형식이며, HTTP 프로토콜의 경우 host:port
- path 파일이나 애플리케이션 경로
- params 애플리케이션에 전달될 매개변수 deplocated
- query 질의 문자열 또는 매개변수.
이름=값
쌍 형식으로 표현 - fragment 문서 내의 앵커 등 조각 지정
파이썬 기본 라이브러리 서버
CGI
웹 서버와 애플리케이션 간에 데이터를 주고받기 위한 규격을 CGI(Common Gateway Interface)라고 한다. 파이썬 표준 라이브러리에서는 이러한 CGI 처리를 할 수 있도록 cgi 모듈과 cgitb 모듈을 제공한다. cgi 모듈은 요청에 포함된 파라미터를 처리하기 위한 FieldStorage 클래스를 정의, cgitb 모듈은 CGI 애플리케이션(스크립트)을 실행하는 과정의 에러에 대한 상세 표시
파이썬은 WSGI 기술을 사용하여 CGI 처리를 하므로 cgi 모듈을 잘 사용하지 않는다.
WSGI
CGI 방식은 요청이 들어올 때마다 처리를 위한 프로세스가 생성되는 방식이기 때문에, 순간에 대량의 요청을 받으면 서버 부하가 높아져 문제가 발생할 수 있다. 이러한 단점을 해결하고 파이썬 언어로 애플리케이션을 쉽게 작성할 수 있도록 웹 서버와 웹 애플리케이션 간에 연동 규격을 정의한 것이 WSGI 규격이다.