asyncio

Asyncio Python의 asyncio는 비동기 I/O 프로그래밍을 지원하는 표준 라이브러리로, async/await 구문을 활용해 동시성 코드를 작성할 수 있게 해 준다. 특히 I/O 바운드 작업(네트워크 통신, 파일 입출력 등)에서 성능을 극대화할 수 있으며, Python의 GIL(Global Interpreter Lock) 제약을 우회하는 싱글 스레드 기반 동시성 구현이 가능하다. Python 3.4부터 도입된 asyncio는 웹 서버, 데이터 수집기, 실시간 애플리케이션 등 I/O 집약적인 작업에서 혁신적인 성능 향상을 제공한다. 그러나 동기식 코드 베이스와의 통합 시 주의가 필요하며, 비동기 지원 라이브러리(aiohttp, asyncpg 등)와의 조합이 효과적이다. ...

January 19, 2025 · 6 min · Me

Tree Shaking

Tree Shaking 트리 쉐이킹은 현대 자바스크립트 애플리케이션의 번들 크기를 최적화하는 중요한 기술이다. 트리 쉐이킹은 현대 웹 애플리케이션 최적화의 필수 요소가 되었다. 최적의 결과를 얻기 위한 권장 사항은 다음과 같다: ES 모듈 사용: 모든 코드를 ESM 형식으로 작성하고 사용. 번들러 선택: Rollup 또는 Webpack과 같은 트리 쉐이킹을 지원하는 번들러를 사용. 명시적 가져오기: import * as보다 import { specificFunction }을 선호. 사이드 이펙트 관리: sideEffects 속성을 설정하고 사이드 이펙트를 최소화. 최신 라이브러리 선택: 트리 쉐이킹을 지원하는 라이브러리를 선택. 번들 분석: Bundle Analyzer를 사용하여 결과를 모니터링하고 개선. 순수 함수형 접근 방식: 가능한 한 순수 함수를 작성하고 사용. 자바스크립트 애플리케이션 최적화의 다른 측면과 마찬가지로, 트리 쉐이킹은 세심한 설계와 지속적인 개선이 필요한 분야이다. 적절하게 구현된다면 사용자 경험과 애플리케이션 성능에 상당한 개선을 가져올 수 있다. ...

December 26, 2024 · 10 min · Me

ruff

Ruff Rust로 작성된 고성능 Python 린터이자 코드 포매터. 정적 분석을 통해 코드의 스타일 및 오류를 검토하고 잠재적 문제를 조기에 발견할 수 있도록 돕는다. 코드 스타일과 오류 탐지를 위한 기본 규칙 세트를 포함하고 있다. 기본적으로 PEP8 스타일 가이드를 기반으로 하며, 불필요한 공백, 잘못된 들여쓰기, 코드 복잡도 등 다양한 문제를 다룬다. 다양한 플러그인을 지원하며, 특정 코드 스타일이나 검사 규칙에 맞춘 프리셋을 불러올 수 있다. 특징 속도: 기존 린터들보다 10~100배 빠르다. 다기능성: Flake8, isort, pyupgrade, Black 등 여러 도구를 대체할 수 있다. 800개 이상의 린트 규칙을 지원. 자동 수정: 많은 린트 문제를 자동으로 수정할 수 있다. 설정 용이성: pyproject.toml 파일을 통해 쉽게 설정할 수 있다. 에디터 통합: VS code, Neovim, PyCharm 등 다양한 에디터와 통합 CI/CD 통합: Github Actions와 같은 CI/CD 환경에서 Ruff를 사용하여 코드 품질을 자동으로 검사할 수 있다. 모노레포 친화적: 프로젝트 내 여러 수준에서 설정 파일을 가질 수 있다. Jupyter 노트북 지원: Jupyter Notebook도 린트 및 포맷할 수 있다. 커스터마이징: 규칙 선택, 무시, 수정 가능 여부 등을 세밀하게 제어할 수 있다. 캐싱: 변경되지 않은 파일은 다시 분석하지 않아 실행시 더욱 빠르다 지속적인 개발: 활발한 개발과 커뮤니티 지원으로 계속 발전중 설치 방법 PyPI를 통한 설치 PyPI에서 ruff라는 이름으로 제공 ...

November 28, 2024 · 12 min · Me

autopep8

Autopep8 Python 코드를 PEP 8 스타일 가이드라인에 맞게 자동으로 포맷팅해주는 도구. PEP 8은 Python 코드의 가독성과 일관성을 높이기 위한 스타일 가이드로, Python 커뮤니티에서 널리 받아들여지는 표준이다. 장점: 유연성과 사용자 정의 가능성이 높다. 코드의 일관성을 유지하는 데 도움이 된다. 단점: 때로는 import 문을 과도하게 정렬하여 문제를 일으킬 수 있다. 들여쓰기를 완벽하게 강제하지 않을 수 있다. 사용예시: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 # 원본 코드 (포맷팅 전) def badly_formatted_function ( x,y ,z = 100 ): """이 함수는 의도적으로 나쁜 포맷팅을 가진 예시입니다""" result=x+ y+z if result>50: print( "결과가 50보다 큽니다!") elif result<0: print("결과가 음수입니다!") else:print( "결과가 0에서 50 사이입니다.") return result # list comprehension with bad formatting numbers=[ i for i in range( 10 )if i%2==0] # autopep8 실행 후의 코드 def badly_formatted_function(x, y, z=100): """이 함수는 의도적으로 나쁜 포맷팅을 가진 예시입니다""" result = x + y + z if result > 50: print("결과가 50보다 큽니다!") elif result < 0: print("결과가 음수입니다!") else: print("결과가 0에서 50 사이입니다.") return result # list comprehension with proper formatting numbers = [i for i in range(10) if i % 2 == 0] autopep8은 파이썬 코드를 PEP 8 스타일 가이드에 맞게 자동으로 포맷팅해주는 도구입니다. 주요 특징과 사용법은 다음과 같습니다: ...

November 28, 2024 · 3 min · Me

Black

Black Black은 파이썬을 위한 강력하고 엄격한 코드 포매터. “The Uncompromising Code Formatter"라는 모토를 가지고 있으며, 코드 스타일에 관한 논쟁을 줄이고 개발자들이 더 중요한 작업에 집중할 수 있도록 돕는 것을 목표로 한다. 주요 특징 일관성: Black은 모든 프로젝트에서 일관된 코드 스타일을 제공한다. 자동화: 코드를 자동으로 포맷팅하여 개발자의 수동 작업을 줄인다. PEP 8 호환: Python의 공식 스타일 가이드인 PEP 8을 따르지만, 일부 규칙은 더 엄격하다. 최소한의 설정: 설정 옵션이 제한적이어서 팀 내 스타일 논쟁을 줄인다. 빠른 실행: 대규모 코드베이스에서도 빠르게 작동한다. 핵심 원칙 줄 길이 제한 기본적으로 88자로 제한된다. (이는 PEP 8의 79자보다 더 관대합니다) 긴 줄은 자동으로 여러 줄로 나뉜다. 괄호 안의 요소들은 수직으로 정렬된다. 일관된 문자열 따옴표 사용 기본적으로 큰따옴표(")를 선호한다. 문자열 내에 따옴표가 있는 경우 자동으로 적절한 따옴표를 선택한다. 공백과 들여쓰기 항상 4칸 들여쓰기를 사용한다. 연산자 주변에 일관된 공백을 추가한다. 쉼표 뒤에 항상 공백을 추가한다. 설치 및 사용 pip를 통해 쉽게 설치할 수 있다: ...

November 28, 2024 · 3 min · Me

Flake8

Flake8 Flake8은 파이썬 코드를 위한 강력한 린팅(linting) 도구. 코드 스타일을 체크하고 잠재적인 버그를 감지하는 데 사용된다. 주요 특징 PEP 8 준수: Flake8은 파이썬의 공식 스타일 가이드인 PEP 8을 기반으로 코드를 분석한다. 통합 도구: PyFlakes, pycodestyle, McCabe 복잡도 체커를 하나로 통합한 도구이다. 확장성: 다양한 플러그인을 지원하여 기능을 확장할 수 있다. 빠른 실행 속도: 대규모 코드베이스에서도 빠르게 작동한다. ### 검사하는 주요 항목들 Flake8은 다양한 종류의 코드 품질 문제를 검사한다: PyFlakes를 통한 논리적 오류 검사: 사용되지 않는 임포트 참조되지 않는 변수 문법 오류 이름 공간 관련 문제 pycodestyle을 통한 PEP 8 준수 검사: 들여쓰기 줄 길이 공백 사용 명명 규칙 임포트 순서 McCabe 복잡도 검사: 함수와 메서드의 복잡도 측정 너무 복잡한 코드 블록 식별 리팩토링이 필요한 부분 감지 설치 및 기본 사용법 Flake8은 pip를 통해 쉽게 설치할 수 있다: ...

November 28, 2024 · 3 min · Me

YAPF(Yet Another Python Formatter)

YAPF(Yet Another Python Formatter) Google에서 개발한 파이썬 코드 포매터. 이는 마치 전문 편집자가 문서의 형식을 일관되게 정리하는 것처럼, 파이썬 코드의 스타일을 자동으로 정리해주는 도구이다. YAPF는 코드의 논리는 그대로 유지하면서, 가독성과 일관성을 높이는 방식으로 코드를 재구성한다. 주요 특징 다양한 스타일 지원: PEP 8, Google, Facebook 등 사전 정의된 스타일을 제공한다. 높은 구성 가능성: 사용자가 세부적인 포맷팅 규칙을 설정할 수 있다. 강력한 재포맷팅: PEP 8을 준수하는 코드도 더 나은 가독성을 위해 재구성한다. 장점 높은 유연성과 구성 가능성 다양한 내장 스타일 제공 단점 설정의 복잡성 때로는 비결정적인 포맷팅 결과 작동 방식 이해하기 YAPF는 파이썬 코드를 다음과 같은 단계로 처리한다: ...

November 28, 2024 · 3 min · Me

Pylint

Pylint Pylint는 파이썬 코드의 품질을 검사하고 개선하는데 도움을 주는 강력한 정적 코드 분석 도구. 장점 포괄적인 검사: 다양한 유형의 문제를 감지한다. 사용자 정의: 규칙을 커스터마이징할 수 있다. IDE 통합: 많은 개발 환경에 통합되어 있다. 단점 때때로 과도하게 엄격할 수 있다. 초기 설정이 복잡할 수 있다. 출력 형식 오류 코드, 행 번호, 문제 설명 등을 포함한 상세한 보고서를 제공한다. 주요 기능과 예시 코딩 스타일 검사: 파이썬의 공식 스타일 가이드인 PEP 8을 기준으로 코드 스타일을 검사한다. ...

November 28, 2024 · 3 min · Me

CGI

CGI(Common Gateway Interface) Python의 CGI(Common Gateway Interface)는 웹 서버와 외부 프로그램 간의 통신을 위한 표준 인터페이스. Python에서 CGI를 사용하면 동적 웹 콘텐츠를 생성할 수 있다. https://www.geeksforgeeks.org/what-is-cgi-in-python/ 주요 특징 웹 서버와 Python 프로그램 간의 통신 방식을 정의합니다. 클라이언트의 요청을 처리하고 동적으로 HTML 페이지를 생성합니다. 환경 변수와 표준 입출력을 통해 데이터를 주고받습니다. 프로그램의 구조 셔뱅 라인: #!/usr/bin/python3 필요한 모듈 임포트: import cgi CGI 필드 스토리지 객체 생성: form = cgi.FieldStorage() HTTP 헤더 출력: print(‘Content-type: text/html\n’) HTML 콘텐츠 생성 및 출력 장점 간단하고 이해하기 쉬운 구조 다양한 프로그래밍 언어 지원 웹 서버와 독립적으로 동작 단점 요청마다 새로운 프로세스를 생성하여 리소스 사용량이 많음 대규모 애플리케이션에서는 성능 저하 발생 가능 예시 코드 1 2 3 4 5 6 7 8 #!/usr/bin/python3 import cgi form = cgi.FieldStorage() name = form.getvalue('name', 'World') print('Content-type: text/html\n') print(f'<html><body><h1>Hello, {name}!</h1></body></html>') 이 코드는 사용자의 이름을 입력받아 인사말을 출력하는 간단한 CGI 프로그램. ...

November 28, 2024 · 1 min · Me

WSGI

WSGI(Web Server Gateway Interface) 파이썬 웹 애플리케이션과 웹 서버 간의 표준 인터페이스를 정의하는 규약이다. WSGI는 웹 서버와 웹 애플리케이션 사이에서 중개자 역할을 하며, 파이썬 웹 개발에서 중요한 역할을 담당한다. 웹 서버와 파이썬 애플리케이션의 관계를 생각해보면, 웹 서버(예: Apache, Nginx)는 HTTP 요청을 받아서 처리해야 하고, 파이썬 애플리케이션은 비즈니스 로직을 실행해야 한다. 이 둘을 연결하는 중간자 역할로 WSGI가 등장한다. WSGI는 2003년 PEP 333에서 처음 제안되었고, 현재는 PEP 3333에서 파이썬 3를 위해 업데이트되었다. WSGI는 웹 서버와 파이썬 웹 애플리케이션 사이의 표준 인터페이스를 정의한다. 표준화된 인터페이스가 있기 때문에, 어떤 WSGI 서버든 어떤 WSGI 애플리케이션이든 서로 호환되어 동작할 수 있다. ...

November 28, 2024 · 2 min · Me