본문 바로가기

분류 전체보기

(221)
[백준 21608번] 상어 초등학교 (Python) 문제 더보기 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N^2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호가 매겨져 있고, (r, c)는 r행 c열을 의미한다. 교실의 가장 왼쪽 윗 칸은 (1, 1)이고, 가장 오른쪽 아랫 칸은 (N, N)이다. 선생님은 학생의 순서를 정했고, 각 학생이 좋아하는 학생 4명도 모두 조사했다. 이제 다음과 같은 규칙을 이용해 정해진 순서대로 학생의 자리를 정하려고 한다. 한 칸에는 학생 한 명의 자리만 있을 수 있고, |r1 - r2| + |c1 - c2| = 1을 만족하는 두 칸이 (r1, c1)과 (r2, c2)를 인접하다고 한다. 비어있는 칸 중에서 좋아하는 학생..
[Python] Flask를 이용한 요청 처리 Flask 애플리케이션을 실행한다는 것은 Flask 클래스의 단일 인스턴스를 띄워 외부에서 들어오는 WSGI 요청을 다루고, 이를 적절한 코드로 전달하여 처리한 후 응답을 반환하는 것입니다. 즉 Flask 는 동기식 웹 프레임워크 입니다. Flask 클래스는 함수를 데코레이트 하는route 함수를 제공합니다. route로 함수를 데코레이트하면 view가 되, Werkzeug의 라우팅 시스템에 등록됩니다. Flask를 설치하는 커맨드는 다음과 같습니다. (파이썬 3.6.5, Ubuntu 16.04LTS에서 실행하였습니다.) pip install flask 다음은 간단한 Flask Application 코드 입니다. #flask_app.py from flask import Flask, jsonify app ..
[Python] MicroService에서 twisted의 문제점 Python을 이용한 웹 서비스에서 동시 요청의 수가 증가하고 이를 처리하는 것이 중요하다면 WSGI 표준(동기식 웹 프레임워크)을 포기하고 tornado나 twisted 같은 비동기 프레임워크를 사용하는 것도 좋습니다. https://twistedmatrix.com/trac/ Twisted Twisted is an event-driven networking engine written in Python and licensed under the open source ​MIT license. It supports CPython 3.5+ and PyPy3. Twisted makes it easy to implement custom network applications. Here's a TCP server th..
[Python] Greenlet과 Gevent(WSGI 성능 향상) WSGI 표준 파이썬 웹 커뮤니티는 웹 서버 게이트웨이 인터페이스(WSGI, Web Server Gateway Interface)라는 표준을 만들었습니다. WSGI는 CGI(Common Gateway Interface)의 영향을 받았으며, 파이썬 어플리케이션이 HTTP 요청을 쉽게 처리할 수 있게 해줍니다. 이 표준에 따라 uwsgi나 mod_wsgi 같은 WSGI 확장을 사용하여 아파치, nginx 등의 웹 서버에서 실행할 수 있습니다. 하지만 WSGI의 가장 큰 문제는 동기 방식 이라는 것입니다. 웹 서버에 요청이 들어올 때마다 함수가 호출되고 함수가 종료될 때 응답을 반환합니다. 즉 함수가 한 번 호출되면 응답을 반환할 때 까지 블록됩니다. 따라서 마이크로서비스에서 WSGI를 적용하면 연동된 서비스..
[Linux] find 명령어로 파일 모으기(특정 파일만 압축하기) Linux에서 파일을 압축할 때 원하는 파일이 적절하게 모여있으면 tar 같은 명령어로 적절하게 압축할 수 있습니다. 하지만 디렉토리에 원하지 않는 파일들도 함께 있는 경우에 tar 명령어로 압축한다면 원하지 않은 파일도 압축파일에 포함될 것입니다. 이는 find 명령어를 통해서 해결할 수 있습니다. 명령어는 Ubuntu 16.04.7 LTS 버전에서 실행하였습니다. find 명령어 사용 find 명령어는 파일 시스템을 검색하여 주어진 규칙에 맞는 파일들을 찾아 파일들의 이름과 위치를 표준 출력(stdout)으로 출력합니다. 이 출력 메시지는 tar과 같은 명령어로 쉽게 리다이렉션될 수 있습니다. 예를 들어 .jpg 파일을 제공하는 웹 사이트를 호스팅하는 경우 파일들이 /var/www/html/ 아래 여..
[Docker] Docker Registry를 사용한 프라이빗 레지스트리 구축(이미지 업로드 및 다운로드) Docker Registry Docker 이미지를 공유하고 싶으나 인터넷상에는 공개하고 싶지 않은 경우에는 Docker 이미지를 관리하기 위한 레지스트리를 로컬 환경에 구축하여 관리합니다. 이러한 레지스트리를 프라이빗 네트워크 안에서 구축하려면 Docker Store에 공개되어 있는 공식 이미지인 'registry'를 사용합니다. https://hub.docker.com/_/registry registry Take full advantage of Docker Hub with a free Docker ID Sign up for a Docker ID to get more out of Docker Hub. Increased pull limits, free storage of public images, free..
[Docker] Dockerfile ENV 명령어(환경변수 설정) Dockerfile 안에서 환경변수를 설정하고 싶을 때는 ENV 명령어를 사용합니다. ENV 명령어는 다음 두 서식 중 하나로 기술합니다. • Key value 형 • Key=value 형 예시) 1 2 ENV [key] [value] ENV [key]=[value] 1. key value 형으로 지정하는 경우 단일 환경변수에 하나의 값을 설정합니다. 첫 번째 공백 앞을 key로 설정하면 그 이후는 모두 문자열로 취급합니다. 공백이나 따옴표와 같은 문자를 포함한 것도 문자열로 취급합니다. 키명 값 NAME "Kim" NICKNAME JingO AGE 27 예를들어 위와 같이 설정하고 싶은 경우는 다음과 같이 기술합니다. 1 2 3 ENV NAME "Jihwan" ENV NICKNAME JingO ENV ..
[Algorithm] 보글(Boggle) 게임 문제 (C++) 다음 도서를 참고하여 작성하였습니다. http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788966260546 알고리즘 문제 해결 전략 세트 - 교보문고 이 책은 프로그래밍 대회 문제를 풀면서 각종 알고리즘 설계 기법과 자료 구조에 대해 배우고, 나아가 문제 해결 능력까지 키울 수 있도록 구성되어 있다. 각 장에는 독자가 스스로 프로그램을 www.kyobobook.co.kr 문제 보글 게임은 다음과 같이 5 x 5 크기의 알파벳 격자를 가지고 하는 게임입니다. 목적은 상하좌우/대각선으로 인접한 칸들의 글자를 이어서 단어를 찾아내는 것입니다. 예를들어 위의 그림에서 (b), (c), (d)는 각각 PRETTY..
[Algorithm] n개의 원소중 m개를 고르는 모든 경우 찾기(C++) 0번부터 차례대로 번호 매겨진 n개의 원소 중 4개를 고르는 모든 경우를 출력하는 코드를 생각해봅시다. 만약 n = 6인경우 출력은 다음과 같습니다. (0, 1, 2, 3) (0, 1, 2, 4) (0, 1, 2, 5) ... 중략 ... (2, 3, 4, 5) 위 출력은 다음과 같은 4중 for문으로 간단하게(?) 해결할 수 있습니다. for(int i = 0; i < n; ++i) for(int j = i+1; j < n; ++j) for(int k = j+1; k < n; ++k) for(int l = k+1; l < n; ++l) cout
[Docker] Dockerfile의 HEALTHCHECK를 이용한 컨테이너 정상 동작 점검(nginx) 다음 도서를 참고하여 작성하였습니다. www.aladin.co.kr/shop/wproduct.aspx?ItemId=166082298 완벽한 IT 인프라 구축을 위한 Docker 컨테이너 기술을 사용한 애플리케이션 실행 환경 플랫폼인 ‘Docker’를 사용하여 인프라를 구축하기 위한 입문서. 제2판에서는 Docker의 새로운 기능 및 명령과 더불어, 멀티호스트 환경에서 실행 www.aladin.co.kr HEALTHCHECK Docker에서 컨테이너 안의 프로세스가 정상적으로 작동하고 있는지를 체크하고 싶을 때는 HEALTHCHECK 명령어를 사용합니다. 구문은 다음과 같습니다. HEALTHCHECK [옵션] CMD 실행할 명령 지정할 수 있는 옵션 옵션 설명 Default --interval=n 헬스 체..