Python (with. Code) 97

[Django] Prefetch 에 대한 이해

Prefetch 란perfetch_related 함수는 쿼리에서 Join을 하지 않고, 개별 쿼리를 실행 한 후 django에서 직접 데이터를 조합하는 것 예시) A, B, C 모델이 존재 / A:B 는 1:N / B:C 는 1:N의 관계를 가짐 비교 1 ) A에서 C 까지의 Prefetch1안. Prefetch 병렬로 쓰기a = ( A.objects.filter(id=1).prefetch_related( Prefetch( "b_set", # A에서 B 역참조 ), Prefetch( "b_set__c_set", # A에서 C역참조 ), )).first() 2안. Prefetch 중첩해서 쓰기a = ( ..

[Django-Ninja] API 문서 Docs 커스텀

Ninja Docs기본적으로 Ninja에서는 가벼운 설정으로 Swagger나 Redoc을 지원하며https://django-ninja.dev/guides/api-docs/ 문서를 관리하기 위한 다양한 부가 기능들이 존재한다.문서 권한 설정문서 숨기기커스텀 태그 (openapi_extra 속성 v1이상 지원)커스텀 Docs 만들기 (링크) 등 도 가능하다. 문서 숨기기기본적으로 /api/openapi.json 을 바탕으로 -> /api/docs 의 문서를 생성해준다. 이를 Production 등에 활용시 다음과 같이 설정하면, url을 감춰준다.from ninja import NinjaAPIapi = NinjaAPI(docs_url=None) 참고 링크https://github.com/vitalik/dja..

[Django Ninja] 배포용 도커파일 (Dockerfile)

Dockerfile 기본적으로 Multi-Builder 사용 (builder-image / runtime-image) 만약 linux 에서 제공하는 도구(vi 등)를 쓰고 싶다면 설치 후 runtime-image 에 복사 해야 함 프로젝트명 : mysite / 실행 log는 ./access.log 에 기록 배포는 uvicorn에 gunicorn을 worker로 사용하여 실행 (worker 갯수는 cpu 코어 갯수 * 2) 로컬에 배포 하고 싶다면 ${SERVER_IP} 를 수정 (ex. 127.0.0.1 / 0.0.0.0 ) #################### Server Build #################### FROM python:3.11-slim AS builder-image RUN apt..

[Utils] 파이썬 반올림 구현 (ft. 사사오입, round 함수 )

반올림 종류 파이썬 round() 반올림 함수는 기본적으로 오사오입의 방식을 따른다. 반올림 종류 사사오입 (Rounding half up) : 4 이하 버림, 5 이상 올림 오사오입 (Rounding half to even) : 5 미만 버림, 5 초과 올림 / 5는 앞자리가 홀수인 경우 올림, 짝수인 경우 버림 => 수를 짝수로 만들어 주는 방식 ex) 35 -> 40 / 25 -> 20 / python의 round() 함수 오사육입 (Rounding half down) : 5 이하 버림, 5 초과 올림 관련 링크 반올림 위키 : https://ko.wikipedia.org/wiki/%EB%B0%98%EC%98%AC%EB%A6%BC python3 round() 함수 링크 : https://docs...

[Django Ninja] Validation 구현 방법 (with. Pydantic)

서비스를 개발하면서 들어오는 파라미터에 대해 검증하는 로직을 작성하였고, 해당 필드만 검증하거나, 여러 필드를 한번에 검증해야 된다거나 등등의 여러 경우가 있었다. 사용한 여러 방법들에 대해 정리해보려고 한다. 기본적으로 Django Ninja의 Schema는 Pydantic의 BaseModel을 wrapping 하여 만들어 졌기에, validation은 BaseModel의 @validator, @root_validator 등의 기호를 사용하여 진행하였다. (pydantic 1.x) 1. 타입 검증 (Type Check Validation) 기본적으로 Type에 대한 체크는 Ninja의 Schema에서 선언시 내부적으로 타입을 체크 해준다. 만약 유효하지 않은 Type을 보낼시, 422 엔티티 에러가 발..

[Python UI] Reflex 보일러 플레이트 (Boiler Plate)

BoilerPlate란? BoilerPlate Code란 재 사용할 수 있는 뼈대 코드로, 보일러 플레이트를 작성해 놓고, 프로젝트 신규 생성 시마다 적용하여 사용 가능하다. 폴더 구조 프로젝트를 진행하면서, 협업하기 좋은 구조를 생각하게 되었고, 경험적으로 다음과 같은 프로젝트 폴더 구조를 작성하게 되었다. Reflex Boilerplate ┌─Reflex BoilerPlate │ └─assets │ ├─ imgs/ : img 파일 │ └─ css/ : css 파일 │ ├──states/ : 상태 관리 앱 │ ├─base_state.py : 기본적으로 쓰이는 정적인 State에 대한 관리 (다른 State들이 상속 받아 사용) │ ├─image_upload_state.py : 이미지 업로드에 대한 상태..

[Python UI] Reflex, Streamlit 비교 및 선택

Reflex 란? 특징 구 Pynecone -> 현 Reflex 로 이름 변경 비동기 이벤트 기반의 실시간 애플리케이션 개발을 위한 프레임워크 성능 측면에서 좋은 결과를 보여줄 수 있음 (고성능 비동기 웹 서버 Dazzler 가 내부적으로 사용됨) 실시간 데이터 처리, 대시보드, 모니터링 및 제어 시스템 등의 애플리케이션에 적합 커뮤니티와 문서화가 상대적으로 부족 (이슈 발생시 문제 발생시 해결에 오래걸릴 수 있음) 내부적으로 FastAPI Backend와 FE는 Next.js 기반으로 동작함 (소켓으로 연결됨, Next.js는 React로 변환) 에러 지점이 많을 수 있음 (Next.js에서 차용하는 라이브러리의 버전 업에 따른, deprecated 등) docs , github, star 수 11.9..

[배포] Python WSGI 배포 서버 종류 (Gunicorn, uWSGI)

관련 정리 글 https://yubi5050.tistory.com/153 // [웹서버] WebServer와 WAS 차이 https://yubi5050.tistory.com/114 // [웹서버] CGI vs ASGI vs WSGI 비교 https://yubi5050.tistory.com/109 // [Django, AWS] EC2 에서 Nginx + Gunicorn + Django 배포하기 이전 글 요약 WebServer는 WAS의 부하를 줄이며, WAS(Gunicorn, Uvicorn, uWSGI)과 같은 서버를 통해 Web Application 배포 ASGI, WSGI 등은 CGI (Common Gateway Interface)의 일종으로 여러 언어들의 다양한 요청을 이해할 수 있도록 공통된 규칙으..

[Python] Class 이해 - 언더바 정의, @property, @staticmethod, setter/getter

언더바 ( _ ) 1개, 2개 차이 Python 클래스 내부 변수와, 메소드에 대한 캡슐화 정도를 조절하기 위해 언더바(_)를 사용하는데, 언더바 1개와 2개는 그 정도가 다르다. 👉 하나의 언더바 (_) 사용 _variable, _method() 비교적 약한 캡슐화 정도를 가짐 일반적으로 내부적으로 사용되는 변수, 메소드를 나타냄 👉 두개의 언더바 (__) 사용 __variable, __method() 이중 언더바를 사용하면 이름이 자동으로 변환되어 상속시 충돌을 방지 (_클래스명__) 강한 캡슐화 정도를 가짐 (외부에서 직접 접근 불가) 클래스 내부에서만 접근 가능 👉 예시 코드 아래 예시에서 볼 수 있 듯, 두개의 언더바(__)를 사용한 변수/메소드는 직접적으로 접근하지 못하고, 해당 클래스를 직접..