본문 바로가기

# Development

(39)
[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 데이터를 체크..
[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..
[클린 코드] 클래스 클린 코드: 클래스 1. 단일 책임 원칙(SRP)을 지킨다. 하나의 클래스는 하나의 책임만 가진다. 2. 응집도를 높인다. 응집도가 높을수록 클래스의 메서드들은 인스턴스 변수들을 많이 사용한다. ### as-is class LowCohesion: def __init__(self): self.a = ... self.b = ... self.c = ... def process_a(self): print(self.a) def process_b(self): print(self.b) def process_c(self): print(self.c) ### to-be class HighCohesion: def __init__(self): self.abc = ... def process_a(self): self.abc.p..
[클린 코드] 함수 클린 코드: 함수 1. 하나의 역할만 수행한다. (Single Responsibility Principle) 함수의 역할이 많아지면 안좋은점 가독성이 떨어진다. 오류가 생길 가능성이 커진다. 함수에 대한 테스트를 진행하기 어려워진다. ### as-is def create_user(email, password): # validation 로직 if "@" not in email or len(password) < 6 : raise Exception("유저 정보를 제대로 입력하세요") user = {"email" : email, "password" : password} database = Database("mysql") database.add(user) email_client = EmailClient() ema..