본문 바로가기

분류 전체보기

(75)
[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년까지 사용하던 파이..
[성능 테스트] Throughput(TPS), Latency Throughput(TPS), Latency: API 성능 테스트 성능테스트란? 제작한 웹 서버(API)가 얼마나 많은 사용할 수 있는지 테스트하거나, 두가지 설계에 대해 어떤 설계가 더 좋은 성능을 내는지 확인하는 테스트이다. 성능의 지표 Throughput (시간당 처리량) 서비스가 1초당 처리할 수 있는 작업량이다. 단위로는 주로 TPS(Transaction per seconds)를 사용함 Throoghput이 클수록 작업이 더 빨리 끝남 높은 수치일수록 성능이 좋음 Latency (지연시간) 시스템이 클라이언트로부터 Request를 받아서 Response를 보내주기까지 걸리는 시간을 의미한다. 특정 작업을 얼마나 빨리 처리할 수 있는지 나타내는 성능 지표 Latency가 작을수록 더 빨리 응답함 ..
[클린 코드] 에러 핸들링 클린 코드: 에러 핸들링 1. 오류 코드 보다는 예외(Exception)을 사용한다. try, except를 사용하면 오류인지 확인하는 불필요한 로직을 줄일 수 있다. ### as-is from enum import Enum class ErrorCodes(Enum): VALUE_ERROR="VALUE_ERROR" def we_can_raise_error(): ... return ERROR_CODES.VALUE_ERROR def use_ugly_function(): result = we_can_occur_error() if result == ErrorCodes.VALUE_ERROR: # 처리 코드 ... ### to-be def we_can_raise_error(): if ... raise ValueErr..