분류 전체보기 323

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

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

[리팩토링] 가독성 높이기 - 함수명 개선

배경몇달간의 프로젝트를 진행 후에,서로 다른 코드 스타일, 모듈들의 역할에 대해 상이하게 생각한 부분 등의 문제점들이 발견되었고,2주 간의 리팩토링을 진행하는 시간을 가지게 되었다. 다음 글에서는 리팩토링을 진행 하면서, '가독성 높이기 - 함수명 개선' 에 대한 경험을 공유 하려 한다. 가장 큰 목적은 여럿이서 작성한 다양한 함수명 틀을, 조금이나마 비슷하게 맞춰 가독성을 높이는데 중점을 두었다. 함수명 개선 간 나름 정한 규칙은 다음과 같다- Service Class 명도 해당 함수에 같이 의미 해석 된다.- check, validate, in 등의 비슷한 결의 함수명을 가지게 함 사례 1 - 함수명 개선 하기👉 변경 전 코드## 변경 전 코드# main.pyUserService.update_use..

[리팩토링] 공통 코드 줄이기

배경몇달간의 프로젝트를 진행 후에,서로 다른 코드 스타일, 모듈들의 역할에 대해 상이하게 생각한 부분 등의 문제점들이 발견되었고,2주 간의 리팩토링을 진행하는 시간을 가지게 되었다. 다음 글에서는 리팩토링을 진행 하면서, '공통 코드를 줄이는 것' 에 대한 경험을 공유 하려 한다. 과정👉 리팩토링 전 프로젝트 구조router/ : api 및 service/ return 값에 따른 error handling 수행service/ : 비즈니스 로직 작성 및 결과에 따른 return 성공 여부 반환즉 router에서 service 로직을 호출하여 수행하다가, 성공 여부를 router로 반환해, 핸들링 된 에러로 유저에게 응답하는 방식초기에 이렇게 작성했던 이유는 api 별로 error 흐름을 파악하기 쉽다. ..

[DB, Django] Migration 이슈 해결 모음

migration 이슈 발생시 주로 파악해야 될 연관 부분migration 이슈는 각 개별 환경마다 특수하기 때문에, django에서 특정 DB에 migrations시 어떤 과정으로 반영되는지 직접 이해하는 것이 트러블 슈팅이나 디버깅에 좋다.django의 migrations/ 내 migrations 파일들DB의 django_migrations 테이블 히스토리 사례 1 - 모델이 해당 DB에 없다고 나오는 경우👉 오류 메시지table ~ does not exist 👉 사례 / 해결방법1) migration 파일이 없어서 안생겼을 경우- django의 migration 파일이 잘 생성되었는지 확인 (django makemigrations 시 migrations/__init__.py가 있는지 등) 2) ..

DB/경험 공유 2023.07.08

[배포] 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

[기술면접 대비] Python & 자료구조

Python 자료구조 👉 Python의 list, dictionary의 메모리 접근 시간 복잡도 리스트 시간 복잡도 append, pop() : 특정 원소 추가, 삭제 - O(1) insert(), remove() : 특정 위치 원소 추가,삭제 - O(N) sort() : 정렬 - O(Nlog(N)) dictionary 시간 복잡도 내부적으로 해시테이블을 사용 데이터의 검색, 삽입, 삭제, 수정 - O(1) 👉 Python List는 Array vs Linked-list? Python의 List의 원소로는 다양한 자료형을 내포할 수 있어, Array처럼 연속된 메모리에 저장되기 어려움. 연속되지 않은 메모리에 저장된다는 점에서 Linked List와 좀 더 가깝지만, 다음 주소를 가리키는 방식이 아니기 ..

[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