setup.cfg vs pyproject.toml

setup.cfg vs. pyproject.toml setup.cfg와 pyproject.toml은 Python 프로젝트의 구성과 메타데이터를 정의하는 파일 형식이다. 이 두 파일은 프로젝트 설정, 의존성, 빌드 시스템 등을 관리하는 데 사용되며, 각각의 특징과 용도가 있다. setup.cfg는 setuptools를 사용하는 전통적인 Python 패키징 시스템의 일부이다. 형식: INI 스타일의 설정 파일 주요 용도: 프로젝트 메타데이터 정의 (이름, 버전, 설명 등) 의존성 선언 패키지 데이터 및 스크립트 설정 특징: setup.py와 함께 사용되어 왔음 정적 메타데이터를 선언적으로 정의하는 데 적합 레거시 도구와의 호환성 유지 pyproject.toml은 PEP 518에서 도입된 새로운 표준 구성 파일이다. ...

November 27, 2024 · 3 min · Me

NodeJS vs. Javascript

NodeJS vs. Javascript JavaScript는 웹 페이지에 동적인 기능을 추가하기 위해 만들어진 프로그래밍 언어이다. 주요 특징은 다음과 같다: 객체 기반의 스크립트 언어이다. 동적이며 타입을 명시할 필요가 없는 인터프리터 언어이다. 이벤트 중심의 프로그래밍이 가능하다. 웹 브라우저에서 실행되며, HTML 문서와 함께 사용된다. 프로토타입 기반의 객체지향 프로그래밍을 지원한다. 1 2 3 4 5 6 7 8 9 10 // JavaScript 예시 // DOM 조작 document.getElementById('myButton').addEventListener('click', function() { alert('버튼이 클릭되었습니다!'); }); // 비동기 처리 fetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data));**** Node.js는 JavaScript를 서버 측에서 실행할 수 있게 해주는 런타임 환경이다. 주요 특징은 다음과 같다: ...

November 23, 2024 · 2 min · Me

import vs require

Import vs. Require 참고 및 출처

November 23, 2024 · 1 min · Me

Javascript Engines

Javascript Engines JavaScript 엔진은 JavaScript 코드를 이해하고 실행하는 프로그램이다. 웹 브라우저나 Node.js와 같은 환경에서 JavaScript 코드를 해석하고 실행하는 핵심 요소이다. JavaScript는 원래 인터프리터 언어로 설계되었지만, 현대의 JavaScript 엔진들은 성능 향상을 위해 다양한 최적화 기술을 사용한다. JavaScript 엔진의 주요 역할: JavaScript 코드를 읽고 구문 분석(파싱) 코드를 기계어 또는 중간 표현으로 변환 코드 실행 메모리 관리 (가비지 컬렉션 포함) 최적화 수행 JavaScript 엔진은 현대 웹의 핵심 구성 요소로, 웹 브라우저와 서버 측 애플리케이션 모두에서 JavaScript 코드를 실행하는 데 필수적이다. Google의 V8, Mozilla의 SpiderMonkey, Apple의 JavaScriptCore와 같은 주요 엔진들은 계속해서 발전하며, 성능을 향상시키고 새로운 언어 기능을 지원하고 있다. ...

February 24, 2025 · 10 min · Me

select_related

select_related select_related는 SQL의 JOIN 연산을 활용하여 외래 키(Foreign Key) 관계가 있는 객체를 단일 쿼리로 함께 가져오는 메서드이다. 이는 “many-to-one” 관계(ForeignKey)나 “one-to-one” 관계(OneToOneField)에서 특히 유용하다. 1 2 3 4 5 # 기본 사용법 book = Book.objects.select_related('publisher').get(id=1) # 이제 book.publisher에 접근할 때 추가 쿼리 없이 바로 접근 가능 publisher_name = book.publisher.name # 추가 데이터베이스 호출 없음 Django의 select_related는 관계형 데이터를 효율적으로 가져오기 위한 필수적인 도구이다. 올바르게 사용하면 애플리케이션의 성능을 크게 향상시킬 수 있다. 특히 ForeignKey와 OneToOneField 관계에서 N+1 쿼리 문제를 해결하는 데 탁월하다. ...

February 8, 2025 · 6 min · Me

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

Greenlet and Gevent

Greenlet and Gevent Greenlet과 Gevent는 Python에서 동시성 프로그래밍을 위한 라이브러리이다. Greenlet Greenlet은 Python에서 경량 코루틴을 구현한 라이브러리이다. 추가적으로 이야기 하면, Greenlet은 Python의 경량 협력적 멀티태스킹(cooperative multitasking)을 위한 기본 단위이다. 이는 마치 매우 가벼운 스레드처럼 작동하지만, 운영체제 수준의 스레드가 아닌 사용자 공간에서 실행되는 마이크로스레드이다. 주요 특징: 경량성: 일반 스레드보다 생성 비용이 매우 적다. 협력적 멀티태스킹: 명시적으로 제어권을 양보할 때만 컨텍스트 스위칭이 일어난다. 단일 OS 스레드 내 실행: 모든 greenlet은 동일한 물리적 스레드에서 실행된다. 사용 예: ...

January 19, 2025 · 4 min · Me

Typescript vs. Javascript

Typescript vs. Javascript JavaScript와 TypeScript는 둘 다 웹 및 기타 환경에서 널리 사용되는 프로그래밍 언어이지만, 설계와 사용 목적에 있어 몇 가지 중요한 차이가 있다. JavaScript는 인터프리터(또는 JIT 컴파일러)에 의해 실행되는 동적 타입의 스크립트 언어로, 유연성과 간편함을 제공하며 브라우저와 Node.js 등에서 기본 언어로 사용된다. TypeScript는 Microsoft에서 개발한 JavaScript의 상위 집합(superset)으로, 정적 타입 시스템과 클래스, 인터페이스, 제네릭 등 강력한 객체지향 프로그래밍(OOP) 기능을 추가하여 대규모 애플리케이션이나 엔터프라이즈 환경에서 코드의 안정성과 유지보수성을 높이는 데 목적이 있다. JavaScript JavaScript는 1995년 Brendan Eich에 의해 만들어진 웹 브라우저용 스크립트 언어이다. 원래는 웹 페이지에 상호작용을 추가하기 위해 설계되었지만, 현재는 브라우저 환경 외에도 서버 사이드(Node.js), 모바일 앱 개발(React Native), 데스크톱 애플리케이션(Electron) 등 다양한 환경에서 사용된다. ...

January 19, 2025 · 4 min · Me

Modin

Modin Modin은 pandas를 대체할 수 있는 고성능 데이터프레임 라이브러리. 주요 특징 Pandas API 호환성: pandas와 거의 동일한 API를 제공하여 기존 코드를 쉽게 마이그레이션할 수 있다. 병렬 처리: 다중 코어를 활용하여 데이터 처리 속도를 크게 향상시킨다. 분산 컴퓨팅: Ray, Dask, Unidist 등 다양한 백엔드를 지원하여 분산 환경에서 실행할 수 있다. 대용량 데이터 처리: 메모리 크기를 초과하는 대규모 데이터셋도 효율적으로 처리할 수 있다. 쉬운 사용법: pandas import 문을 modin으로 변경하는 것만으로 사용 가능하다. 성능 향상 4코어 노트북에서 최대 4배 속도 향상 대규모 데이터셋(~1TB+)에서도 효율적으로 작동 메모리 사용량 최적화로 pandas보다 2-4배 적은 RAM 사용 사용 예시 1 2 3 4 import modin.pandas as pd df = pd.read_csv("large_dataset.csv") result = df.groupby("column").mean() 장점 간편한 사용: pandas 코드를 그대로 사용 가능 확장성: 단일 머신에서 클러스터까지 확장 가능 메모리 효율성: 대용량 데이터 처리에 적합 다양한 백엔드 지원: Ray, Dask, MPI 등 선택 가능 제한사항 pandas API의 90% 정도만 지원 (지속적으로 확장 중) 일부 고급 기능에서는 pandas로 폴백되어 성능 저하 가능성 Modin은 대규모 데이터 분석, 머신러닝 파이프라인, 데이터 전처리 등 다양한 분야에서 활용될 수 있으며, pandas의 성능 한계를 극복하고자 하는 데이터 과학자들에게 유용한 도구이다. ...

January 17, 2025 · 1 min · Me

Dask

Dask Dask는 파이썬을 위한 유연한 병렬 컴퓨팅 라이브러리. 대규모 데이터 처리와 복잡한 계산을 효율적으로 수행할 수 있도록 설계되었다. 주요 특징 대규모 데이터셋 처리: Dask는 메모리에 들어가지 않는 매우 큰 데이터셋을 처리할 수 있다. 병렬 및 분산 컴퓨팅: 복잡한 병렬 알고리즘을 쉽게 작성할 수 있으며, 여러 머신에 걸쳐 작업을 분산시킬 수 있다. 지연 실행(lazy execution): 작업을 즉시 실행하지 않고, 계산 그래프를 구성하여 최적화하고 효율적으로 실행한다. NumPy, Pandas, Scikit-Learn과의 호환성: 이러한 라이브러리들의 대규모 데이터셋에 대한 확장된 버전을 제공한다. 동적 작업 스케줄링: 계산 작업을 동적으로 스케줄링하여 리소스 사용을 최적화한다. 장점 pandas와 유사한 API로 사용이 쉬움 대용량 데이터 처리에 효율적 병렬 처리를 통한 빠른 연산 속도 단점 복잡한 연산 시.compute() 함수 사용으로 인한 시간 소요 일부 고급 기능에서는 제한적일 수 있음 Dask의 구성 Dask는 크게 세 부분으로 구성되어 있다: ...

January 17, 2025 · 2 min · Me