Python/Advanced 15

[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] Class 이해 - 언더바 정의, @property, @staticmethod, setter/getter

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

Python/Advanced 2023.07.02

[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

[Python] 가상환경, 패키지 관리 모듈 정리 (pyenv, pipenv, poetry, venv)

pyenv 👉 pyenv란? 동일 OS 내에서 Python을 여러 버전 별로 관리할 수 있는 도구 👉 pyenv 특징 공식문서에 따르면 window는 지원을 하지 않음 (Linux나 Mac) virtualenv를 통해 가상환경 생성 및 관리 (같이 설치됨) Github : https://github.com/pyenv/pyenv ex) 현재 로컬에 Python 3.10 버전을 사용중인데, 3.6 버전으로 프로젝트 진행 필요 ex) 특정 파이썬 버전을 pyenv로 설치하고 삭제가능 👉 pyenv 설치 방법 pyenv 설치는 다음 공식문서를 참고 https://github.com/pyenv/pyenv#homebrew-in-macos 👉 pyenv 주요 명령어 # pyenv 설치 가능한 python 버전 확인 ..

Python/Advanced 2023.02.11

[Python 비동기] (3) Library, Framework 특징 비교

비동기(Asynchronous)란? 👉 Sync vs Async 차이 Synchronous : 함수 A는 함수 B의 수행 상태를 신경쓰며, 계속 상태를 체크 (완료됬는지) Asynchronous : 함수 A는 함수 B의 수행 상태를 신경쓰지 않고, B 혼자 알아서 진행 후 Callback 반환 즉, 호출된 함수(B)를 호출한 함수(A)가 신경쓰는지, 호출된 함수(B)가 알아서 하는지에 따라 동기/비동기 👉 비동기의 가장 큰 장점 주어진 자원을 최대한 활용하여, 순차 코드, 일괄 처리 보다 I/O 부하를 더 빠르게 처리할 수 있다는 점 즉 비동기란, 실행 작업의 완료 Callback 도착 전까지 메인 프로세스/스레드는 멈추지 않고, 다른 작업을 수행하며 주어진 자원을 최대한 활용하는 것 👉 비동기라는 동기..

Python/Advanced 2023.02.09

[Python 비동기] (2) Generator, Async/await 코루틴 코드 비교

이전 글에서는 Python의 코루틴, Async/await 용어 등에 대해 이해해보았다. (개념과 설명에 대한 이해는 이전글 참조) https://yubi5050.tistory.com/234 [Python 비동기] (1) 코루틴, Async/await 용어 이해 Python 비동기 배경 1. python 은 동기 기반으로 설계된 언어로 대부분의 내장 API들이 동기로 작동 2. python 의 비동기 방식(코루틴)들은 Generator를 이용해 비동기 코드를 작성함 3. python 3.4에 asyncio 라 yubi5050.tistory.com 이번 글에서는 Python 코루틴 구현을 위한 Generator와 asyncio 라이브러리의 async/await 구문을 구현 및 비교해본다. 코드 예제 - G..

Python/Advanced 2023.02.09

[Python 비동기] (1) 코루틴, 비동기 관련 용어 이해

Python 비동기 배경 1. python 은 동기 기반으로 설계된 언어로 대부분의 내장 API들이 동기로 작동 2. python 의 비동기 방식(코루틴)들은 Generator를 이용해 비동기 코드를 작성함 3. python 3.4에 asyncio 라이브러리가 표준으로 채택 4. python 3.5에 async/await 키워드가 추가되며, 비동기 프로그래밍이 가능해짐 과거의 Python 비동기 구현은 generator를 이용해 Coroutine을 구현하는 것 현재의 Python 비동기 구현은 asyncio 라이브러리의 async/await 구문을 사용하여 구현하는 것 ※ 여기서 과거란 python 3.5 버전 이전의 방식을 뜻함 Python 비동기 관련 용어 키워드 Subroutine : 특정 프로그램..

Python/Advanced 2023.02.08