http&server 7

ec2 혹은 서버에 애플리케이션 서버를 https로 띄워야할 때

가끔 프론트 애플리케이션을 https 페이지에서 테스트하게 될 때가 있는데, https 페이지에선 보안상의 이유로 https 통신을 지원하지 않는 api 서버에 요청을 보낼 수 없다. 따라서 애플리케이션 서버를 https 지원되는 서버에 띄워서.. https 웹서버로 요청을 받은 다음, 특정 포트에 임시로 띄워놓은 서버 애플리케이션으로 리다이렉트를 해줘야 한다. 더 나은 방법이 있을 수 있지만, 내가 주로 쓰는 방법은 다음과 같다. 애플리케이션 서버가 EC2에서 동작할 때 (ex. express application running on port 8080) 다음과 같은 순서로 작업을 진행... ec2에 nginx 설치 route53을 통해 도메인 연결 (없으면 가비아에서 구매) 도메인 연결 후 certbo..

http&server 2021.05.30

딥러닝 모델의 API화 (AWS lambda)

딥러닝 모델 (pytorch, keras, ...) 개발을 끝내고, 실 서비스를 위한 API화를 할 때 이전 까지 나는 보통 flask/gunicorn으로 감싸서 도커화 한 이후에 쿠버네티스에 띄우든, 독립된 서버에 띄우든 하는 방식을 생각해왔다. 이 때, AWS Lambda(람다)를 이용하면, API 서버를 직접 작성할 필요 없고, 특정 형식을 따르는 핸들러만 만들어 업로드하면 된다. (물론 자잘한 config가 필요하긴 함) API 서버 구현에서의 복잡도를 줄여주는 것 말고도 아마존웹서비스 람다 하면, 서비스 스케일 조정에 있어 매우 유연하다는 점을 빠뜨릴 수 없다. 어쨌든, 모델 및 예측 함수를 람다에 올리는 방법은 다양하다. 1. serverless 프레임워크를 이용 2. AWS의 sam(serv..

http&server 2021.01.27

celery + flask 를 이용한 파이썬 비동기 처리 API 구현

flask는 유저의 요청을 동기적으로 처리한다. 실행 시간이 오래 걸릴 것으로 기대되는 엔드포인트의 경우, 비동기 처리 방식으로 구현하고 싶을 수 있는데 celery 를 이용해서 아래와 같이 구현하면 된다. celery의 백엔드로 레디스를 사용할 것이므로 먼저 설치&실행 해준다. 아래 코드에선 - 비동기 작업 (adder) 시작 - 특정 태스크(id)의 상태 체크 - 결과 받아보기 endpoint를 구현하였다. import os import sys import time from flask import Flask from flask import request from flask import jsonify from celery import Celery def make_celery(app): celery = ..

http&server 2021.01.05

04. Nginx 기초 사용법 정리 2 (location, proxy, cache)

글이 좀 길어져서 나누어 보았다. 앞 글에선 nginx의 conf에 대한 기본적인 설명과 동작 방식에 대해서 정리했다. 이 글에선 location 지시어의 좀 더 구체적인 사용법 및 가상 호스트, 서브 도메인, 프록시 서버에 대한 정리를 해보자. location directive 사용법 로케이션 지시어는 서버 블락 안에서 URI 매칭을 해준다. regex도 지원한다. server { location / { root /data/www; } location /images/ { root /data; } } URI 가 /와 매칭된다면, root에 명시된 주소와 URI를 합친다. 만약, 매칭 후보가 여럿이라면 '가장 긴 prefix'에 해당하는 주소를 고른다. /images/로 시작하는 URI라면 서버는 /dat..

http&server 2020.07.29

03. Nginx 기초 사용법 정리 1 (conf, directives)

nginx의 매우 기본적인 부분에 대해서 정리한다. 이 전에 문서를 보고 번역 & 정리해 놓은 자료를 다시 한 번 정리한다. 'nginx를 사용할 줄 안다' 함은 결국 'conf 파일을 설정/이해할 줄 안다'로 귀결되는 듯 하다. 겁 먹을 필요 없이, 그냥 읽고 해석하고 고칠 줄만 알면 된다. Nginx의 특징 엔진엑스는 Reactor 패턴을 따른다. 하나는 이벤트를 받아 전달해주는 리액터, 다른 하나는 리액터가 보낸 이벤트를 실제로 받아 처리하는 핸들러 즉 하나의 마스터 프로세스가 있어서, config 및 worker를 관리하고 여러 워커 프로세스가 있어서 실제 요청을 처리하는 느낌이다. 기본적으로는 싱글 쓰레드를 이용해서 몇 천개의 커넥션도 효율적으로 관리가 가능하다. (필요에 따라 fork를 써서 ..

http&server 2020.07.29

02. flask + gunicorn + docker 조합

파이썬을 이용해서 웹 애플리케이션 서버를 작성할 때, flask 만큼 쉬운게 없다고 생각한다. 회사에서도 간단한 WAS를 작성할 때 flask를 사용하고 있다. flask 관련해서 기억하고 싶은 것들 몇 가지를 정리해본다. Flask 와 Gunicorn, 그리고 Docker 같이 쓰기 플라스크는 내부적으로 Blocking 작업이 있을 경우, A가 API 작업에 요청을 보내고 B가 동일 API에 요청을 해도, A가 다 처리 될 때 까지 기다린다. 따라서 flask 앱 내부에서 IO(request, file) 작업을 할 때 주의 해야한다. 플라스크 앱은 기본적으로 synchronous 하다. 하지만, 이 부분에서 gunicorn을 통해 여러 워커를 띄워 워커 개수 만큼의 요청을 동시에 처리하게 할 수 있다...

http&server 2020.07.29

01. Web Server, WAS, CGI, WCGI에 대해

웹 관련 몇 가지 용어에 대해서 정리해본다. Web Server 웹서버는 기본적으로 클라이언트로부터 요청된 웹 리소스를 서빙해주는 소프트웨어라고 정의한다. 기본적으로는 정적인(static) 자원을 그대로 리턴해주는 역할이 핵심이다. 동적인(dynamic) 자원을 리턴하고 싶다면 뒷단에 WAS(Web Application Server ; flask, node)를 배치하여 커뮤니케이션하면서 WAS의 결과를 서빙해주는 식으로 동작한다. 보통 80번 포트에서 대기하고 있고, 요청이 들어오면 해석해서 응답한다. CGI라는 것이 있어서 이를 통해 앱을 실행시키거나 static file을 리턴하기도 함. (CGI는 이후에 설명) 예시로, nginx와 apache 서버 등이 있다. 프로세스 기반의 apache 서버도,..

http&server 2020.07.29