728x90 반응형 DevOps32 Django: select_related, prefetch_related, only & defer 면접 때 나왔었던 질문: Have you ever used "the prefetch_related or select_related" function in order to optimize DB access ?? https://docs.djangoproject.com/en/4.2/ref/models/querysets/#django.db.models.query.QuerySet.select_related Django The web framework for perfectionists with deadlines. docs.djangoproject.com select_related() foreignKey 나 OneToOneField 와 같은 단일 관계 필드에서 사용된다. JOIN 연산을 이용하여 연관된 객체를 미리 .. Dev./Django & DRF 2023. 11. 10. AWS: EC2 Elastic Compute Cloud ⇒ C 가 2개라서 EC2 ⇒ Infrastructure as a Service EC2 는 딱 하나의 서비스는 아니다. 좀 더 확장해서 보면 가상 머신을 빌리면 해당 인스턴스를 Elastic Compute Cloud 인스턴스라고 한다. 데이터를 가상 드라이브 또는 Elastic Block Storage 볼륨에 저장할 수 있고 Elastic Load Balancer 로 로드를 분산시킬 수 있다. 또 Auto Scaling Group 을 통해 서비스를 확장시킬 수 있다. 이렇게 EC2 를 빌린다는 것은 다른 여러가지의 기능들을 포함하게 될 수 있다. EC2 를 빌릴 때 아래의 내용들을 설정할 수 있다. Operating System: Linux, Windows or M.. Dev./Cloud 2023. 11. 10. AWS: Access Key, CLI and SDK AWS 에 접근하기 위해서는 3가지 방법으로 구분할 수 있다. AWS management console 을 통해서 접근 → password + MFA AWS command line interface 를 통해서 접근 → access key AWS software developer kit 를 통해서 접근 → access key (for code) CLI 와 SDK 에서 사용되는 access key 는 username 과 password 의 형태를 가지는 ACCESS_KEY 와 SECRET_ACCESS_KEY 로 구분되어 지는데 이는 절대 다른 사람들과 공유하면 안된다. # example of access key AWS_ACCESS_KEY_ID = AKIASK4E37PV4983d6C AWS_SECRET_ACC.. Dev./Cloud 2023. 11. 9. AWS: IAM (Identity and Access Management) 기본적으로 AWS 콘솔을 사용하기 위해서는 어떤 권한을 가진 유저로 접속을 해야한다. 그래서 처음 가입하게 되면 root 권한(모든 권한, 즉 그냥 Business 그 자체)으로 접속할 수 있는 데, 너무 많은 권한을 가지고 있기 때문에 필수 권한만 따로 만들어서 관리하는게 전체적으로 보안도 유지할 수 있고 생성 및 삭제를 통해 관리하기도 쉬워진다. 대시보드 > 사용자 > 사용자 생성 목표는 AWS Certified Solutions Architect - Associate 이기 때문에 Identity Center 사용자가 아닌 IAM 사용자로 생성하면 된다. 그 다음은 권한을 설정하는 페이지가 나온다. 권한을 생성한적 없는 경우 새롭게 권한을 설정하라고 나오는데, 이때 Administrator Acces.. Dev./Cloud 2023. 11. 8. Django: mysqlclient connection Meta 수업을 듣다가 mysql 을 사용해서 DB 를 연결해야하는 부분이 있었는데 pipenv 로 가볍게 설치해서 진행하면 되겠지 싶었다. 그런데 예상치 못한 에러가 계속해서 발생했다. [pipenv.exceptions.InstallError]: Collecting mysqlclient==2.2.0 (from -r /var/folders/3t/xyg5mpbn57dchy7qksj9n2vr0000gn/T/pipenv-_macr11_-requirements/pipenv-hu_mma6k-hashed-reqs.txt (line 1)) [pipenv.exceptions.InstallError]: Using cached mysqlclient-2.2.0.tar.gz (89 kB) [pipenv.exceptions.I.. Dev./Django & DRF 2023. 11. 4. Dev: How a CDN improves scaling CDN (Contents Delivery Network), 굳이 한글로 하자면 컨텐츠 전달네트워크(?) 는 HTML, CSS, JS, 이미지와 같은 웹 애플리케이션의 정적 파일을 저장하기 위해 널리 사용된다. CDN 은 세계 각지의 서버(가까운 서버)로 부터 컨텐츠를 전달한다. CDN CDN 은 여러 서버를 가지고 있으며 이를 Point of Presence (PoP) 또는 Point of Service 라고 한다. 이러한 서비스 지점 들은 전 세계 다양한 국가에 위치하고 있다. 웹 애플리케이션을 CDN 에 연결하면, 각 PoP는 웹 애플리케이션의 정적파일 복사본을 저장한다. 이를 통해, 유저가 웹 애플리케이션을 아시아 지역에서 방문할 경우, 그 지역에 가장 가까운 서비스 제공자(ISP)를 통해 애플리케.. Dev./Basic knowledge 2023. 11. 3. Dev: 네트워킹 in Cloud 클라우드 컴퓨팅을 이해하기 위해서는 몇가지 개념들을 알아야 한다. 특히 서버가 어떻게 공개 혹은 비공개로 통신을 하는지 이해해야 한다. Public network vs Private network Public 네트워크에서는 클라우드 컴퓨팅 유닛이 IP 주소나 URL 을 사용하여 공개적으로 접근이 가능하다. 반면에 Private 네트워크의 컴퓨팅 유닛은 공개적으로 접근 할 수 없다. 이러한 유닛은 관리 콘솔에서 접근 가능하지만 공개 인터페이스르 제공하지 않기 때문이다. 그렇기 때문에 Public 네트워크의 경우 완전히 다른 네트워크에서도 접근이 가능하지만 Private 네트워크의 경우 같은 네트워크 안에서만 접근이 가능하다. 로드 밸런서는 일반적인 인프라의 앞에 위치 하고 여러 웹 서버에 연결이 된다. 이.. Dev./Basic knowledge 2023. 11. 2. Dev: Self-hosted, PaaS, SaaS and DBaaS 클라우드 도구를 사용할 때 선택할 수 있는 다양한 옵션이 있다. Self-Hosted 공개 또는 개인 클라우드 네트워크를 생성하고 모든 것을 직접 관리하는 것을 자체 호스팅 또는 Self-Hosted 라고 한다. 비용이 많이 들고, 초기 구축 비용과 같은 투자를 많이 해야한다. 따라서 이것은 클라우드 컴퓨팅에서 선호되는 것은 아니다. 그러나 민감한 데이터를 다루거나, 추가적인 보안이 필요하거나, 공개 클라우드 제공자가 충족시키지 못하는 맞춤 요구 사항이 있을 때 선택할 수 있는 옵션이다. IaaS Infrastructure as a Service 는 클라우드 제공자가 요구에 따라 로드 밸런서, 서버, 컴퓨팅 유닛, Storage, 가상화 등의 인프라 단위를 제공하는 것이다. IaaS 를 사용하면 인프라를.. Dev./Basic knowledge 2023. 11. 1. Prometheus: Django 와 연결해보기 Prometheus 도커로 열어보기 Django-prometheus 프로메테우스가 장고를 모니터링하게 만들기 위해서는 몇가지 설정을 변경해주어야 한다. 장고 프로메테우스 설치 pip install django-prometheus 파이썬 settings.py 에 설치내용과 미들웨어 추가 INSTALLED_APPS = [ ... 'django_prometheus', ... ] MIDDLEWARE = [ 'django_prometheus.middleware.PrometheusBeforeMiddleware', # All your other middlewares go here, including the default # middlewares like SessionMiddleware, CommonMiddleware.. Dev./Prometheus & Grafana 2023. 10. 16. Github Actions: Version Release Release version control 지금까지 이미지의 tag 를 그냥 타임스탬프를 이용하여 구분짓고 latest 로 기져오면서 코드를 짜고 있었는데, 실제 이미지의 버전정보를 그냥 아무 숫자나 가져다 쓰지는 않는다고 한다. 그래서 github 에서 repo 의 태그를 생성하고 버전으로 사용하는 방법을 찾아보자. github actions marketplace 에서 원하는 기능을 제공하는 소스코드를 찾았다. 소스코드의 메커니즘을 보면 secrets 에서 토큰을 받아와 접근 인가를 받고 steps 에 태그를 생성해서 가져다 쓰는 것 같다. 태그를 커스터마이징 하거나, 브랜치 별로 선택할 수도 있는 것 같아서 default 를 false 로 해두고 commit message 로 버전을 컨트롤 할 수 있.. Dev./Github Actions 2023. 10. 15. Kubernetes: 안전하게 업로드하기 by using Kubeseal Sealing helm-chart 로 만든 데이터를 argocd 에서 관리하려면 모든 정보가 담긴 파일들이 git 에 올라가 있어야 한다. 이때 민감한 정보를 어떻게 핸들링 해야하는지 고민이 많았는데, kubeseal 이라는 오픈소스를 사용해보면 어떨까 한다. Sealed Secrets 는 쿠버네티스에서 비밀 정보를 안전하기 관리하기 위한 도구라고 한다. 클러스터 내 컨트롤러와 클라이언트 측 유틸리티인 kubeseal 로 구성되며 kubeseal 이 SealedSecret 이라는 리소스를 생성하여 클러스터 내에서 일반 Secret 으로 사용된다. 스코핑 설정도 가능하고 argocd 와 함께 사용하여 helm chart 를 안전하게 배포할 수 있다고 한다. Installation brew install k.. Dev./Kubernetes & Helm 2023. 10. 14. ArgoCD: Deploy App Deploy app 연결된 원격 저장소에 있는 helm-chart 를 배포 시켜보자. 우선 파일경로의 위계를 지정하고 폴더 경로를 path 에 집어 넣어 배포구조를 만든다. 이 후 사용할 values.yaml 파일을 정한 뒤 배포 이 후 SYNC 로 창을 열어서 SYNCHRONIZE 하면 배포가 잘 된 것을 확인 할 수 있다. Deploy test 배포가 잘 되었는지 확인해보자. local 에서 코드 업데이트 이후 원격 저장소로 push 를 하게 되면 코드에 변동사항이 생겼으니 argoCD 에서 해당 정보를 싱크체크를 하고 다른 점이 있으면 sync status 를 out of 로 변경하게 된다. 다시 SYNC 로 창을 열어서 SYNCHRONIZE 하면 정상적인 상태로 돌아오는 것을 확인 할 수 있다. .. Dev./ArgoCD 2023. 10. 12. 이전 1 2 3 다음 728x90 반응형