Python/성능
-
FastAPI 애플리케이션을 Celery와 RabbitMQ로 슈퍼차징하기FastAPI 애플리케이션에 Celery와 RabbitMQ를 결합하여 백그라운드 작업을 업그레이드하는 방법에 대해 다뤄보겠습니다. 대용량 이미지 처리나 데이터 분석처럼 시간이 오래 걸리는 작업을 효율적으로 관리하는 방법을 찾고 계신가요? 그렇다면 이 글이 딱 맞을 거예요!Celery와 RabbitMQ란?🟢 Celery: 강력한 비동기 작업 큐Celery는 Python 기반의 비동기 작업 큐 시스템입니다. 쉽게 말해, **"이 작업을 백그라운드에서 처리해줘!"**라고 맡길 수 있는 도구죠. 예를 들어, 사용자가 웹사이트에서 이미지를 업로드했을 때, Celery가 백그라운드에서 크기 조정을 처리하도록 만들 수 있습니다.특징:작업을 작은..
[FastAPI] Celery와 RabbitMQ로 슈퍼차징하기FastAPI 애플리케이션을 Celery와 RabbitMQ로 슈퍼차징하기FastAPI 애플리케이션에 Celery와 RabbitMQ를 결합하여 백그라운드 작업을 업그레이드하는 방법에 대해 다뤄보겠습니다. 대용량 이미지 처리나 데이터 분석처럼 시간이 오래 걸리는 작업을 효율적으로 관리하는 방법을 찾고 계신가요? 그렇다면 이 글이 딱 맞을 거예요!Celery와 RabbitMQ란?🟢 Celery: 강력한 비동기 작업 큐Celery는 Python 기반의 비동기 작업 큐 시스템입니다. 쉽게 말해, **"이 작업을 백그라운드에서 처리해줘!"**라고 맡길 수 있는 도구죠. 예를 들어, 사용자가 웹사이트에서 이미지를 업로드했을 때, Celery가 백그라운드에서 크기 조정을 처리하도록 만들 수 있습니다.특징:작업을 작은..
2025.02.20 -
시스템 설계에서 자주 헷갈리는 개념인 **동시성(Concurrency)**과 **병렬성(Parallelism)**에 대해 이야기해보려고 합니다. 비슷해 보이지만 완전히 다른 이 개념들을 예제와 함께 쉽게 풀어볼게요. 끝까지 읽으면 두 개념의 차이와 실세계 적용 사례를 확실히 이해할 수 있을 거예요! 🚀🧩 1. 동시성(Concurrency)이란?동시성은 여러 작업을 동시에 관리하는 개념입니다. 하지만 꼭 여러 작업이 "한 번에 실행"되는 건 아니에요. CPU가 빠르게 작업을 전환하며 진행 상황을 만들어가는 것이 핵심입니다.💡 예제예를 들어, 음악을 들으면서 코딩을 하는 상황을 생각해보세요. 단일 CPU는 한 번에 한 작업만 처리할 수 있지만, 아주 빠르게 두 작업을 번갈아 실행하면서 우리가 "동시에 ..
동시성(Concurrency) vs 병렬성(Parallelism): 차이점 한 번에 정리!시스템 설계에서 자주 헷갈리는 개념인 **동시성(Concurrency)**과 **병렬성(Parallelism)**에 대해 이야기해보려고 합니다. 비슷해 보이지만 완전히 다른 이 개념들을 예제와 함께 쉽게 풀어볼게요. 끝까지 읽으면 두 개념의 차이와 실세계 적용 사례를 확실히 이해할 수 있을 거예요! 🚀🧩 1. 동시성(Concurrency)이란?동시성은 여러 작업을 동시에 관리하는 개념입니다. 하지만 꼭 여러 작업이 "한 번에 실행"되는 건 아니에요. CPU가 빠르게 작업을 전환하며 진행 상황을 만들어가는 것이 핵심입니다.💡 예제예를 들어, 음악을 들으면서 코딩을 하는 상황을 생각해보세요. 단일 CPU는 한 번에 한 작업만 처리할 수 있지만, 아주 빠르게 두 작업을 번갈아 실행하면서 우리가 "동시에 ..
2025.02.20 -
Python 코드가 느려서 답답한 경험, 누구나 한 번쯤 있죠? 제가 사용한 주요 Python 성능 최적화 방법들을 공유하려고 합니다. 이 방법들을 통해 여러분도 Python 스크립트를 빠르게 만들 수 있을 것입니다.1. 성능 병목 구간 찾기: 프로파일링부터 시작성능을 개선하기 전에, 무엇이 문제인지를 아는 것이 가장 중요합니다. 코드에서 병목이 되는 부분을 정확히 찾아내야 효과적인 최적화를 할 수 있죠. 이를 위해 Python의 cProfile을 사용해 프로파일링을 진행해봅시다.import cProfiledef process_file(): # 로그 파일 처리 read_log_file() analyze_data()def read_log_file(): # 파일 읽기 작업 pass..
Python 성능 향상: 3배 더 빠른 스크립트로 바꾸는 방법Python 코드가 느려서 답답한 경험, 누구나 한 번쯤 있죠? 제가 사용한 주요 Python 성능 최적화 방법들을 공유하려고 합니다. 이 방법들을 통해 여러분도 Python 스크립트를 빠르게 만들 수 있을 것입니다.1. 성능 병목 구간 찾기: 프로파일링부터 시작성능을 개선하기 전에, 무엇이 문제인지를 아는 것이 가장 중요합니다. 코드에서 병목이 되는 부분을 정확히 찾아내야 효과적인 최적화를 할 수 있죠. 이를 위해 Python의 cProfile을 사용해 프로파일링을 진행해봅시다.import cProfiledef process_file(): # 로그 파일 처리 read_log_file() analyze_data()def read_log_file(): # 파일 읽기 작업 pass..
2025.02.09 -
이미지 또는 대용량 데이터를 빠르게 로드하려면 캐싱(Cache) 을 활용해야 합니다. 그런데 FastAPI에서 이미지를 캐싱할 때, TTLCache(메모리 캐시)와 DiskCache(디스크 캐시) 중 어떤 것이 더 나을까요?✔ TTLCache: RAM을 사용하여 가장 빠르지만, 메모리 제한이 있음.✔ DiskCache: 디스크를 활용하여 더 많은 데이터를 저장할 수 있지만, 속도가 조금 느림.📌 이번 포스트에서는 두 방식의 성능을 비교하고, 언제 어떤 캐싱 방법을 써야 하는지 정리해보겠습니다.🔥 캐싱 비교: TTLCache vs DiskCache✅ 1. TTLCache (메모리 기반 캐시)from cachetools import TTLCachecache = TTLCache(maxsize=300, tt..
[Python 성능] 🏎️ TTLCache vs DiskCache: 이미지 캐싱 속도 비교와 최적화 방법이미지 또는 대용량 데이터를 빠르게 로드하려면 캐싱(Cache) 을 활용해야 합니다. 그런데 FastAPI에서 이미지를 캐싱할 때, TTLCache(메모리 캐시)와 DiskCache(디스크 캐시) 중 어떤 것이 더 나을까요?✔ TTLCache: RAM을 사용하여 가장 빠르지만, 메모리 제한이 있음.✔ DiskCache: 디스크를 활용하여 더 많은 데이터를 저장할 수 있지만, 속도가 조금 느림.📌 이번 포스트에서는 두 방식의 성능을 비교하고, 언제 어떤 캐싱 방법을 써야 하는지 정리해보겠습니다.🔥 캐싱 비교: TTLCache vs DiskCache✅ 1. TTLCache (메모리 기반 캐시)from cachetools import TTLCachecache = TTLCache(maxsize=300, tt..
2025.02.03 -
FastAPI 애플리케이션의 성능을 개선하기 위해 많은 자료를 찾아보고 정리해봅니다.예제 소개다음은 FastAPI의 기본적인 엔드포인트 예제입니다. Product라는 Pydantic 모델을 정의하고, products 리스트를 반환하는 엔드포인트를 구현했습니다. 각 섹션에서 이 코드를 조금씩 최적화하며 개선해 보겠습니다.from fastapi import FastAPIfrom pydantic import BaseModelapp = FastAPI()class Product(BaseModel): product_id: str price: float@app.get("/products/", response_model=list[Product])def read_products(): products =..
FastAPI 성능 최적화하기FastAPI 애플리케이션의 성능을 개선하기 위해 많은 자료를 찾아보고 정리해봅니다.예제 소개다음은 FastAPI의 기본적인 엔드포인트 예제입니다. Product라는 Pydantic 모델을 정의하고, products 리스트를 반환하는 엔드포인트를 구현했습니다. 각 섹션에서 이 코드를 조금씩 최적화하며 개선해 보겠습니다.from fastapi import FastAPIfrom pydantic import BaseModelapp = FastAPI()class Product(BaseModel): product_id: str price: float@app.get("/products/", response_model=list[Product])def read_products(): products =..
2025.01.15 -
Python의 비동기 프로그래밍을 활용하여 데이터베이스 쿼리를 어떻게 효율적으로 최적화할 수 있는지 알아보겠습니다.특히 asyncio.gather()를 사용한 멋진 코드 한 줄로 어떻게 성능을 크게 향상시킬 수 있는지 살펴보죠.문제 상황여러분이 아래와 같은 코드로 여러 개의 데이터베이스 쿼리를 순차적으로 실행하고 있다고 가정해봅시다:hashTags = []for val in hashBroker: hashtag = await findOne(dbName, table, {"_id": ObjectId(val.get('hashtagID'))}) hashTags.append(hashtag)이 코드는 작동하지만, 각 쿼리를 하나씩 순차적으로 처리하기 때문에 hashBroker의 크기가 크다면 상당한 시간이..
비동기 프로그래밍의 마법: asyncio.gather()로 데이터베이스 쿼리 최적화하기Python의 비동기 프로그래밍을 활용하여 데이터베이스 쿼리를 어떻게 효율적으로 최적화할 수 있는지 알아보겠습니다.특히 asyncio.gather()를 사용한 멋진 코드 한 줄로 어떻게 성능을 크게 향상시킬 수 있는지 살펴보죠.문제 상황여러분이 아래와 같은 코드로 여러 개의 데이터베이스 쿼리를 순차적으로 실행하고 있다고 가정해봅시다:hashTags = []for val in hashBroker: hashtag = await findOne(dbName, table, {"_id": ObjectId(val.get('hashtagID'))}) hashTags.append(hashtag)이 코드는 작동하지만, 각 쿼리를 하나씩 순차적으로 처리하기 때문에 hashBroker의 크기가 크다면 상당한 시간이..
2024.08.13 -
성능에 대해서는 프로그램을 만들고 나서나 기능 개발이 완료되고 나서나 작동이 잘되는것을 확인했는데 속도가 아쉽다면 항상 고민을 하게 됩니다.우리는 더 나은 품질에 빠릿빠릿한 프로그램을 원하니까요!프로그램이 원할하게 돌아가게 하기 위해선 Frontend에서의 부드러움도 중요하지만 그만큼 Backend 및 자동화를 위한 스크립트에서도 빠른 속도가 바쳐줘야 합니다. 이글은 제가 많은 시도 끝에 성능을 올려본 방법론중에 하나이며 스스로도 추후에 참고하고 싶어 기록을 남겨봅니다.속도가 문제가 되는곳에는 그만큼 거대한 연산작업이 있다는것입니다. 그 거대한 연산작업을 기다리지 않고 병렬로 처리한다면 사용자는 우선적으로 결과값을 바로 받을 수 있어 사용성에 부드러움을 느낄 수 있습니다. 그 병렬처리를 위해 동시프로그래..
(Python 성능 향상) concurrent.futures 동시 프로그래밍 모듈로 속도 개선해보자!성능에 대해서는 프로그램을 만들고 나서나 기능 개발이 완료되고 나서나 작동이 잘되는것을 확인했는데 속도가 아쉽다면 항상 고민을 하게 됩니다.우리는 더 나은 품질에 빠릿빠릿한 프로그램을 원하니까요!프로그램이 원할하게 돌아가게 하기 위해선 Frontend에서의 부드러움도 중요하지만 그만큼 Backend 및 자동화를 위한 스크립트에서도 빠른 속도가 바쳐줘야 합니다. 이글은 제가 많은 시도 끝에 성능을 올려본 방법론중에 하나이며 스스로도 추후에 참고하고 싶어 기록을 남겨봅니다.속도가 문제가 되는곳에는 그만큼 거대한 연산작업이 있다는것입니다. 그 거대한 연산작업을 기다리지 않고 병렬로 처리한다면 사용자는 우선적으로 결과값을 바로 받을 수 있어 사용성에 부드러움을 느낄 수 있습니다. 그 병렬처리를 위해 동시프로그래..
2024.06.17