์ฐ๋ฆฌ๊ฐ ํํ ์ ๋ณด๋ค์ ์ ํ๊ณ ์ฌ์ฉํ๋ ๋ง์ ์๋น์ค๋ '์น ์๋ฒ'๋ฅผ ํตํด ์ฐ๋ฆฌ์๊ฒ ์ ๊ณต๋๊ณ ์๋ค.
ํด๋ผ์ด์ธํธ๋? ์ฌ์ฉ์/ ์ฌ์ฉ์ ์ปดํจํฐ / ์ธํฐ๋ท ๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ฏธํ๋ค. ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์์ฒญํ๋ค.
์๋ฒ๋? ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํด์ฃผ๊ณ ์๋ต์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๋ ค์ฃผ๋ ๊ณณ์ ์๋ฏธํ๋ค.
์น ์๋ฒ์ ๋์: ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ์์ฒญ์ ํ๊ณ , ์์ฒญ์ ๋ฐ์ ์๋ฒ๋ ์์ฒญ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ต์ผ๋ก ๋๋ ค์ค๋ค.
์๋ฒ์ ์๋ต์ผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ๋ ์๋ต์ธ ๋ฐ์ดํฐ๋ HTML, JSON, XML ๋ฑ ๋ค์ํ ํํ๊ฐ ๋ ์ ์๋ค.
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ์ ๋ณด ๊ตํ์์๋ ๋ฏธ๋ฆฌ ์ฝ์ํ ๊ท์น์ ํตํด์ผ ํ๋ค.
ํด๋ผ์ด์ธํธ๋ ๊ท์น์ ๋ฐ๋ผ ์์ฒญ์ ํ๊ณ , ์๋ฒ ๋ํ ์ ํด์ง ํํ์ ๋ฐ์ดํฐ๋ก ์๋ต์ ํ๋ค.
์น์ฌ์ดํธ์ ์ ์ ์ฃผ์๋ ๋ฏธ๋ฆฌ ์ฝ์๋ ์ฃผ์๋ผ๊ณ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๊ตฌ๊ธ์ url ์ฃผ์ (https:// www.naver.com)๊ฐ ์๋ค. ํด๋น ํ์ด์ง์ url ์ฃผ์๋ฅผ ์ฃผ์์ฐฝ์ ์ ๋ ฅํ๋ฉด, ์ฝ์๋ ๋ฐฉ๋ฒ์ผ๋ก ์์ฒญํ ํ ํด๋นํ๋ ํ์ด์ง๋ฅผ ๋ณด๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ ํด์ง ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ์ ํต๋ก ์ญํ ์ ํ๋ ๊ฒ์ด ๋ฐ๋ก API๋ผ๊ณ ํ ์ ์๋ค.
ํ๋์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค๊ธฐ ์ํด์ ์ ๊ณตํ๋ ์น ๊ฐ๋ฐ 'ํ'์ด๋ค.
๋ฏธ๋ฆฌ ์์ฑ๋์ด ์๋ ํจ์(๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ๊ทธ ์ด์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
Python์ ์ฌ์ฉํด์ ์น ์๋ฒ๋ฅผ ๋ง๋ค ์ ์๊ฒ ๋์์ฃผ๋ Web Framework์ด๋ค
Python ๊ธฐ๋ฐ์ Framework๋ก๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋๋ฐ
๋ค๋์ ๊ธฐ๋ฅ์ ๋ฏธ๋ฆฌ ์ ๊ณตํ๋ Django (์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ด ๋ง์)
๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๋ MicroFramework: Flask, Pyramid, Bottle (๊ฐ๋ฐ์ด ์์ ๋กญ๋ค)
๊ฐ ์๋๋ฐ, ๊ฐ๊ฐ์ Framework ๋ง๋ค ์ฅ/๋จ์ ์ด ์๋ค.
์น ์๋ฒ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ณต์กํ ๊ฒ ๊ฐ์ง๋ง Flask Framework๋ฅผ ์ฌ์ฉํด์
๊ฐ๋จํ ์ฝ๋๋ง์ผ๋ก ์๋ฒ๋ฅผ ๋ง๋ค ์ ์๋ค.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def alex():
return 'hello alex'
if __name__ == '__main__":
app.run()
__name__
== '__main__
'์, ํ์ผ >์ด๋ฆ์ด main์ผ ๋๋ง app.run()์ด ์คํ๋๋๋ก ํ๋ค.app.route()๋ url์ ๋ง๋ค์ด์ค๋ค. app.route()์ ์ด์ด์ ธ ์๋ ํจ์๋ฅผ ์ฌ์ฉํด์ HTML๊ณผ JSON ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด๋ณด์.
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def alex_json():
my_data = {'name':'elice'}
return jsonify(my_data)
if __name__ = '__main__':
app.run()
<html>
<head>
<title>๋์ ์ฒซ html</html>
</head>
<body>
<h4>htmlํ์ผ ๋์ฐ๊ธฐ</h4>
</body>
</html>
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def elice_html():
return render_template('index.html')
if __name__ == '__main__':
app.run()
@app.route('url')
HTTP URL์ ํตํด ๋ฐ์ดํฐ์ ์์์ ํํํ๊ณ , HTTP Method๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
Database, ์ด๋ฏธ์ง, ํ
์คํธ ๋ฑ์ ๋ค์ํ ๋ฐ์ดํฐ์ ์ ์ฉํ ์ ์๋ค.
GET๊ณผ POST๋ HTTP Method ์ค ํ๋์ด๋ค. GET์ ๋ฐ์ดํฐ๋ฅผ URL ๋ค์ ?์ ํจ๊ป ์ฌ์ฉํ๊ณ POST๋ ํน์ ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด ์ ์กํ๋ ๋ฐฉ๋ฒ์ด๋ค.
http://์ฌ์ดํธ์ ์ฃผ์?๋ฐ์ดํฐ=123
http://์ฌ์ดํธ์ ์ฃผ์
์ผ์ ํ ์์์ ๋ด์ ๋ฐ์ดํฐ๋ฅผ ์จ๊ฒจ์ ์๋ฒ์ ์ ์กํ๋ค. (url์ด ๊ฐ์๋ ๋ด์ฉ์ ๋ค๋ฅผ ์ ์์)
@app.route('url1', methods=["GET"]
@app.route('url2', methods=["POST"]
@app.route('url3', methods=["GET", "POST"]
from flask import *
app = Flask(__name__)
@app.route('/', methods=['GET']) # url ๋ค์ ?name=alex๋ฅผ ๋ฃ์ด get ์์ฒญ์ ํ๋ค.
def alex():
name = request.args.get['name']
result = 'hello. ' + name
return result
if __name__ == '__main__':
app.run()
index.html
<html> <body> <form action='/login' method='post'> <p> ์์ด๋: <input type='text' name='id'> </p> <p> ๋น๋ฐ๋ฒํธ: <input type='password' name='pwd'> </p> <button type='submit'> </form> </body> </html>
app.py
from flask import * app = Flask(__name__) @app.route('/', methods=['GET']) def alex(): return render_template('index.html') @app.route('/login', methods=['POST']) def alex_post(): id = request.form['id'] pwd = request.form['pwd'] if id == 'alex' and pwd ='1234': return 'Hi! Alex!' else: return 'ERROR' if __name__ == '__main__': app.run()