웹개발/Flask

__name__, __main__, entrypoint, 엔트리포인트

Olivia-BlackCherry 2022. 11. 2. 16:54
__name__

__name__은 파이썬에 내장된 특수 속성으로 클래스, 함수, 메서드, 객체 등의 이름을 출력할 수 있다.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

 

 

위의 코드에서 name을 출력해보면 main이 나온다.

main은 최상위 코드 환경일 때 실행된다.

print(__name__)

 >>__main__

 

 

 

※ 엔트리포인트 entrypoint

프로그래밍 언어에서 최상위 코드가 실행되는 시작점을 entry point라고 한다. 

__main__은 엔트리 포인트가 있는 영역의 이름을 뜻한다.

엔트리 포인트는 다른 곳에서 모듈을 import해서 실행하는 것이 아니라, 직접 실행하는 지점이라고 말할 수 있다.

import random
print(__name__)
print(random.__name__)

 

 

if __name__ == '__main__': 조건문

이런 성질을 이용하여

if __name__ == '__main__': 조건문을 자주 사용되는데,

이 코드는 모듈이 최상위 환경에서 실행된 경우에만 실행한다는 뜻이다.

if __name__ == '__main__':
    # Execute when the module is not initialized from an import statement.
    ...

 

Flask 앱을 실행할 때도 흔히 사용된다. 현재 파일(main2.py) 내에서 코드가 직접 실행 중이라는 뜻이다.

아래와 같이 실행하면 환경변수를 넣어줄 필요도 없고, 버튼을 이용해서 실행, 중지가 가능하다.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

print(__name__)

if __name__ == "__main__":
    app.run()

>>__main__
 * Serving Flask app 'main2'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit