Python 112

[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...

Python/Utils 2024.04.21

[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/Django Ninja 2023.10.04

[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/Deployment 2023.07.08

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

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

Python/Advanced 2023.07.02

[Django Ninja] 설계 패턴 정하기 (feat. 리팩토링)

서론진행 중인 Django Ninja 프로젝트에서 리팩토링을 진행 하며, 코드의 중복을 줄이거나, 객체지향적 구조로 변경 등의 방향성 외에도, 프레임워크에 맞는 특정 패턴을 기준으로 삼아보려고 하였다. Django에는 "Fat Model Skinny View"라는 대표적인 패턴이 있고,FastAPI는 주로 "Thin Models, Fat Functions"  패턴을 통해 코드의 직관성을 높이는데 집중한다.(참고로 Django Ninja는 FastAPI의 등장을 주 Motivation 중 하나로 얘기하고 있음) Django-Ninja 프로젝트에서 Django의 "Fat Model Skinny View" 설계 패턴이 어울릴까? 해당 글에서는 Django(DRF)의 Fat Models, Skinny View ..

Python/Django Ninja 2023.07.01

[Utils] Custom Pre-commit hook 구현

Custom Pre-commit Hook 구현하기 👉 사용 사례 - API 문서 배포시 자동으로 error 코드가 적힌 html 문서가 같이 만들어 지도록 hook 에 추가 - hook은 (.py) 파일 구현 👉 구현 방법 - repo : local 값 - id와 name 설정 및 entry 로 .py 실행 - language : python 설정 # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks repos: # make error code html - repo: local hooks: - id: make-error-enum-html name: make-error-en..

Python/Utils 2023.06.24

[Crawling] Beautiful Soup 와 Selenium 선택 기준

Selenium vs Beautiful Soup Selenium과 Beautiful Soup는 웹 스크래핑과 웹 자동화를 위해 사용되는 Python 라이브러리 둘 중에 크롤링을 위해 선택하는 기준은 목적성에 있으며, 때에 따라서는 혼합해서 사용도 가능하다. Selenium 웹 자동화를 위해 사용되는 도구 웹 브라우저를 자동으로 제어 (ex. 클릭 등)하고, 사용자의 동작을 시뮬레이션을 통해 웹 어플리케이션 테스트 및 정보 스크래핑에 사용된다. 웹 브라우저를 제어하기 때문에, JavaScript로 작성된 동적 웹 페이지를 다룰 수 있다. 웹 요소를 조작 하고 제어하기 위해 XPath 또는 CSS Selector(선택자)를 사용 가능하다. ex) 만약 페이지가 단순 html, css가 아닌 JavaScrip..

Python/Crawling 2023.06.10