FastAPI 비동기 처리와 이벤트 루프 이해 — uvicorn, uvloop, asyncio, libuv

개요 FastAPI의 비동기 처리 흐름을 이벤트 루프 관점에서 정리 Node.js의 libuv 기반 모델을 기준선으로, Python의 asyncio와 uvloop, 그리고 Uvicorn이 FastAPI 요청을 어떻게 비동기로 처리하는지 비교 I/O 바운드 중심의 동작 원리와 GIL 제약, 실무에서의 주의점을 함께 정리 Node.js 이벤트 루프 요약 싱글 스레드 논블로킹 모델의 핵심은 이벤트 루프와 비동기 I/O 위임 Node.js는 C로 구현된 libuv를 통해 커널 비동기 I/O를 활용하거나, 미지원 경우 스레드풀로 오프로드 기본 스레드풀 크기는 4로 시작, 환경변수로 조정 가능 libuv가 커널 비동기 I/O를 직접 쓰는 경우와 아닌 경우의 차이 참고 ...

March 24, 2026

Python의 Call by Object Reference 정확히 이해하기

개요 파이썬 변수와 함수 인수 전달 방식을 정리함 주요 키워드 세 가지 정리 call by value call by reference call by object reference (aka call by sharing) 헷갈리는 포인트는 call by reference와 call by object reference의 차이임 파이썬에서 실제로 일어나는 바인딩과 가변성의 조합으로 이해 필요 호출 방식 개념 정리 Call by Value 인수 전달 시 값의 복사 전달 함수 내부에서 인자를 변경해도 호출자 쪽 원본에는 영향 없음 Call by Reference 인수 전달 시 변수 자체를 참조로 전달하는 모델 함수 내부 변경이 호출자 변수에 그대로 반영됨 특정 언어에서만 엄밀히 지원되는 개념이며, C는 포인터를 값으로 전달해 유사 동작을 만들 수 있으나 언어 차원의 call by reference와는 구분 필요 Java는 참조 자체를 값으로 전달하므로 call by reference가 아님에 주의 ...

March 19, 2026

파이썬 MRO(Method Resolution Order)와 super 동작 원리 정리

개요 파이썬은 다중 상속을 지원하며 동일한 이름의 메소드가 여러 부모에 존재할 때 어떤 구현을 선택할지 결정해야 함 이 결정 규칙이 MRO(Method Resolution Order)로, 클래스 계층 전체에서 메소드를 탐색하는 순서를 정의함 MRO가 없다면 동일 시그니처 메소드가 교차 상속되는 상황에서 해석 모호성, 이른바 death diamond 문제가 발생함 핵심 개념 MRO의 본질은 메소드 탐색 순서의 선형화 파이썬은 C3 linearization 알고리즘으로 일관된 순서를 계산함 규칙 요약 자식 클래스가 먼저 왼쪽에서 오른쪽으로 명시한 부모 순서를 존중 각 부모의 MRO를 안정적으로 병합하여 일관성 유지 클래스 속성 mro 또는 클래스 메소드 mro()로 확인 가능 동작 원리 탐색 순서 기본 형태 자식 클래스 → 명시된 순서의 부모들 → 각 부모의 상위 클래스들 → 최상위 object 순으로 선형화 C3 linearization은 다음 제약을 동시에 만족하는 유일한 순서를 생성 자식은 항상 부모보다 앞선다 부모 목록의 왼쪽 우선 순서를 보존한다 부모들의 MRO 순서를 보존한다 이 규칙으로 동일 이름 메소드가 다수 존재해도 첫 번째로 만나는 구현이 선택됨 사용법과 간단 예시 다중 상속에서 실제 탐색 순서를 눈으로 확인하는 것이 가장 빠름 ...

March 16, 2026