Twilio SendGrid를 사용하는 Python Flask 웹 앱용 사용자 지정 오류 보고서 이메일

게시 됨: 2020-05-18

Python 웹 애플리케이션이 프로덕션에서 발생하는 오류에 대해 빨리 알수록 더 빨리 해결할 수 있습니다. 이 게시물에서는 Python 빌드 Flask 웹 애플리케이션용 Twilio SendGrid를 사용하여 사용자 지정 예외 보고 이메일을 보내는 방법을 보여줍니다.

튜토리얼 요구 사항

이 튜토리얼을 진행하려면 다음 소프트웨어가 필요합니다.

  • 파이썬 3.6 이상. 운영 체제에서 Python 인터프리터를 제공하지 않는 경우 python.org로 이동하여 설치 프로그램을 다운로드할 수 있습니다.
  • Twilio SendGrid 계정. 이 문서에서는 아직 계정이 없는 경우 이를 설정하는 방법을 안내합니다. 무료 SendGrid 계정을 사용하면 하루에 최대 100개의 이메일을 영원히 보낼 수 있습니다.

Twilio SendGrid 사용

프로그래밍 방식 액세스를 위해 SendGrid를 설정하는 것으로 시작합니다. 이미 계정이 있는 경우 "API 키 가져오기" 섹션으로 건너뛰십시오.

다음을 통해 Twilio SendGrid 계정을 만듭니다.

  1. Twilio SendGrid의 가입 페이지로 이동합니다.
  2. 사용자 이름, 암호 및 이메일 주소를 만듭니다.
  3. 나머지 양식을 진행한 다음 "계정 만들기"를 클릭합니다.

좀 더 자세한 정보를 입력하라는 메시지가 다시 표시되며 확인 절차를 완료해야 합니다. 이 다단계 인증 프로세스는 악의적인 스팸 발송자를 차단하는 동시에 귀하와 같은 합법적인 개발자에게 서비스를 제공하는 데 도움이 됩니다.

계정 확인을 위해 가입할 때 사용한 주소로 이메일을 받게 됩니다. 확인이 완료되면 SendGrid 대시보드로 이동합니다.

API 키 얻기

인증하고 API 요청을 할 수 있도록 Twilio SendGrid의 API 키가 필요합니다.

대시보드로 이동하여 "설정"을 클릭합니다. 그런 다음 "API 키"를 클릭하십시오.

"API 키 생성" 버튼을 클릭하고 API 키의 이름을 "플라스크 오류 보고서"로 지정합니다. "제한된 액세스"를 선택하십시오.

그런 다음 "메일 보내기" 드롭다운을 클릭합니다. 슬라이더를 사용하여 "메일 보내기" 옵션을 활성화합니다.

하단으로 스크롤하여 "만들기 및 보기" 버튼을 클릭합니다. 키를 복사한 다음 애플리케이션에서 사용할 것이기 때문에 안전한 곳에 붙여넣습니다.

Python 개발 환경 만들기

이제 코드를 작성하기 전에 Python 환경을 설정해야 합니다. 프로젝트를 위한 새 디렉터리를 만들고 그 아래에 가상 환경을 만듭니다. 그런 다음 가상 환경 내에서 필요한 Python 패키지를 설치합니다.

Unix 또는 Mac OS 시스템을 사용하는 경우 터미널을 열고 다음 명령을 입력하여 위에서 설명한 작업을 수행합니다.

Windows에서 자습서를 따르는 경우 명령 프롬프트 창에 다음 명령을 입력합니다.

마지막 명령은 Python 패키지 설치 프로그램인 pip 를 사용하여 이 프로젝트에서 사용할 두 개의 패키지를 설치합니다.

  • Flask는 웹 애플리케이션을 위한 마이크로프레임워크입니다.
  • Flask는 선택적으로 환경 변수를 관리하기 위해 python-dotenv를 사용할 수 있으므로 이 패키지도 설치합니다.

참고: SendGrid 라이브러리는 공식 Twilio SendGrid Python API 클라이언트입니다.

Flask 애플리케이션 설정

이제 기본 Flask 애플리케이션에 대한 코드 작성을 시작할 수 있습니다. 이전 단계에서 flask-error-alerts 디렉토리로 이동하여 원하는 편집기를 시작하십시오. 두 개의 파일을 만들 것입니다.

  1. .env
  2. app.py

첫 번째 파일은 "dot-env" 파일입니다. 여기에 이전 단계의 SendGrid API 키와 Flask 애플리케이션의 다른 구성 값을 배치합니다. 두 번째 파일은 Flask 애플리케이션이 위치할 위치입니다. 이 파일을 약간 변경하고 Flask 응용 프로그램을 테스트해 보겠습니다.

다음을 포함하도록 .env 파일을 편집합니다.

다음을 포함하도록 app.py를 편집합니다.

이제 애플리케이션이 예상대로 실행되는지 확인할 수 있습니다. 터미널을 열어 virtualenv가 활성 상태인지 확인한 다음 내장 개발 서버로 Flask 앱을 ​​실행합니다.

다음으로 브라우저를 localhost:5000/으로 이동하여 "Helloworld!"가 표시되는지 확인합니다. 텍스트.

위 스크린샷과 같은 화면이 보이면 진행하신 것입니다.

SendGrid로 경고 구성

처리되지 않은 예외 생성

이제 처리되지 않은 예외가 있을 때 이메일 경고를 보내도록 Flask 애플리케이션을 구성해야 합니다. 우리가 할 첫 번째 일은 처리되지 않은 예외를 발생시키도록 app.py 를 수정하는 것입니다.

처리되지 않은 예외가 발생하는 상황을 만들었으므로 애플리케이션을 다시 시작하고 현재 동작을 관찰해 보겠습니다. "Ctrl+C"를 사용하여 Flask 응용 프로그램을 중지하고 다시 시작하겠습니다.

이제 localhost:5000/으로 이동하면 500개의 내부 서버가 생성됩니다. 그러나 이것은 우리가 예상한 것입니다. 버그로 인해 충돌하는 응용 프로그램에서도 동일한 일이 발생할 것입니다.

Flask 처리되지 않은 예외에 연결

Flask의 기본 제공 예외 처리기에 연결할 수 있는 일부 코드를 추가해야 애플리케이션이 처리되지 않은 예외에 대한 응답으로 이메일을 보낼 수 있습니다. 그렇게 하면 SendGrid를 사용하여 예외에 대한 이메일을 보낼 수 있습니다. 해당 텍스트 편집기를 실행하고 이 코드를 app.py 에 추가해 보겠습니다.

Flask에는 내장된 오류 처리기가 있습니다(자세한 내용은 여기 참조). @app.errorhandler 데코레이터를 사용하여 Flask 애플리케이션에 함수를 등록합니다. 애플리케이션에서 특정 유형의 오류가 발생할 때 실행되는 함수를 등록할 수 있다는 점을 제외하면 @app.route 데코레이터와 매우 유사합니다. 이 경우 InternalServerError 예외에 주의를 기울이고 있습니다. 이것은 Flask와 그 기본 유틸리티 라이브러리 Werkzeug가 처리되지 않은 예외가 발생할 때마다 발생시키는 예외입니다.

참고: Python의 내장된 역추적 모듈을 사용하여 역추적 정보를 검색합니다. error_tb 라는 변수는 역추적을 포함하는 문자열입니다. 이 역추적은 Flask 애플리케이션에서 처리되지 않은 예외가 발생할 때 터미널에서 보는 것과 정확히 동일합니다. 다음 섹션에서 이 정보를 SendGrid 이메일로 전달할 것입니다.

또한 app.finalize_request 메서드에 대한 호출을 추가했습니다. 이것은 Flask 애플리케이션의 기본 동작을 유지합니다. 처리되지 않은 예외가 발생하면 여전히 브라우저에 내부 서버 오류 응답을 반환합니다.

SendGrid로 경고 이메일 보내기

이제 경고 이메일을 보내도록 코드를 설정할 수 있습니다. 따라서 다음을 포함하도록 app.py를 업데이트하여 이를 수행해 보겠습니다.

SendMail Mail 개체를 설정하는 create_message 라는 함수를 추가했습니다. 이 개체는 .env 파일에서 FROM_EMAILTO_EMAIL 을 가져옵니다. 즉, .env 파일에 다음 줄을 추가해야 합니다.

.env 파일을 사용하여 값을 로드하기 때문에 dotenv 모듈의 load_dotenv 함수에 대한 호출도 추가해야 했습니다. 이렇게 하면 코드가 실행될 때 애플리케이션 코드에서 필요한 환경 변수를 사용할 수 있습니다.

상단 근처에서 SendGrid API 클라이언트의 인스턴스를 만들었습니다.

이 클라이언트는 SENDGRID_API_KEY 라는 환경 변수를 자동으로 찾고 이를 사용하여 SendGrid 서버에 대해 인증합니다. .env 파일의 다른 변수와 마찬가지로 load_dotenv 호출은 변수가 프로세스 환경으로 임포트되도록 합니다.

이 섹션에서 마지막으로 주목할만한 추가 사항은 SendGrid API 호출입니다.

해당 코드 블록에서 일어나는 모든 일은 SendGrid를 사용하여 이메일을 보내려고 시도하지만 예외가 발생하면 오류가 무엇인지 출력합니다. 프로덕션 응용 프로그램에서는 SendGrid 서비스를 일시적으로 사용할 수 없기 때문에 오류가 발생할 가능성이 가장 높기 때문에 이 작업을 다시 시도할 수 있습니다.

경고 테스트

코드를 변경했으면 테스트해 보겠습니다! 따라서 여기서 기대하는 것은 localhost:5000/에서 Flask 애플리케이션을 방문한다는 것입니다.

  1. 브라우저에서 500 내부 서버 오류를 수신합니다.
  2. 역추적을 포함하는 이메일 알림을 받습니다.

테스트하려면 변경 사항이 적용되도록 Flask 애플리케이션을 다시 시작해야 합니다. 따라서 Flask 개발 서버가 실행 중인 경우 "Ctrl+C"를 사용하여 중지하고 다음을 사용하여 다시 시작합니다.

이제 localhost:5000/으로 이동하여 500 내부 서버 오류를 수신하겠습니다. 1~2분 후에 다음과 같은 이메일을 받게 됩니다.

결론

당신은 그것을 가지고 있습니다! 우리는 비교적 적은 양의 코드로 매우 편리한 경고 시스템을 구축했습니다. 이제 Flask 애플리케이션은 처리되지 않은 예외가 발생할 때마다 이메일 알림을 보냅니다.

이 튜토리얼을 따라 하는 것이 즐거우셨기를 바라며 질문이 있는 경우 언제든지 연락해 주십시오. 이 튜토리얼에서 개발한 모든 코드는 여기에서 찾을 수 있습니다.