분류 전체보기 87

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

03. Docker 이미지 저장 경로 변경법

OS가 설치된 디스크 영역이 작을 때, 도커 이미지로 넘쳐나 용량이 부족해지는 문제를 방지하기 위해서 애초에 도커를 설치하고 나서 혹은 사용 중간에 도커 이미지 저장 경로를 변경할 수 있다. vim /usr/lib/systemd/system/docker.service => ExceStart=/user/bin/docker -g /새로운경로 위와 같이 추가해주고, sudo systemctl restart docker 를 입력해주자. 중간에 docker.service 파일이 변경 되었으니 어떤 명령어를 먼저 쳐주라는 에러가 나올 수도 있는데, 시키는 대로 해주면 된다. (19.03 버전 기준)

docker 2020.07.29

02. Docker-compose, Swarm

Dockerfile 작성 및 Build 방법 일단 책들을 보면 Bash 사용법을 장황하게 + 친절하게 설명해주는 경우가 있는데 꼭 그걸 다 알 필요는 없고, 실제 유즈케이스들을 참고해서 적절히 변형해서 쓰면 된다. 지레 겁먹을 필요가 없는 것! 그래도 필요하다면 참고하자. 이전에 정리해두었던 bash 사용법 링크 dockerfile 작성 후 build하는 방법 기본에 대한 링크 docker-compose로 여러 컨테이너 관리하기 시스템을 도커 컨테이너를 활용해서 구성할 때, 여러 종류의 컨테이너를 키고/끄고 서로 통신하는 경우가 있다. 이 때, 직접 각각을 docker 명령어를 통해 제어할 수 있지만, docker-compose를 적절히 활용하면, 많은 수고를 덜 수 있다. (특히, 하나의 서버 내에서 ..

docker 2020.07.29

01. Docker 기본 명령어

주요 명령어들 특히 자주 쓰는 것들은 강조 표시를 해두었다. 기본적으로 루트 권한이 필요하므로 필요한 경우엔 현재 계정을 docker 그룹에 포함 시킬 필요가 있다. sudo usermod -aG docker ${USER} sudo service docker restart docker hub로 부터 ubuntu 이미지 검색 예시 docker search ubuntu docker hub로 부터 이미지(이미지이름:태그) 받기 docker pull ubuntu:latest 이미지 목록 출력 docker images 컨테이너 생성 - i, t 옵션 지정시 실행된 bash 셸에 입출력이 가능하다. (-it) - p, P 옵션을 통해 포트 바인딩이 가능하다. - d 옵션으로 백그라운드 실행이 가능하다. docker..

docker 2020.07.29

SRP (Single Responsibility Principle)

SRP (Single Responsibility Principle) 하나의 모듈을 변경하는 이유는 오직 한 가지여야 한다. 쉽게 말해, 특정 모듈과 엮여있는 이해 관계자의 부류가 한 가지여야 한다. 하나의 모듈이 여러 이해 관계자와 엮여 있다면, 여러 가지 이유로 모듈이 수정되게 되고, 다양한 의도가 하나의 모듈에 반영되면, 문제로 이어질 가능성이 커진다. 서로 다른 목적으로 변경되는 요소는 적절히 분리하자.

architecture 2020.07.28

디자인 패턴 정리 블로그

아래 블로그를 통해서 Python을 이용한 여러 가지 기본 디자인 패턴의 핵심에 대해 훑어볼 수 있다. 블로그 링크 실용적인 Python 디자인 패턴 정리 Mastering Python Design PatternsMastering Python Design Patterns 을 읽고 정리한 글입니다. velog.io 거의 대부분은 알게모르게 이미 쓰고 있었던 패턴들.. ​ 디자인 패턴을 떠나서 중간중간에 나오는 파이썬에 특화된 문법들은 꼭 기억해둘만 하다! ​ Factory Pattern - Factory Method ; 입력에 따라 객체 생성 방식이 달라질 때 (single step) - Abstract Factory ; 입력되는 클래스 종류에 따라 행동이 달라짐 ​ Builder Pattern - bui..

design pattern 2020.07.28