본문 바로가기

장고

Posts/Django 실서비스에 Django ORM API 삽질 + 성능 개선기 본 포스팅에 적혀진 코드 작성 부분의 필드명, DB명은 포스팅을 위해 가상으로 작성하였습니다. 대신 코드는 직접 작성하였고 업무상의 내용이 포함되어 자세한 내용은 생략하였습니다. 1. 문제상황 Django를 통해 API를 개발하면 SQL 대신 ORM을 사용하게 됩니다. Django는 ORM을 작성 할때 debug_toolbar라는 미들웨어를 통해 보다 쉽게 query explain과 select query문을 조회할 수 있습니다. 쿼리의 갯수와 실행계획, ORM을 통해 작성된 쿼리 확인 가능 평소처럼 회사에서 개발하고 있는데 년/월 기준 전체 강사들의 정산 페이지의 정보를 한번에 볼 수 있는 리스트 페이지 API를 개발해야 하는 업무가 생겼습니다. 작업해야하는 API의 조건은 전혀 문제되지 않아 작업에 .. 2021. 12. 23. 23:10
Posts/Django Django 실제 서버에 왜 runserver를 하지 않고 웹서버+wsgi를 사용할까? "그냥 다들 사용하니까", "검색하면 이렇게 나오니까" 라는 이유 말고 왜라는 질문에서 시작하여 이 내용을 정리하게 되었습니다. 1. 클라이언트와 서버의 구조 내용을 작성하기 앞서 애플리케이션은 요청과 응답이 어떻게 동작하는지에 대해 짚고 넘어가야합니다. 아래 그림을 보며 간략히 설명을 작성하였습니다. 1-1. 동작 순서 사용자가 앱이나 웹브라우저 환경에서 API 서버에 요청을 하게 됩니다. 해당 요청은 가장 먼저 웹서버에 가게 됩니다. 클라이언트 API 호출 가장 먼저 웹서버로 접속합니다 (nginx) 소켓을 통해 wsgi까지 도달 (wsgi: 장고와 웹서버의 데이터 통신을 교환할 수 있게 도와주는 인터페이스) wsgi에서 django로 전달되어 프로젝트내 파이썬 코드가 실행 1-2. webserver.. 2021. 11. 14. 21:43
Posts/Server AWS ElasticBeanstalk으로 토이프로젝트 배포하기 1. Elastic Beanstalk Elastic Beanstalk은 애플리케이션을 실행하는 인프라에 대해 자세히 알지 못해도 신속하게 배포하고 관리할 수 있는 기능을 제공합니다. 프로비저닝, 로드 밸런싱, 조정, 애플리케이션 상태 모니터링등 세부 정보를 자동으로 처리해줍니다. (이후 Elastic Beanstalk은 EB라 작성하겠습니다.) EC2를 이용하면 인스턴스 서버에 일일이 웹서버(nginx)와 패키지 의존성등을 설치해주어야 하는 번거로움들이 생깁니다. (사실 번거로운것보단 EB가 너무 편한게 아닐까..?) EB를 사용하게 되면 이런 과정들을 다 손쉽게 처리할 수 있도록 도와줍니다. aws 사이트에서도 사용할 수 있지만 프로젝트내에서 awsebcli를 활용하여 사용해보겠습니다. 2. EB CL.. 2021. 11. 14. 00:29
Posts/Python Python | Django Interview Q&A List 간단히 내용을 요약했기에 부족한 부분은 따로 찾아서 학습할 예정이며 지속적으로 업데이트 할 예정입니다. 보시는 분들도 참고해주시면 감사하겠습니다. Python GIL이 무엇이고, 왜 성능 문제가 발생하는가? GIL을 알기 전에 파이썬에서 멀티쓰레드를 먼저 이해해야합니다. import logging import random import threading import time if __name__ == "__main__": format = "%(asctime)s: %(message)s" logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S") def working(name): logging.info("Thread %s: starti.. 2021. 11. 10. 00:11
Posts/Python 파이썬을 이용한 클린 코드를 위한 TDD - 2장 unittest 모듈 Chapter 2. unittest 모듈 기능 확장 TDD 학습 겸 정리를 위한 내용입니다. 1. 기능 테스트를 이용한 최소 기능의 애플리케이션 설계 챕터 1에서 셀레늄을 이용한 테스트는 실제 브라우저에 실행해 애플리케이션이 어떻게 동작하게 되는지 사용자 관점에서 테스트를 진행하였습니다. 이런 테스트를 기능 테스트라고 부르며 사용자 스토리라는 개념으로 사용자가 어떤 행동을 했을때 애플리케이션이 어떻게 동작해야하는지 기대하며 확인하는 방식입니다. 1-1. 기능 테스트 스토리라인 기능테스트는 스토리를 가지고 있어야 하기에 주석으로 정의를 기록합니다. 애플리케이션 요구사항과 특징을 기능 테스트로만으로도 확인이 가능해야합니다. from selenium import webdriver from selenium.we.. 2021. 10. 30. 10:16
Posts/Python 파이썬을 이용한 클린 코드를 위한 TDD - 1장 기능테스트를 이용한 장고 프로젝트 설정 Chapter 1. 기능 테스트를 이용한 Django 프로젝트 TDD 학습 겸 정리를 위한 내용입니다. 1. 테스트가 없다면 아무것도 하지 마라 TDD의 접근법은 언제나 같습니다. 테스트를 작성한 후 실행하고 예상 시나리오대로 실패하는지 확인하는 작업의 연속입니다. 단계를 작게 나누어 조금씩 진행해 나갑니다. 1-1. 첫번째 기능테스트 프로젝트에서 selenium webdriver를 사용하기 위해 ChromeDriver를 사전에 설치합니다. 이후 PATH(/usr/local/bin) 경로로 ChromeDriver 파일을 이동시킵니다. from selenium import webdriver from selenium.webdriver.chrome.service import Service # 처음엔 Chrom.. 2021. 10. 30. 00:58
Posts/Django Legacy DB 장고에 연동 후 Table에 Foreign Key 설정시 Migrate로 관리하는 법 기존 데이터베이스를 django로 운영하고자 할 때 통합하기 위해선 inspectdb 를 이용할 수 있습니다. inspectdb라는 유틸리티를 통해 생성된 모델들을 해당 프로젝트 setting.py에 app 패키지에 추가시키고 managed 옵션을 주어 관리하게 됩니다. 라이프사이클 관리를 허용할 때는 True, False이며 모든 앱들의 수정이 완료되면 migrate 명령을 통해 django 테이블 추가 및 통합을 이루게 됩니다. 이렇게 초기에 통합 환경을 만들고 운영하던 중 특정 모델의 추가적로 컬럼(FK)을 추가해야하는 상황에서 발생한 문제와 해결 과정을 정리해보고자 합니다. 1. 문제 발생 기존 레거시 mysql 데이터베이스에 inspectdb 이후 프로젝트에 기존 Model에 FK 컬럼을 추가해.. 2021. 10. 11. 12:58