본문 바로가기

분류 전체보기

(351)
Python WAS (Django, Wsgi, Nginx) 구축하기 - 로컬 0. 들어가며 docker와 django 배포 작업을 안한지 너무 오래되었고, 기억이 잘 안나서 이 참에 블로그로 정리해보려고 한다. Python으로 rest api 서비스를 오픈할 수 있지만 Django의 runserver는 단순히 테스트만을 위한 기능이기 때문에 운영 배포 목적으로 하는 서비스에서 사용하면 성능상 문제를 겪게 된다. Web Application은 Django를 사용할 것이며, 앞단에 Web Server인 Nginx를 리버스 프록시로 두고 Django와 Nginx를 Wsgi(Gunicorn)으로 연동하는 작업을 할 것이다. Gunicorn을 사용하는 이유는 uWSGI나 Gunicorn 등은 Nginx로 들어오는 HTTP Request를 파이썬이 이해할 수 있게 동시 통역하는 존재들이다...
[BOJ] 15683. 감시 https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 1. 해결방법 이 문제는 시뮬레이션 문제이다. 주어진 상황을 차례로 코드로 구현시키면 되고 모든 경우를 찾아봐야 하므로 완전탐색 dfs 재귀를 사용해야 한다. 본인은 생각하지 못한 점인데 direction 각 cctv의 방향을 미리 리스트화 시키는 것이다. 그리고 dy, dx를 통해서 그래프의 상하좌우를 정해준다. direction에 원소 값들과 인덱스 위치 값을 stack에 appen..
[Docker] 도커의 데이터 관리 및 저장 (volume, mount) 1. Volume 볼륨 기본적으로 도커 컨테이너는 독립적인 저장소를 가지고 있다. 하나의 이미지 여러 컨테이너를 만든다면 해당 컨테이너마다 독립적인 볼륨이 할당되고 컨테이너가 삭제되면 해당 볼륨 또한 삭제된다. 여기서 문제는 컨제이너 내부에 저장된 데이터는 컨테이너가 삭제되었을 경우 같이 삭제된다. 도커에서 돌아가는 애플리케이션이 컨테이너의 생명주기와 관계없이 데이터를 영속적으로 저장해야할 필요가 있다. 특히 여러 개의 도커 컨테이너가 하나의 저장 공간을 공유해서 데이터를 읽거나 써야한다. 도커에서 데이터의 영속성을 보장하기 위해서는 볼륨과 바인드 마운트를 이용해야한다. 도커 공식 문서에서 권장하는 방식으로 도커 엔진이 관리하는 도커 스토리지 디렉토리에 새 디렉토리를 생성하여 컨테이너 내부의 볼륨 데이터..
[Docker] ports (docker run -p)와 Dockerfile의 EXPOSE 차이점 1. ports (docker run -p) 도커 run 명령어로 도커 컨테이너를 실행시킬 때, -p 옵션으로 호스트의 운영체제 포트와 컨테이너 포트를 매핑시킬 수 있다. docker run -it -p 8000:8000 django 위 명령어의 의미는 호스트의 8000번 포트와 도커 컨테이너의 8000번 포트를 매핑된다는 뜻이다. 즉, 호스트 운영체제의 8000번 포트로 전달되는 정보들이 도커를 통해 컨테이너의 8000번 포트로 포워딩된다는 의미이다. 위의 이지미에서 이미지와 함께 보자면, 호스트OS 내부를 'WORLD INSIDE DOCKER'로 보시면 되고 외부 호스트를 'WORLD OUTSIDE DOCKER'로 보시면 된다. ports는 호스트 OS와 컨테이너의 포트를 바인딩 시켜준다. (port..
Forward Proxy, Reverse Proxy 1. Proxy Server Proxy란 "대리" 즉, 남의 일을 대신한다는 의미로 간략하게 설명할 수 있다. 그렇다면 Proxy Server란 무엇일까? "대신 처리하는 서버"로 간략하게 의미를 정의할 수 있다. 조금 더 저세히 설명하면 클라이언트와 서버간의 중계 서버로, 통신을 대리 수행하는 서버 (ex. 캐시, 보안, 트래픽 분산 등 여러 장점을 가질 수 있다) 2. Forward Proxy Forward Proxy는 일반적으로 말하는 Proxy를 뜻하며, 클라이언트와 인터넷 사이에 위치해서 클라이언트 대신 서버에 요청(Request)을 보내주는 역할을 한다. 클라이언트와 가까이 위치해있기 때문에 서버쪽에서 크게 관여하지 않는 위치이다. Forward Proxy 특징 캐싱 : Proxy 단에서 서버..
Nginx vs Apache 1. Nginx란? 리버스 프록시, 로드밸런스서, http 캐시 등 다양한 기술을 제공하는 웹 서버 프로그램이다. 이벤트 기반 구조(Event-Driven-Model)를 가지고 있으며, 현재 아파치 서버와 함께 웹 서버 분야에서 1, 2등을 다투고 있다. 여기서 이벤트 기반 구조는 무엇이며, 어떤 점이 좋아서 Nginx를 사용하는 것일까? 먼저 Nginx를 알기전에 Apache와 왜 비교를 하는지 또는 무엇인지에 대해서 작성할 것이다. 2. 아파치 서버 탄생 - 1995년 아파치 서버가 탄생하기 이전에, 유닉스 기반으로 만들어진 최초의 웹서버 NCSA HTTPd가 있었다. 버그가 굉장히 많고, 불안정해서 개발자들이 사용할 때마다 불편함을 겪고 있었다. 도저히 못쓰겠다고 불평하던 개발자들 중 일부가 버그를..
[2020 KAKAO BLIND RECRUITMENT] 기둥과 보 설치 https://school.programmers.co.kr/learn/courses/30/lessons/60061 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 틀린 풀이 # 틀린 풀이 def solution(n, build_frame): answer = [] def check(answer): for number in answer: x, y, a = number # 기둥이 설치될 조건 if a == 0: if y == 0 or [x - 1, y, 1] in answer or [x + 1, y, 1] in answer or [x, y - 1, 0] i..
[BOJ] 3190. 뱀 https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 1. 해결방법 전형적인 시뮬레이션 구현 문제이다. 조건 자체가 있다보니 코드가 조금 길어져서 살짝 헤맸던 코드이다. 그래도 큰 어려움은 없었다. 1. 2차원 배열인 maps에 빈 공간은 0, 사과는 1, 뱀이 있는 곳은 2로 둔다. 2. 방향 정보를 turns 리스트에 정보를 담는다. 3. deque를 이용해서 큐를 만든다. 꼭 deque가 아니고 리스트를 사용하면 됨. 본인은 습관성 deque라서;;;..