FastAPI
- 
          로그 분리 법칙FastAPI 2025. 10. 20. 00:31
[로그 레코드의 구조 및 동작 원리] Python의 로깅 시스템은 트리형 계층 구조로 되어있다.(root) ├── app │ ├── api │ │ └── chat │ └── service │ └── user root 로거가 존재하고 각 모듈 (파일) 별로 로거를 지정할 수 있다. 이때 로그가 하위 모듈(한 개의 파일)에서 발생했을 시, 해당 로그 레코드는 root logger까지 전달된다.이때 로그 레코드는 로그를 발생시킨 실제 위치(파일명, 함수명, 라인번호)만 기록되고,root logger까지 가는 도중 거친 부모 로거의 파일명/함수명은 찍히지 않는다. 즉, LogRecord 객체는 발생 시점의 컨텍스트만 담는다.로그 발생 그 순간의 컨텍스트(파일, 함수, 라인, ..
 - 
          aiohttpFastAPI 2025. 10. 17. 02:08
FastAPI이므로 비동기 http client에 관심이 갈 수 밖에 없다. 비동기 http client에는 aiohttp.ClientSession과 httpx.AsyncClient를 사용하는 2가지 방법이 있음. [aiohttp]비동기 http 통신 처리를 하기 위해 만들어진 라이브러리오로지 비동기 http 처리만 지원한다.순수 비동기 함수로 빠르다. [httpx]동기 http 라이브러리인 requests의 업그레이드 버전으로 동기 + 비동기 모두 지원한다.하지만, 기능들이 많아 aiohttp보다 느리다.에러 핸들링 및 예외처리에 대한 지원을 세분하게 할 수 있다. 따라서 단순한 http 요청일때는 aiohttp를 사용하고에러처리 및 다양한 기능을 사용하고 싶을때는 httpx 라이브러리를 사용하면 된..
 - 
          LoggingFastAPI 2025. 10. 11. 22:31
Python은 module-level에서 로그 관련 기능을 제공한다. Python을 설치하면 기본 포함되어있는 표준 라이브러리인 logging 모듈을 통해 pre-built 로거를 사용할 수 있다.import logging [Log Level] 로그는 중요도에 따라 서로 다른 레벨을 가진다.따라서 이 중요도에 따라 로그를 관리할 수 있다.DEBUG10(주로 문제 해결을 할 때 필요한) 자세한 정보.INFO20작업이 정상적으로 작동하고 있다는 확인 메시지.WARNING30예상하지 못한 일이 발생하거나, 발생 가능한 문제점을 명시. ex) ‘disk space low’ 작업은 정상적으로 진행.ERROR40프로그램이 함수를 실행하지 못 할 정도의 심각한 문제.CRITICAL50프로그램이 동작할 수 없을 정도의..
 - 
          CPU Bound vs I/O BoundFastAPI 2025. 10. 10. 17:47
프로세스가 하는 작업은 CPU Bound 작업과 I/O Bound 작업으로 나눌 수 있다.이때 어떠한 작업이 CPU를 요하는 작업이고 어떠한 작업이 I/O 작업인지 판단하고그에 맞게 성능 개선을 하기 위한 전략들을 수립할 수 있어야한다.[CPU Bound] CPU Bound 작업이란 CPU의 계산 능력(연산 속도)이 병목(bottleneck)이 될 수 있는 작업을 말한다.즉, CPU가 죽어라 일해야 끝나는 일을 말한다.CPU의 강도 높은 노동을 요하는 작업을 말한다.대규모 수학 계산 (행렬 연산, 딥러닝 연산)암호화 / 복호화 → 소수 계산을 위한 브루트포스해야하니까이미지 영상 인코딩데이터 압축 / 해제시뮬레이션이런 것들은 모두 CPU가 쉴 틈 없이 계산만 해야하는 작업들이다.I/O 입출력은 없고, CP..
 - 
          single thread event loop vs multi processingFastAPI 2025. 9. 28. 21:49
동시성을 실현할 수 있는 방법은 아래와 같이 두가지가 있다.asyncio와 코루틴 + 이벤트 루프를 활용한 비동기 프로그래밍멀티쓰레딩 활용하지만 FastAPI는 Python 기반이기 때문에 GIL의 제약으로 멀티스레딩을 실현하지 못한다. 따라서 FastAPI는 싱글 스레드 내부의 이벤트 루프를 통해 비동기 프로그래밍 기반의 동시성을 구현한다.즉, 여러 코루틴 객체들을 이벤트 루프에 등록하고,CPU가 코루틴 객체들을 번갈아가면서 실행함으로써동시에 여러 작업이 실행되는 것처럼 보이게 만드는 것이다. 즉, 멀티쓰레딩 없이도, 코루틴 객체와 이벤트 루프를 통해 동시성을 구현할 수 있게 해놨다. 아래와 같다고 착각하면 안된다!아래는 병렬성으로 멀티프로세싱으로 가능한 것이다!이것은 병렬 프로그래밍으로 실제로 진짜로..
 - 
          동시성 vs 병렬성FastAPI 2025. 9. 28. 21:48
동시성과 병렬성의 차이점은 "한 순간에 여러 개의 작업이 수행되느냐"의 차이이다.동시성은 start 지점에서 task1만 실행되었고병렬성은 start 지점에서 task1, 2, 3이 모두 실행되었다. 위와 같이여러 작업을 스위칭하면서 처리하여 여러 작업을 동시에 수행하는 것처럼 "보이게" 하는 것이 동시성이고실제로 진짜로 한 순간에 여러 작업을 동시에 수행하는 것이 병렬성이다. [동시성 (Concurrency)]동시성은 여러개의 작업을 동시에 다루긴 하지만병렬성처럼 한 순간에 여러 작업을 동시에 다루는 것이 아닌,여러 작업들 간에 스위칭을 하면서 동시에 다룬다는 것을 의미한다. → 이때의 스위칭은 CPU의 Context Switching이 아니다.파이썬에서는 코루틴이 대표적인 예시이다.이와 같은 경우는 ..
 - 
          single threading vs multi threadingFastAPI 2025. 9. 28. 20:33
Python에서는 멀티쓰레딩을 사용하면 오히려 더 느려질 수 있다.왜냐하면 Python 자체가 멀티쓰레딩을 지양하는 식으로 설계되어있기 때문이다. Python에는 GIL이라는 한번에 한 개의 쓰레드만 실행할 수 있게 하는 일종의 Lock이 있다.그래서 실제로는 멀티쓰레딩 쓰려고 쓰레드 여러개 만들어놓고 각 쓰레드마다 각기 다른 작업 시켜놔도결국에는 GIL때문에 한개의 쓰레드만 실행하게 된다. 따라서 오히려 멀티쓰레딩 때문에 추가된 Context Switching 오버헤드때문에싱글쓰레딩보다 느려질 수 있다. 따라서 Python(FastAPI)에서는 대부분 멀티쓰레딩 효과를→ 싱글쓰레드 내에 있는 이벤트 루프를 통한 동시성 프로그래밍으로 실현한다. 싱글쓰레드 내부에서 코루틴 객체들을 생성하고 이를 이벤트 루..
 - 
          venvFastAPI 2025. 9. 25. 11:04
venv는 파이썬에서 가상 환경을 생성하고 관리하기 위한 모듈이다.Python은 기본적으로 라이브러리와 패키지들이 시스템의 전역 환경에 설치된다.하지만 이렇게 하면 각 프로젝트 별로 다른 버전의 라이브러리가 필요한 경우 충돌하는 문제가 발생한다.→ 따라서 각 프로젝트마다 가상환경을 지정하고 해당 가상환경에 라이브러리를 설치함으로써 버전 충돌 문제를 해결한다. 가상환경을 사용하면 각각의 프로젝트에 필요한 파이썬 및 라이브러리 버전을 독립적으로 관리할 수 있어서→ 프로젝트 간의 충돌을 방지하고 각 프로젝트에 필요한 환경을 쉽게 설정할 수 있다. 보통 각 프로젝트 마다 root 폴더 바로 밑에 venv라는 폴더를 두고해당 폴더에 필요한 의존성 라이브러리들을 관리하는 형태로 개발한다. venv는 파이썬 표준 라..