전체 글 18

[Nginx] 로드 밸런싱(Load balancing)

오늘은 로드 밸런싱(Load balancing)에 대해 알아 보도록 하자. 🧙 우리의 목표!! ✅ 단일 서버 개념 🔎 위와 같이 FastAPI 서버 가 한개라면 한곳에 부하가 걸리겠져 이떄 부하를 Load라고 합니다. 위 그림처럼 사용자가 늘어서 서버가 힘들어 하겠져 이러한 부하를 고르게(Balance) 분배 하려면 Load Balancing를 하면 됩니다. 👉👉 소스코드는 이전 글인 [FastApi] CPU를 많이 사용하는 APP 만들기 (CPU Bound) 👉👉 Git Actions는 이전 글인 [Git Actions] SSH으로 배포하기 ⚡ 실습 1(Nginx로 Load Balancing) nginx를 설치 하셨을 경우 설정 파일 경로 : sudo vi /etc/nginx/nginx.conf ups..

Backend & 인프라 2022.07.05

[Git Actions] SSH으로 배포하기

SSH 비밀번호 아이디 접속을 통해 배포 하는 방법에 대해 다루겠습니다 ✅ 공식문서 🔎 😇 항상 공식 문서가 중요한 법 입니다.!! 👉 공식 홈페이지, 공식 문서 GitHub Actions Documentation - GitHub Docs Automate, customize, and execute your software development workflows right in your repository with GitHub Actions. You can discover, create, and share actions to perform any job you'd like, including CI/CD, and combine actions in a completely customized wo docs.gi..

Backend & 인프라 2022.07.04

[FastApi] CPU를 많이 사용하는 APP 만들기 (CPU Bound)

cpu를 많이 사용하는 APP을 만들기 전에 개념을 이해고 진행할 필요가 있다. ✅ 개념 1 🔎 🌈 프로그램과 프로세스의 차이 하드디스크에 있는 프로그램이 메모리에 올라갑니다. 그때부터 이것은 프로세스라고 합니다. ✅ 개념 2 🔎 🌈 I/O Burst vs CPU Burst 📌 한 프로세스 실행 도중, I/O를 하는 시간을 I/O 버스트라고 합니다. 🩹 여기서 I/O란 "네트워크 통신 POST, GET...", "사용자 키보드 입력" 등을 이야기합니다. 📌 CPU에서 실행되는 시간을 CPU 버스트라고 합니다. ✅ 개념 2 🔎 🌈 I/O Bound vs CPU Bound 📌 전체적으로 I/O를 많이 하는 APP 이면 I/O Bound라고 하며 📌 CPU를 많이 사용하는 APP 이면 CPU Bound라고 합..

Backend & 인프라 2022.06.30

[Docker] Permission Denied

Error Message 👊👊👊 "Permission denied" 즉 권한이 없다는 뜻이다. 😡😡 해당 문제는 사용자가 /var/run/docker.sock을 접근하려고 하였지만 권한이 없어 사용자가 root:docker 권한을 가지고 있어야 함. 💨 0 해결 방식에 대한 이해 👉 docker 관련 명령어를 사용하는 도커 데몬은 Unix 소켓을 통해 실행한다. 위의 에러에서도 볼 수 있는 var/run/docker.sock 파일이다. 👉 해당 소켓 파일은 root 사용자의 소유권한으로 기본설정되어 있고, 이에 sudo 권한으로 실행되어야 한다. 기존 sudo 권한으로 실행해야하는 docker 소켓을 일반 사용자가 사용할 수 있는 권한을 부여하는 과정이다. 아래 블로그의 글귀를 참고하였습니다. 👍 htt..

Backend & 인프라 2022.06.30

[DRF] ORM 중복 제거

Django에는 QuerySet의 filter에 order by와 같은 메소드인 distinct가 있습니다. distinct는 SQL에 있듯이 의미 하는 바는 "중복제거" 입니다. Distinct를 단독으로 사용 방법 Vehicle.objects.distinct() ↑코드의 SQL 쿼리 print(Vehicle.objects.distinct().query) SELECT DISTINCT "myapp_vehicle"."id", "myapp_vehicle"."name", "myapp_vehicle"."number" FROM "myapp_vehicle" 쿼리의 결과 ↓ 모든 필드의 DISTINCT의 조건으로 했을 경우, 중복되는 레코드는 없다는 의미입니다. Distinct와 values_list를 결합 하나일 ..

DRF & Django 2022.03.10

[DRF] Redis vs RabbitMQ and setting

RabbitMQ — 메시지 브로커 메시지를 다른 대기열로 보낼 수 있는 라우팅 시스템을 갖춤 메시지 우선순위 지원 크고 복잡한 메시지에 적합 속도보다 지속성이 중요한 서비스에 적합 Redis — 인메모리 Cache 서버 Key-Value를 이용해, Celery가 처리할 작업을 보낸 후 Cache에서 해당 Key 제거 Database에 접근하기 전, 메모리에서 Cache를 가져다 쓴다는 점에서 속도가 빠름 지속성이 중요하지 않고, 약간의 손실을 견딜 수 있는 짧은 보존 메시지에 적합 Redis docker-compose.file version: '3.7' services: redis: image: redis:alpine command: redis-server --requirepass changeme --p..

DRF & Django 2022.02.03

[DRF] Redis, Celery 기본 세팅

Init install pip # pip install redis # pip 세팅 폴더에 작성 ## backend/celery.py import os from celery import Celery # Celery 모듈을 위한 Django 기본세팅 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings.dev') # Celery 세팅(borker 설정) app = Celery('backend',backend='redis://', broker='redis://{rdis ip address}') # 여기서 문자열을 사용하는것은 작업자가가 자식 프로세스 직렬화 구성을 하지 않는것을 의미합니다. # -namespace='CELERY' 의 의미는 셀러리..

DRF & Django 2022.02.01