억대 연봉을 위한 인간수업
article thumbnail
반응형

 

 

파이썬 웹 관련 라이브러리는 2.x 버전과 3.x 버전이 다르게 구성되어 있다.
3.x 버전은 관련된 모듈을 모아 패키시를 만들었고, 모듈명을 통해 서버와 클라이언트 라이브러리를 구분했다.

이번에는 웹 클라이언트와 웹서버의 주요 라이브러리, 그리고 서버와 클라이언트의 연동을 위한 WSGI에 대해 알아보겠다.

 

 

 

 

파이썬의 웹 라이브러리 구성은 다음 사진과 같다.

https://jungeunlee95.github.io/django/2019/06/19/python-web-%ED%91%9C%EC%A4%80-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%A0%95%EB%A6%AC/

웹 서버와 웹 클라이언트에 따라 패키지를 다르게 사용한다는 것을 위의 사진에서 알 수 있다.

웹클라이언트를 개발할 때 urllib 패키지를 많이 사용한다. 그 이유는 주로 URL 처리와 서버 엑세스 관련 API를 제공하고 있기 때문이다.
웹 서버를 프로그래밍 할 경우 http.cookie 또는 http.server 모듈은 거의 사용하지 않는다. 왜냐면 장고같은 웹 프레임 워크를 사용해 웹 서버 프로그래밍을 하기 때문이다. 

 

 

 

 

 

 

1. 웹 클라이언트 라이브러리

 

우리가 가장 많이 사용하는 웹 브라우저는 다양한 웹 클라이언트중 하나이다.  브라우저 외에도 웹 서버에 요청을 보내는 애플리케이션은 모두 웹 클라이언트라 할 수 있다.

파이썬은 클라이언트를 프로그래밍 할 수 있도록 여러 가지 라이브러리를 제공하고 있다.

 



1. urllib.parse 모듈 (parse는 해석한다는 의미를 가지고 있다.)
 - URL의 분해, 조립, 변경 및 URL 문자 인코딩, 디코딩 등을 처리하는 함수를 제공한다.
 - urllib.parse 모듈에서 urlparse() 함수는 가장 기본적인 함수로 URL을 파싱한 결과로 ParseResult 인스턴스를 반환한다.


2. urllib.request 모듈
 - URL에서 데이터를 가져오는 기본 기능 제공. 
 - 이 모듈에서 사용하는 함수 중 urlopen() 함수만 잘 다뤄도 웬만한 웹 클라이언트는 작성 할 수 있다고 한다.
 - urlopen()함수를 사용하는 방법은 GET/POST 방식, PUT/HEAD , 인증/쿠키/프록시 등 복잡한 처리 기능에 따라 다르다.
  
2.1 urllib.request 모듈보다 좀더 세밀한 기능이 필요한 경우 http.client 모듈을 사용한다.
 - http.client 모듈을 사용하는 경우 코디의 순서는 다음과 같다.
  1. 연결 객체 생성
EX) conn=http.client.HTTPConnection("www.python.org")
  2. 요청 보냄
EX) conn.request("GET","/index.html")
  3. 응답 객체 생성
EX) response=conn.getresopnse()
  4. 응답 데이터 읽음
EX) data = response.read()
  5. 연결을 닫음
EX) conn.close()
 



 

 

2. 웹 서버 라이브러리

 
 - 보통 웹 프레임 워크를 사용해 웹서버를 개발하는 경우가 대부분이지만 웹 서버 라이브러리를 알면 중급, 고급 기술자가 되기위한 발판이 될 수 있다.
 - 웹 서버는 일정한 규칙에 의해 작성 되며 HTTPserver 클래스나 적절한 핸들러 클래스를 상속받아 기능을 확장해 나간다.
 - 파이썬에서는 웹서버를 만드는데 필요한 라이브러리를 http.server 모듈에서 정의하고 있으며 그중 주요 클래스는 다음과 같다.

 

 


  1. HTTPserver
   - 웹 서버를 만들기 위한 클래스로, 서버 IP와 PORT를 바인딩 한다
  2. BaseHtTPRequestHandler
   - 핸들러를 만들기 위한 기반 클래스로, HTTP 프로토콜 처리 로직이 들어있다
   - 이 클래스를 상속받아 핸들러 클래스를 만든다
  3. SimpleHTTPRequestHandler
   - BaseHtTPRequestHandler 클래스를 상속받아 만든 클래스로, GET과 HEAD 메소드 처리가 가능한 핸들러 클래스이다
  4. CGIhTTPRequestHandler
   - SimpleHTTPRequestHandler클래스를 상속받아 만든 클래스로 POST,CGI 처리가 가능하다.
   
   * 핸들러란? 
    다른 객체들이 보낸 데이터를 처리하는 객체/로깅한 정보가 출력되는 위치를 설정하는 녀석
   

 

 


 - 위에 설명한 4개 클래스의 특징은 다음과 같다.
 HTTPserver 와 BaseHtTPRequestHandler
  - 이 두개 클래스는 웹서버를 만들기 위한 기반이 되는 클래스이다.
 SimpleHTTPRequestHandler
  -  필요할 때 즉시 웹서버를 실행하기 위한 클래스로 GET, HEAD방식을 처라한다
  - 그러나 POST 등 HTTP 메소드는 처리가 불가능하다.
 CGIhTTPRequestHandler
  - SimpleHTTPRequestHandler와 유사하게 웹서비스를 즉시 실행시키는 것이 가능하고, GET , HEAD방식처리가 가능하다.
  - 단, 모든 POST 방식을 처리할 수 있는건 아니다.
  
  

 

 

 


 여기까지 웹 클라이언트와 웹서버의 주요 라이브러리와 클래스를 알아보았다. 
 파이썬에는 웹 클라이언트와 웹서버를 연동하는 규격이 존재하는데, 이를 WSGI(Web Server Gateway Interface)라 한다.
 또한 예전에 사용하던 CGI 규격을 위한 cgi 모듈과 개선된 WSGI 규격을 구현하기 위한 wsgiref 모듈이 존재한다.
 

 

 

 

 


  1. CGI 규격이란 ?
   - 웹에서의 요청은 동적요청과 정적 요청으로 구분된다.
   - 정적 요청은 웹 서버에 있는 파일을 그대로 요구하는 반면에, 동적 요청은 요청 시점에 따라 내용이 달라지는 특징을 가지고 있다.
   - 동적 요청의 경우 사용자의 요청을 전달하고 처리 결과를 되돌려 주기위한 규격이 필요한데, 이를 CGI(Common Gateway Interface)라 한다.


  2. WSGI 규격이란?
   - CGI 방식으로 처리시 요청이 많을경우 서버의 부하가 높아져 다운이 될 수도 있다. 
   - 이런 단점을 해결하고 쉽게 애플리케이션을 작성할 수 있도록 정의한것이 WSGI 규격이다.
   - WSGI 규격을 처리하는 것은 mod_wsgi, uWSGI, Gunicorn 같은 WSGI서버이다.
   - 현재 WSGI 규격은 2010년에 PEP 3333규격으로 제정되어 있다.
   

 

 

 

 


 WSGI 규격에 따라 애플리케이션 개발을 할 때 중요한 사항은 3가지가 존재한다.
  1. 개발이 필요한 애플리케이션을 함수 또는 클래스의 메소드로 정의하며, 애플리케이션 함수인자는 다음과 같이 정의한다
   def application_name(environ, start_response) :
  2. start_response 함수의 인자 역시 다음과 같이 정의한다
   start_response(status, headers)
  3. 애플리케이션 함수의 리턴값은 응답 바디에 해당하는 내용으로, 리스트나 제너레이터와 같은 iterable 타입이여야 한다.
  

 

 


 파이썬 표준 라이브러리에서는 웹 프레임 워크 개발자가 웹 서버와 연동 기능을 개발할 수 있도록 wsgiref 패키지의 하위 모듈로 wsgiref.simple_server 모듈을 제공하고 있다.
 어디까지나 제공을 하고 있는것이지 필수로 사용해야 하는 기능은 아니다.
   
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  






반응형

'Develop > python' 카테고리의 다른 글

Requests 모듈 사용법  (0) 2020.01.13
[Python]모듈이란?  (0) 2020.01.07
[파이썬 웹 프로그래밍] 웹 프로그래밍의 이해  (0) 2019.11.24
While 문이란?  (0) 2019.11.03
파이썬에서 파일이란?  (0) 2019.09.07
profile

억대 연봉을 위한 인간수업

@회뜨는참치

이 글이 당신에게 조금이라도 도움이 된다면 좋겠습니다.