'3.1. Hello Flask' 예제를 통해 간단한 웹 서버를 만들어보았다. 예제 코드를 한 줄씩 살펴보고 파이썬과 플라스크로 만든 웹 서버의 동작을 자세히 분석해보자.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "<h1>Hello Flask</h1>"
if __name__ == "__main__":
app.run("127.0.0.1", 5000)
from flask import Flask
가장 먼저 플라스크 클래스를 가져왔다.
app = Flask(__name__)
플라스크 클래스의 객체를 생성하고 이름이 app인 변수에 할당하였다. 플라스크 객체를 생성할 때 객체의 이름을 인자(argument, 함수의 변수에 해당)로 전달하는데 원하는 문자열을 전달해주면 된다. 예제에서는 파이썬의 __name__ 키워드를 이용해서 객체 이름을 정했는데 이 경우 스크립트 파일의 이름이 생성하는 객체의 이름으로 설정된다.
클래스(class)는 붕어빵의 틀이고 객체(object 또는 instance라고 불린다)는 틀로 찍어낸 붕어빵의 관계다. 좀 더 기술적으로 이야기하자면 클래스의 변수들에 초기값을 설정하고 컴퓨터의 메모리에 적재(load)를 마치면 객체가 된다. __name__ 변수는 파이썬 번역기가 사용하는 예약된 변수다. 파이썬 번역기는 이 __name__ 변수에 현재 파이썬 스크립트(정확히는 모듈)의 이름을 설정한다. __name__의 내용이 궁금하면 print(__name__)으로 값을 볼 수도 있다. |
@app.route("/")
이런 형식을 파이썬 데코레이터(decorator)라고 부른다. 파이썬 데코레이터는 기능 측면에서 바로 아래에 위치하는 코드를 감싼다. 따라서 데코레이터(도입 블록) → 사용자 코드 → 데코레이터(정리 블록) 순서로 코드가 실행된다. Flask 객체의 route("/") 데코레이터는 인자로 전달된 경로인 "/"로 페이지 요청이 들어왔을 때 호출되고 데코레이터 아래에 위치하는 사용자 코드 hello() 함수를 실행시킨다.
def hello():
return "<h1>Hello Flask</h1>"
hello() 함수는 '<h1>Hello Flask</h1>' 문자열을 반환한다. HTML 문법 측면에서 보면 h1(header 1, 제목 1) 크기로 Hello Flask 문자열을 표시하라는 뜻이다.
if __name__ == "__main__":
app.run("127.0.0.1", 5000)
파이썬 번역기는 __name__ 변수에 파이썬 스크립트(정확히는 모듈)의 이름을 할당하는데 만약 현재 실행되는 스크립트가 다른 스크립트에 포함(import)되어 이용되는 것이 아니고 직접 실행된다면 __main__이라는 이름을 준다. 따라서 스크립트가 직접 실행되는 경우 Flask 객체인 app을 실행(run)시키라는 의미가 된다.
run()함수에 주소와 포트번호를 인자로 전달했다. 주소는 네트워크에서 이 스크립트가 실행되는 컴퓨터를 식별할 수 있는 IP 주소를 말하며, 포트번호는 컴퓨터 안에서 실행 중인 여러 프로그램들 중에 이 파이썬 플라스크 프로그램을 식별하기 위한 용도로 사용된다. 예를 들면 부산항에 배를 댈 수 있는 여러개의 항구(port)가 있고 이들 각각을 구분하기 위한 번호와 같은 관계라고 생각하면 된다.
IP 주소 127.0.0.1은 프로그램이 실행 중인 컴퓨터 자신을 지시한다. 자기 자신을 되돌아 본다는 의미로 loop back 주소라고도 한다. |
이 웹 서버 프로그램은 앞서 살펴본 실행 결과처럼 지정한 경로 '127.0.0.1:5000/'로 클라이언트가 접근했을 때 설정된 서비스를 제공한다(주소 맨 뒤에 붙는 경로(path) '/'는 웹 브라우저에서 생략되어 표시된다).
hello_flask 프로그램의 전체적인 흐름은 Flask 객체 생성 → 특정 경로로 페이지 요청이 있을 때 실행할 내용 지정 → Flask 객체 실행과 같다. 짧은 내용이지만 이 뼈대가 큰 틀로써 유지되기 때문에 여러번 보고 충분히 이해했으면 좋겠다.
'파이썬 웹 프로그래밍 기본' 카테고리의 다른 글
4. 웹 페이지 - 4.2. 템플릿 예제 코드분석 (0) | 2020.08.17 |
---|---|
4. 웹 페이지 - 4.1. 템플릿(template) 엔진 (0) | 2020.08.16 |
3. 웹 프로그램 동작 원리 - 3.1. 예제: Hello Flask (0) | 2020.08.14 |
2. 프로그래밍 환경 - 2.2. 프로젝트 생성 (0) | 2020.08.13 |
2. 프로그래밍 환경 - 2.1. Pycharm (0) | 2020.08.12 |
댓글