파이썬 플라스크로 구현된 서버에서 오류가 발생할 경우,
웹사이트 상에서 에러 메시지가 보이지 않습니다.
이런 경우, 플라스크에 내장된 디버그 모드를 활용하면, 오류 상황을 조회할 수 있어 편리한데요.
이번 글에서는 Flask의 Debug 모드에 대해서 예제를 통하여 간단하게 살펴보도록 하겠습니다.
디버그 모드 미적용 경우
우선, 아래와 같은 간단한 기능을 플라스크를 통하여 실행해보도록 하겠습니다.
참고로, app.run에서 debug 인자의 기본 값은 False인 점을 참고해주세요.
from flask import Flask
app = Flask(__name__)
@app.route('/<number>')
def square(number):
return f'{number} ** 2 = {int(number) ** 2}'
if __name__ == '__main__':
app.run()
# app.run(debug=False)
사이트의 주소 끝에 수 하나를 입력하면 해당 숫자의 제곱을 반환하여
결과를 페이지에 출력해주는 간단한 예시 코드입니다.
실행 예시는 다음과 같습니다.
그러나, 주소 끝에 수가 아닌 문자열이 들어온다면,
연산 및 int 함수 적용이 불가능하여 아래와 같이 오류가 발생합니다.
해당 메시지만 살펴봐서는 오류의 원인을 정확하게 파악하기가 힘듭니다.
물론, 서버 코드를 실행 중인 터미널 상에서는 오류 메시지가 조회되기는 하지만,
작업 상황이 복잡해지면 터미널에서 직접 해당 에러를 조회하기 어려운 경우도 많습니다.
이런 경우 debug 모드를 활용하면 편리합니다.
디버그 모드 적용 경우
이제, 디버그 모드를 사용하여 위 상황을 재현해보도록 하겠습니다.
사용 방법은 간단합니다. app.run에서 debug 인자만 True로 지정해주시면 됩니다.
from flask import Flask
app = Flask(__name__)
@app.route('/<number>')
def square(number):
return f'{number} ** 2 = {int(number) ** 2}'
if __name__ == '__main__':
app.run(debug=True)
이제, 위에서 오류가 발생했던 페이지로 다시 접속해보겠습니다.
가장 상단에 ValueError의 메시지가 출력되고, Traceback 결과가 순서대로 등장하게 됩니다.
각 파란색 칸을 클릭해보면 상세한 메시지 확인이 가능하고,
가장 우측 부분의 터미널 모양을 클릭하면 해당 위치의 콘솔 접속이 가능합니다.
참고로, 터미널 모양을 클릭하면 보안을 위하여 PIN 번호 입력란이 뜨는데,
해당 핀번호는 서버를 실행시킨 터미널 상에 들어가면 확인이 가능합니다.
PIN 번호 입력 시, 아래와 같이 콘솔 상에서 변수 값 조회 및 코드 실행이 가능합니다.
디버그 모드 추가 장점
디버깅 모드의 또다른 좋은 점은 서버 코드를 중간에 변경한 결과를
코드 재실행 없이 바로 확인할 수 있다는 점입니다.
서버 실행 중에 코드를 아래와 같이 변경하고 재실행 없이 저장만 해보겠습니다.
from flask import Flask
app = Flask(__name__)
@app.route('/<number>')
def square(number):
try:
number = int(number)
return f'{number} ** 2 = {int(number) ** 2}'
except:
return '정수가 아닙니다!'
if __name__ == '__main__':
app.run(debug=True)
페이지를 새로고침만 해줘도 아래와 같이 수정된 페이지가 등장하게 됩니다.
debug=False인 경우에는 서버 코드 파일 전체를 재실행해야하는 번거로움이 있었는데
이 점이 해결되었기에 디버깅하는 경우 훨씬 편리함을 느낄 수 있을 것입니다.
'Python > Backend' 카테고리의 다른 글
FastAPI에서 MongoDB 데이터 연동 CRUD 예제 (0) | 2024.05.06 |
---|---|
FastAPI get, post, patch, delete 예제 코드 정리 (0) | 2024.04.24 |
파이썬 FastAPI / Flask 로컬 서버 포트(127.0.0.1) 띄우기 방법 정리 및 차이 비교 (0) | 2023.09.22 |