Python/Advanced 17

[라이브러리] requests 라이브러리 Timeout 에러 분류

Timeout 에러 timeout 에러 발생시, 다양한 이유에서 Timeout 504 에러가 발생 할 수 있다. ConnectTimeOut 연결 수립 과정(Connection TimeOut) 에서의 에러해당 서버로 아예 연결 수립 과정에서 막히는 경우timeout=0.0001 : 0.0001 초 안에 연결 수립 되어야 한다고 가정import requestsfrom requests.exceptions import ReadTimeout, ConnectTimeout############## Error - ConnectTimeout 에러! ##############url = "https://alden-kang.tistory.com/20"try: # 의도적으로 매우 짧은 타임아웃으로 연결 수립 조차 못하게 ..

Python/Advanced 2024.12.20

[Python] 데이터 직렬화 및 검증 라이브러리 비교 (with 웹프레임워크)

요약아래 표를 기준으로 사용 환경, 타입 검사, 문서화 여부 등이 주된 기준 요소 일 것 같다.제공되는 기능 자체는 동일해서, 라이브러리 사용 방식? 이 보다 편하게 느껴지는 것으로 선택하면 될 것 같다.   PydanticDRFMarshmallowCerberusColanderVoluptuousAttrsSchematics릴리즈 날짜2018년 1월2011년 7월2013년 5월2014년 1월2010년 6월2012년 9월2016년 4월2013년 7월사용 환경FastAPIDjangoFlaskChalice일반 PythonPyramid일반 Python타입 검사파이썬 타입 힌팅명시적 타입필드명시적 필드 타입명시적 필드 타입명시적 필드 타입명시적 필드 타입파이썬 타입 힌팅명시적 필드 타입유효성 검사다양한 기본 제공 유..

Python/Advanced 2024.08.04

[최적화] Python 인터닝(Interning) 기법

인터닝 (Interning)인터닝(Interning) 은 동일한 값을 가진 불변 "객체"를 하나만 유지하여 메모리 사용을 최적화하고, 객체 비교를 빠르게 하는 기술 파이썬에서의 인터닝의 특징일정 길이의 문자열에 대해서 자동으로 인터닝이 적용된다.일정 크기의 숫자에 대해서 자동으로 인터닝이 적용된다.사용자가 sys.intern 으로 직접 인터닝 풀에 집어넣어 놓고 관리할 수 있다.일정 길이, 일정 크기는 cpython 즉 python 버전에 따라 다를 수 있다.주로 메모리 사용 최적화에 사용된다. 인터닝 예시 코드# Python 언어의 자동 인터닝 o# 문자열 str1, str2 = 'abcdefg', 'abcdefg'# id 함수는 객체가 메모리 내에 위치 반환print(id(str1) == id(str..

Python/Advanced 2024.08.03

[Python] 코드 실행 과정

인터프리터 언어 Python 파이썬은 인터프리터 언어로 CPython 이라는 컴파일러에 의해 소스 코드를 바이트 코드로 변환하여 PVM (Python Virtual Machine) 에 의해 기계어로 한줄 한줄 번역 (인터프리팅) 되며 실행 (실행되는 이 순간을 런타임 이라고도 함)된다. Python 실행 과정 .py 코드 작성Python 인터프리터(Cpython) 가 소스 코드를 읽어 바이트 코드(.pyc 파일) 로 변환 및 저장- 문법적인 오류가 있다거나 등 이면 에러 발생Python 가상 머신(PVM)은 바이트코드를 읽고 실행- 바이트 코드를 한줄 한줄 번역하여 프로그램을 실행- Python의 메모리 관리, 변수 처리, 함수 호출 등이 이루어짐PVM 에서 실행 중 오류가 있다면 에러 발생이러한 과정을..

Python/Advanced 2024.07.31

[Python] 모듈과 패키지

모듈과 패키지의 관계모듈은 하나의 .py 파일들 / 혹은 파일 내 클래스, 함수, 변수 등을 지칭함파이썬 모듈은 다음과 같이 사용함# random 내장 라이브러리 모듈 importimport random# random 모듈의 shuffle() 함수 importfrom random import random_shuffle# random 모듈의 shuffle() 함수 importimport random.random_shuffle  패키지는 모듈(혹은 패키지)을 포함하는 디렉토리(directory)를 지칭함# Ipython 폴더의 display 폴더의 Image 라는 모듈을 importfrom IPython.display import Image  폴더 구조의 __init__.py__init__.py 란 다음 ..

Python/Advanced 2024.06.22

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

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

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

Python/Advanced 2023.07.02

[Crawling] Beautiful Soup 와 Selenium 선택 기준

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

Python/Advanced 2023.06.10

[배포] Python ASGI 배포 서버 종류 비교

Python ASGI 배포 서버Python에서 웹 어플리케이션(Django, FastAPI, Flask 등)을 배포시 비동기 요청 처리를 위해, ASGI 서버를 사용하여 배포하게 되는데, Python 기반의 ASGI 서버들을 비교해보며, 종류와 특징에 대해 알아 본다. 주로 많이 언급되는 건 다음과 같다.Uvicorn (asyncio, uvloop)DaphneHypercornStarlette 사실 결론부터 말하자면, 사용하는 프레임워크나 기능에 따라 배포 서버에 대한 선택지가 한정적인 것으로 생각되는데 FastAPI로 배포를 희망→ 공식문서에서 지원하는 Uvicorn이나 Hypercorn 을 쓰는 것이 일반적 Django / Flask 에 Websocket 프로토콜 처리가 필요→ Daphne 이 적절  ..

Python/Advanced 2023.06.06

[Python] Circular Import에 따른 파일 구조 개선

이슈 배경 - 비즈니스 로직이 구현되어 있는 service layer의 service_xxx.py 들 간에 Circular import가 발생 구현 코드 기존에 정상적으로 동작하는 코드 ### service_a.py from service_b import Service_B class Service_A: def a1(): Service_B.b1() def a2(): pass ### service_b.py class Service_B: def b1(): pass 로직 추가 후 circular import 발생 ### service_a.py from service_b import Service_B class Service_A: def a1(): Service_B.b1() def a2(): pass ### se..

Python/Advanced 2023.05.29