9.2 웹 서버

python -m http.server

File “", line 1 python -m http.server

SyntaxError: invalid syntax

9.2.2 웹 서버 게이트웨이 인터페이스

  • 아파치는 mod_php 모듈 내에서는 PHP, mode_perl 모듈 내에서는 펄, mod_python 모듈 내에서는 파이썬을 실행
  • 그리고 이러한 동적 언어의 코드는 외부 프로그램이 아닌 장기적으로 작동하는 아파치 프로세스 내에서 실행.
  • 다른 방법은 별도의 장기적으로 작동하는 프로그램 내에서 동적언어를 실행하고 웹 서버와 통신하는 것. FaseCGI와 SCGI가 있다.
  • 파이썬 웹 개발은 파이썬 웹 애플리케이션과 웹 서버간의 범용적인 API 인 WSGI의 정의에서부터 시작,

    9.2.3 프레임워크

  • 웹 서버는 HTTP와 WSGI의 세부사항을 처리
  • 웹 프레임워크는 최소한의 클라이언트의 요청과 서버의 응답을 처리. 일부 혹은 모든 기능을 제공
  • 라우트(route) URL을 해석하여 해당 서버의 파일이나 파이썬 코드를 찾아준다.
  • 템플릿(template) 서버사이드의 데이터를 HTML 페이지에 병합한다.
  • 인증(authentication) 및 권한(authorization) 사용자 이름과 비밀번호, 퍼미션을 처리 한다.
  • 세션(session) 웹사이트에 방문하는 동안 사용자의 임시 데이터를 유지 한다.

    9.2.4 bottle

    pip install bottle

    from bottle import route, run
    
    @route('/')
    def home():
    return "Is isn`t fancy, but it's my home page"
    
    run(host='localhost', port=9999)
    
  • 데커레이터를 사용하여 함수와 URL을 연결.
    from bottle import route, run, static_file
    @route('/')
    def main():
    return static_file('index.html', root='.')
    run(host='localhost', port=9999)
    
    from bottle import route, run, static_file
    @route('/')
    def home():
    return static_file('index.html', root='.')
    @route('/echo/<thing>')
    def echo(thing):
    return "Say hello to my little friend: %s!" % thing
    run(host='localhost', port=9999)
    
    import requests
    resp = requests.get('http://localhost:9999/echo/Mothra')
    if resp.status_code = 200 and resp.text = 'Say hello to my little friend: Mothra!':
    print('It worked! That almost never happens!')
    else:
    print('Argh, got this:', resp.text
    

    9.2.5 FLask

    from flask import flask
    app = Flask(__nam__, static_folder='.', static_url_path='')
    @app.route('/')
    def home():
    return app.send_static_file('index.html')
    @app.route('/echo/<thing>')
    def echo(thing):
    return "Say hello to my little friend: %s" % thing
    app.run(port=9999, debug=True)
    
    from flask import Flask, render_template
    app = Flask(__name__)
    @app.route('/echo/<thing>')
    def echo(thing):
    return render_template('flask2.html', thing=thing)
    app.run(port=9999, debug=True)
    
    from flask import Flask, render_template
    app = Flask(__name__)
    @app.route('/echo/<thing>/<place>')
    def echo(thing, place):
    return render_template('flask3.html', thing=thing, place=place)
    app.run(port=9999, debug=True)
    
    from flask import Flask, render_template, request
    app = Flask(__name__)
    @app.route('/echo/)
    def echo():
    thing = request.args.get('thing')
    place = request.args.get('place')
    return render_template('flask3.html', thing=thing, place=place)
    app.run(port=9999, debug=True)
    
    from flask import Flask, render_template, request
    app = Flask(__name__)
    @app.route('/echo/')
    def echo():
    kwargs = {}
    kwargs['thing'] = request.args.get('thing')
    kwargs['place'] = request.args.get('place')
    return render_template('flask3.html', **kwargs)
    app.run(port=9999, debug=True)
    

    9.2.6 비파이썬 웹 서버

  • 제품을 배포할때는 빠른 웹 서버로 파이썬을 실행하는 것이 좋다.
  • 일반적으로 다음을 선택한다.
    • 아파치 와 mod_wsgi모듈
    • 엔진엑스와 uWSGI 앱서버
  • 아파치는 인기가 많고
  • 엔진 엑스는 안정성과 메모리를 적게 사용하는 것으로 유명 ** 아파치 **
  • 아파치 웹 서버에 최적화된 WSGI 모듈을 mod_wsgi다.
  • 이 모듈은 아차피 프로세스 안에서 혹은 아파치 와 통신하기 위해 분리된 프로세스 안에서 파이썬 코드를 실행한다.

Comments