본문 바로가기

Posts/Django

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/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