분류 전체보기 (255) 썸네일형 리스트형 [Celery] celery beat 1. celery beatcelery beat 는 스케줄러이다. celery beat 가 주기적으로 작업을 시작하면, 가용한 워커에서 작업을 수행한다. celery beat 를 사용하기 위해서는 작업 일정에 대한 entry 를 등록해야 한다. 기본적으로 beat_schedule 설정에서 entry 들을 가져오지만, SQL DB 등과 같이 커스텀 저장소에서 entry 들을 가져올수도 있다. celery beat 를 사용할 때는 한번에 하나의 스케줄러만 동작하도록 해야한다. 만약 여러개의 스케줄러가 동작하는 경우 작업들이 중복으로 실행되어서 동기화와 락 문제가 발생할 수 있다. 이를 방지하기 위해서 하나의 스케줄러를 통한 중앙집중식으로 구성해야 한다.2. celery beat 설정1) Time Zone스케줄.. [uWSGI] max-requests 와 min-worker-lifetime uwsgi 는 설정에 따라 여러 개의 worker 프로세스로 동작한다. 이 과정에서 worker 프로세스의 memory leak 이 발생할 수 있다. 이러한 문제를 해결하기 위해서 특정 조건에 도달하면 프로세스를 삭제하고 재실행하는 설정이 있는데, 그 중 하나가 max-requests 이다. 이 글에서는 max-requests 에 대해서 정리한다.1. max-requestsmax-requests 는 이름 그대로 worker 프로세스가 처리할 요청의 최대개수를 설정한다. worker 프로세스는 요청을 처리하다가 요청의 개수가 max-requests 에 도달하면 해당 프로세스는 삭제되고 새로운 프로세스로 재실행된다. 이 과정을 통해서 해당 프로세스에 의한 memory leak 을 방지할 수 있다.2. max.. [Django] select_related() 와 prefetch_related() Django 로 백엔드를 개발하던 중, 연관관계가 복잡한 엔티티들의 조회를 구현해야하는 경우가 발생했다. 성능을 생각해서 raw query 로 작성을 하려다가 이번기회에 Django ORM 에서 안 써본 기능 들을 쓰고싶어서 ORM 으로 개발하기로 했다. 연관관계를 가지는 엔티티들을 조회할 때, 일반 방식으로 접근하면 lazy loading 으로 N+1 문제가 발생하게 된다. 이때문에 한번에 객체들을 조회할 수 있도록 eager loading 방식으로 구현해야 한다. Djnago ORM 에서는 eager loading 방식을 select_related() 와 prefetch_related() 두가지 기능으로 제공해주어 이에 대한 정리를 해보려한다.1. eager loading (즉시 로딩)ORM 에서 외.. [RabbitMQ] RabbitMQ 개념 설명 업무중 rabbitmq 를 사용할 상황이 생겼다. 이전에도 메시지 브로커를 사용해본적이 있지만 rabbitmq 는 사용해본적이 없다. 그래서 이번 기회에 rabbitmq 의 개념과 구조에 대해서 정리해보려 한다.1. 메시지 브로커RabbitMQ 는 메시지 지향 미들웨어를 위한 프로토콜인 AMQP 를 Erlang 으로 구현한 시스템으로 producer 와 consumer 사이에서 메시지를 중계해주는 메시지 브로커이다. RabbitMQ 를 사용하면 프로그램 간에 비동기적인 메시지 송수신이 가능하다.※ AMQP (Advanced Message Queuing Protocol)메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜이다. 메시지 지향, 큐잉, 라우팅 (p2p, pub-sub), 신뢰성, 보안 .. [Linux] CRLF vs LF 리눅스에서 쉡 스크립트를 실행하려고 하다보면 아래와 같은 에러가 발생하는 경우가 있다. $'\r': command not found 스크립트를 열어보면 다른 특수문자나 오타는 없는데 이러한 에러가 나는 것이 이상했다. 검색해보니 윈도우와 리눅스에서 사용하는 개행문자와 관련된 형식의 차이로 발생하는 문제였다. 이와 관련해서 이 글에서 정리해본다.1. CR + LFCRLF 는 Carriage Return (CR) 과 Line Feed (LF) 두가지 단어를 합친 용어이다. 이 용어들은 예전 타자기에서 유래한 단어로 타자기에서 한 줄을 다 친 후 종이를 한 줄 간격만큼 올려주는 행위 (LF, Line Feed) 와 커서를 맨 앞으로 돌리는 행위 (Carriage Return) 에서 기반한 용어이다. 프로그래밍.. [nginx] ssl 인증서 적용 특정 도메인에 https 로 접속하기 위해서는 서버에 ssl 인증서가 적용되어 있어야 한다. 이번에 ssl을 적용하는 서버는 앞단에 nginx 를 두어서 모든 요청이 nginx를 거치도록 하고있다. 이때문에 https를 사용하기 위해서는 nginx에 ssl 인증서를 적용해야 했다. 이를 위해서 다음과 같은 과정을 수행한다.1. ssl 인증서 키 확인ssl 인증서는 crt, cer, csr, pem 등등 다양한 형식을 가지고 있다. 이번에는 pem 형식의 ssl 인증서를 제공받아 이를 적용하게 되었다. ssl 인증서는 인증서 파일인 fullchain.pem 과 키 파일인 privkey.pem 으로 구성되어 있다. (파일 명칭은 달라질 수 있다.)2. nginx configuration 파일 수정ssl 인증.. [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 9. 웹 크롤러 설계 웹 크롤러는 웹에 새로 올라오거나 갱신된 콘텐츠를 찾아내는 프로그램이다. 검색 엔진 인덱싱, 웹 아카이빙, 웹 마이닝, 웹 모니터링 등 다양한 목적으로 사용된다.1. 문제 이해 및 설계 범위 확정웹 크롤러의 기본 알고리즘은 다음과 같다. 1. URL 집합이 입력으로 주어지면, 해당 URL들이 가리키는 모든 웹 페이지를 다운로드한다.2. 다운받은 웹 페이지에서 URL들을 추출한다.3. 추출된 URL들을 다운로드할 URL 목록에 추가하고 위의 과정을 처음부터 반복한다. 기본 알고리즘을 바탕으로 많은 양과 다양한 데이터를 지원할 수 있는 확장성과 저장용량, 장애나 악성 코드와 같은 비정상적인 입력과 웹 페이지에 대한 안정성, 크롤링하고자 하는 페이지에 너무 많은 요청을 보내지 않도록 하는 등 다양한 사항을 고.. [Linux] systemd, service, systemctl 리눅스 서버에서 시스템 서비스를 실행하기 위해 systemctl 또는 service 명령어를 사용한다. 이 글에서는 해당 명령어들이 어떤 의미를 가지고 어떻게 동작하는지, 시스템 서비스는 어떤 것들인지에 대해서 정리한다.1. systemdservice와 systemctl을 이해하기 위해서는 먼저 systemd에 대한 이해가 필요하다. systemd는 리눅스에서 PID 1번을 차지하고 있는 프로세스로 리눅스에서 실행되는 서비스, 데몬들을 관리하는 역할을 한다. 데몬이란, 사용자가 직접적으로 제어하지 않고 백그라운드에서 여러 작업을 수행하는 프로그램을 말한다. 리눅스가 부팅되면 네트워크 요청을 처리하는 데몬, 하드웨어 동작을 처리하는 데몬 등 시스템에 필요한 여러 데몬들이 실행된다. 리눅스에서는 이러한 데몬.. 이전 1 2 3 4 ··· 32 다음