본문 바로가기

분류 전체보기

(77)
[Flask] Slack Bot 으로 서비스 장애 알림 받기 Slack Bot으로 서비스 장애 알림 받기 에러 핸들링을 할 때 예측이 불가능한 에러는 회사 내 채널(이메일, 슬랙)에 공지해 주어야 한다. 에러 케이스를 확인하고 관리하는 측면에서 Slack이 편할 것 같아 시스템에 장애가 발생할 경우 Slack으로 알림이 오도록 Slack Bot을 만들었다. Slack App 만들기 https://api.slack.com/app 에서 Slack App을 생성 할 수 있다. 1) Create New App 2) From scratch 선택 3) App 이름 입력, App을 사용할 워크스페이스 선택 4) Scopes 설정 사이드바 [OAuth & Permissions]을 클릭하고 스크롤을 아래로 내리면 Scopes 섹션을 찾을 수 있다. [Add an OAuth Sco..
알고리즘 시간 복잡도 계산하기: Big-O 표기법 시간 복잡도: Big-O 표기법 알고리즘의 효율성을 이론적으로 분석하는 방법으로, Big-O 표기법은 불필요한 연산을 제거하여 시간 복잡도를 간단히 나타낸다. 시간 복잡도 입력값과 연산 수행 시간의 상관관계를 나타내는 척도 시간 복잡도 분석 시간 복잡도 분석에서는 알고리즘이 수행하는 연산의 횟수를 계산한다. 입력의 개수가 증가함에 따라 연산의 횟수가 어떤 형태로 증가하는지에 관심을 둔다. 시간 복잡도 함수 알고리즘이 수행하는 연산의 횟수를 나타내는 함수이다. 입력의 개수 n에 대한 함수(T(n))으로 표현한다. n2을 구하는 문제에 대한 3가지 알고리즘이 다음과 같을때, def Algorithm_A T_A(n)=2 # Algorithm_B 덧셈연산: sum+n # n 대입연산: { i T_B(n)=2n+..
[Flask] python-dotenv로 개발/배포 환경 분리하기 python-dotenv 패키지로 개발/배포 환경 분리하기 개발 과정중에 환경변수를 매번 변경해주는 작업은 여간 귀찮은게 아니다. python-dotenv를 사용하면 개발 환경과 배포 환경의 환경변수를 자동으로 세팅할 수 있다. 간단한 Flask 어플리케이션을 예제를 통해 환경변수를 설정해보자. 개발환경 설정 다음과 같은 파일 구조를 가진 Flask 어플리케에션에 환경 변수를 설정해보자. . ├── myproject ├── __init__.py └── function1.py └── run.py Flask 어플리케이션이 잘 작동하는지 확인하기 위해 route에 글자를 띄우는 어플리케이션을 만들어보자. # myproject/__init__.py from flask import Flask def app(): ..
[Nginx] ubuntu 환경에서 Flask 배포하기 (Github, uWSGI, Socket) ubuntu 환경에서 Flask 배포하기 (Github, uWSGI, Socket) 사전준비 패키지 매니징 툴 apt(Advance Packging Tools) 업데이트 $ sudo apt update Git에서 소스코드 다운로드 1. Git 설치 $ sudo apt install git 2. Git 초기화 프로젝트를 시작하고 소스 코드를 Git으로 관리하고자 한다면 먼저 git init으로 저장소를 초기화 해야 한다. 저장소로 사용하고자 하는 디렉터리로 이동한 다음 git init을 실행한다. $ git init 3. 소스코드 주소 복사 GIhub 홈페이지에서 가져올 프로젝트 주소 복사 (프로젝트 화면 > Code > Code > Clone > HTTPS) 4. git clone $ git clone ..
[Flask] Flask에서 Express MiddleWare 사용하기 Express MiddleWare란? 어플리케이션의 요청-응답 사이에서 실행되는 함수, 보통 요청 전 처리 혹은 요청 후 처리에 사용된다. Flask에서 Express MiddleWare를 사용하는 방법 데코레이터 (Decorator) 데코레이터란 함수에 반복적인 기능과 역할을 할 수 있도록 만들어주는 기능이다. 함수 내부 로직 수정 없이 특정 기능을 추가하고 싶을 때 사용한다. 예시로 request 헤더에서 Content-Type을 확인하는 데코레이터를 만들어보자 1. @wraps로 데코레이터로 만들 함수를 정의한다.2. @wraps로 정의 된 함수는 다른 함수를 인자로 받아서 해당 함수가 실행되지 전에 미리 실행한다.3. 인자로 받은 *args, **kwargs를 가져와서 request 데이터를 체크..
[Network] 미들웨어(Middleware)란 무엇인가? 미들웨어(Middleware)란? 양 쪽을 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어 3-Tier 구조에서의 미들웨어(Middleware) [1-Tier 구조] 비즈니스 로직 처리, 데이터 처리 등을 모두 한 곳의 물리적 환경(서버)에서 통합 제공하는 형태 1개의 통합 서버에 문제가 생겼을 때 전체 서비스 장애로 이어진다. 어느 포인트에서 장애를 일으켰는 지 분석이 쉽지 않다. [3-Tier 구조] DBMS서버, 정적 페이지 서버(WEB Server), 동적 페이지 서버(WAS)를 분리해서 제공하는 형태 관리와 유지 보수가 간편해짐 부하의 분산이 가능 WEB Server 사용자의 요청이 유입되는 순간 호출되는 앞단(Front-end)의 정적 페이지(html, css, j..
[Nginx] Nginx란 무엇인가? Nginx란? Nginx는 웹 서버 및 리버스 프록시 서버로 사용되는 경량 웹서버 오픈소스 소프트웨어다. 다중 클라이언트 요청을 비동기적으로 처리하여 높은 처리량과 낮은 지연 시간을 보장 메모리 사용량도 매우 적어서 리소스 효율성이 뛰어남 Nginx 활용 방법 HTTP Web Server로 활용 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답한다. Reverse Proxy Server로 활용 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용한다. ** Revere Proxy 외부 클라이언트에서 서버로 접근 시, 중간에서 중개자 역할을 하여 내부 서버로 접근할 수 있도록 도와주는 서버 Nginx 특징 웹서버로 주로 Apache와 Nginx가 사용되는데 두개는 큰 차이점이 있다. Apa..
[WSGI] WSGI란? WSGI (Web Server Gateway Interface) python으로 작성한 Django, Flask와 같은 웹 프레임워크에서 Apache, Nginx 같은 웹 서버와 통신할 때 사용하는 프로토콜이다. WSGI 특징 1. 파이썬 스크립트가 웹 서버와 통신하도록 도와준다. 2. 웹 서버와 웹 애플리케이션 사이에 위치한다. 🔮 웹 서버 - Apache, Nginx - 웹 서버는 html, image등 정적인 파일, 소스 등을 처리함 🔮 웹 앱 - Django, Flask와 같은 파이썬 프레임 워크 - 동적인 요청을 처리해서 웹 서버에 처리한 결과를 돌려줌 WSGI는 서버와 앱 사이에서 callable object를 통해 웹 서버 요청해 대한 정보를 웹 앱에 전달 CGI 2003년까지 사용하던 파이..